Version 2.18.0-267.0.dev

Merge commit '2acc88a52d653d987541ee14857bdf35ef6fc9eb' into 'dev'
diff --git a/pkg/front_end/test/incremental_suite.dart b/pkg/front_end/test/incremental_suite.dart
index da9478c..de4a3cf 100644
--- a/pkg/front_end/test/incremental_suite.dart
+++ b/pkg/front_end/test/incremental_suite.dart
@@ -2208,7 +2208,8 @@
         getterReference: lib.reference.canonicalName
             ?.getChildFromFieldGetterWithName(fieldName)
             .reference,
-        fileUri: lib.fileUri);
+        fileUri: lib.fileUri)
+      ..isNonNullableByDefault = lib.isNonNullableByDefault;
     lib.addField(field);
     for (Class c in lib.classes) {
       if (c.fields
@@ -2224,7 +2225,8 @@
           getterReference: c.reference.canonicalName
               ?.getChildFromFieldGetterWithName(fieldName)
               .reference,
-          fileUri: c.fileUri);
+          fileUri: c.fileUri)
+        ..isNonNullableByDefault = lib.isNonNullableByDefault;
       c.addField(field);
     }
   }
diff --git a/pkg/front_end/testcases/incremental/await_in_non_async.yaml b/pkg/front_end/testcases/incremental/await_in_non_async.yaml
index 06c5f68..6e1730d 100644
--- a/pkg/front_end/testcases/incremental/await_in_non_async.yaml
+++ b/pkg/front_end/testcases/incremental/await_in_non_async.yaml
@@ -10,7 +10,6 @@
     warnings: false
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           foo();
         }
@@ -26,7 +25,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           await foo();
         }
diff --git a/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect b/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect
index 1e5883c..0e7c789 100644
--- a/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect
@@ -3,13 +3,13 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:3: Error: 'await' can only be used in 'async' or 'async*' methods.
+// org-dartlang-test:///main.dart:2:3: Error: 'await' can only be used in 'async' or 'async*' methods.
 //   await foo();
 //   ^^^^^
 //
 
   static method main() → dynamic {
-    invalid-expression "org-dartlang-test:///main.dart:3:3: Error: 'await' can only be used in 'async' or 'async*' methods.\n  await foo();\n  ^^^^^";
+    invalid-expression "org-dartlang-test:///main.dart:2:3: Error: 'await' can only be used in 'async' or 'async*' methods.\n  await foo();\n  ^^^^^";
   }
   static method foo() → dynamic {}
 }
diff --git a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml
index f6870cd..2e729f2 100644
--- a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml
+++ b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml
@@ -9,11 +9,9 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class A extends B {}
       lib.dart: |
-        // @dart=2.9
         class B {
           void bMethod() {}
         }
@@ -25,11 +23,9 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class A extends B {}
       lib.dart: |
-        // @dart=2.9
         class B {
           void bMethod() {}
         }
@@ -53,11 +49,9 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class A extends B {}
       lib.dart: |
-        // @dart=2.9
         class B {
           void bMethod() {}
         }
diff --git a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.1.expect b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.1.expect
index ab925ca..f05d8a2 100644
--- a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.1.expect
@@ -2,20 +2,10 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class B extends dart.core::Object {
-    synthetic constructor •() → lib::B*
+    synthetic constructor •() → lib::B
       : super dart.core::Object::•()
       ;
     method bMethod() → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -23,7 +13,7 @@
   import "org-dartlang-test:///lib.dart";
 
   class A extends lib::B {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super lib::B::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.2.expect b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.2.expect
index ab925ca..f05d8a2 100644
--- a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.2.expect
@@ -2,20 +2,10 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class B extends dart.core::Object {
-    synthetic constructor •() → lib::B*
+    synthetic constructor •() → lib::B
       : super dart.core::Object::•()
       ;
     method bMethod() → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -23,7 +13,7 @@
   import "org-dartlang-test:///lib.dart";
 
   class A extends lib::B {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super lib::B::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
index 69312e6..e2d5d4f 100644
--- a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
@@ -2,11 +2,10 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class B extends #lib1::Object {
-    synthetic constructor •() → lib::B*
+    synthetic constructor •() → lib::B
       : super #lib1::Object::•()
       ;
     method bMethod() → void {}
-    abstract member-signature operator ==(dynamic dynamic) → #lib1::bool*; -> #lib1::Object::==
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -14,7 +13,7 @@
   import "org-dartlang-test:///lib.dart";
 
   class A extends lib::B {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super lib::B::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/calculated_bounds_no_strongmode.yaml b/pkg/front_end/testcases/incremental/calculated_bounds_no_strongmode.yaml
index a414ca1..f884677 100644
--- a/pkg/front_end/testcases/incremental/calculated_bounds_no_strongmode.yaml
+++ b/pkg/front_end/testcases/incremental/calculated_bounds_no_strongmode.yaml
@@ -11,12 +11,10 @@
   - a.dart
 sources:
   a.dart: |
-    // @dart=2.9
     import 'b.dart';
 
     class A {
       void foo(B cls) {}
     }
   b.dart: |
-    // @dart=2.9
     abstract class B<T extends String> {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/change_between_no_nnbd_and_nnbd.yaml b/pkg/front_end/testcases/incremental/change_between_no_nnbd_and_nnbd.yaml
index 6c6a9bd..1743104 100644
--- a/pkg/front_end/testcases/incremental/change_between_no_nnbd_and_nnbd.yaml
+++ b/pkg/front_end/testcases/incremental/change_between_no_nnbd_and_nnbd.yaml
@@ -11,7 +11,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         main() {
           libMethod();
diff --git a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml
index a4648e6..4141487 100644
--- a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml
+++ b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml
@@ -11,7 +11,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart";
 
         main() {
@@ -19,7 +18,6 @@
           print(c);
         }
       lib.dart: |
-        // @dart=2.9
         class A {
           const A();
         }
@@ -41,6 +39,5 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.1.expect
index f9945e5..2f204b3 100644
--- a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.1.expect
@@ -2,37 +2,17 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class A extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •() → lib::A*
+    const constructor •() → lib::A
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class B extends dart.core::Object implements lib::A /*hasConstConstructor*/  {
-    const constructor •() → lib::B*
+    const constructor •() → lib::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class C extends lib::B /*hasConstConstructor*/  {
-    const constructor •([lib::A* a = #C1]) → lib::C*
+    const constructor •([lib::A a = #C1]) → lib::C
       : super lib::B::•()
       ;
   }
@@ -53,11 +33,11 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- C. (from org-dartlang-test:///lib.dart:11:9)
-- B. (from org-dartlang-test:///lib.dart:7:9)
+- C. (from org-dartlang-test:///lib.dart:10:9)
+- B. (from org-dartlang-test:///lib.dart:6:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
 org-dartlang-test:///lib.dart:
-- A. (from org-dartlang-test:///lib.dart:3:9)
+- A. (from org-dartlang-test:///lib.dart:2:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.2.expect b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.2.expect
index f994018..15ba313 100644
--- a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.2.expect
@@ -2,37 +2,17 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class A extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •() → lib::A*
+    const constructor •() → lib::A
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class B extends dart.core::Object implements lib::A /*hasConstConstructor*/  {
-    const constructor •() → lib::B*
+    const constructor •() → lib::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class C extends lib::B /*hasConstConstructor*/  {
-    const constructor •([lib::A* a = #C1]) → lib::C*
+    const constructor •([lib::A a = #C1]) → lib::C
       : super lib::B::•()
       ;
   }
@@ -49,6 +29,6 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///lib.dart:
-- A. (from org-dartlang-test:///lib.dart:3:9)
+- A. (from org-dartlang-test:///lib.dart:2:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/changing_modules.yaml b/pkg/front_end/testcases/incremental/changing_modules.yaml
index e6638ae..44769e1 100644
--- a/pkg/front_end/testcases/incremental/changing_modules.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules.yaml
@@ -9,7 +9,6 @@
 modules:
   example_0.1.0:
     example_0.1.0/a.dart: |
-      // @dart=2.9
       a() {
         la1();
       }
@@ -17,7 +16,6 @@
         print("Hello from v0.1.0");
       }
     example_0.1.0/b.dart: |
-      // @dart=2.9
       import "a.dart";
       b() {
         a();
@@ -34,7 +32,6 @@
       }
   example_0.1.1:
     example_0.1.1/b.dart: |
-      // @dart=2.9
       b() {
         print("Hello from v0.1.1");
       }
@@ -51,7 +48,6 @@
       }
   foo_1:
     foo_1/foo.dart: |
-      // @dart=2.9
       import "package:example/b.dart";
       foo() {
         print("Hello from foo");
@@ -74,7 +70,6 @@
       }
   foo_2:
     foo_2/foo.dart: |
-      // @dart=2.9
       import "package:example/b.dart";
       import "bar.dart";
       import "baz.dart";
@@ -86,12 +81,10 @@
       }
       bool foo2 = true;
     foo_2/bar.dart: |
-      // @dart=2.9
       bar() {
         print("hello from bar");
       }
     foo_2/baz.dart: |
-      // @dart=2.9
       baz() {
         print("hello from baz");
       }
@@ -114,7 +107,6 @@
     fromComponent: true
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
@@ -149,7 +141,6 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:foo/foo.dart";
         main() {
           print("hello");
@@ -191,7 +182,6 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:foo/foo.dart";
         main() {
           print("hello");
diff --git a/pkg/front_end/testcases/incremental/changing_modules.yaml.world.2.expect b/pkg/front_end/testcases/incremental/changing_modules.yaml.world.2.expect
index 5e9ae23..e9555cc 100644
--- a/pkg/front_end/testcases/incremental/changing_modules.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules.yaml.world.2.expect
@@ -20,7 +20,7 @@
 
   import "package:example/b.dart";
 
-  static field dart.core::bool* foo1 = true;
+  static field dart.core::bool foo1 = true;
   static method foo() → dynamic {
     dart.core::print("Hello from foo");
     b::b();
diff --git a/pkg/front_end/testcases/incremental/changing_modules.yaml.world.3.expect b/pkg/front_end/testcases/incremental/changing_modules.yaml.world.3.expect
index 6fe58fb..691384d 100644
--- a/pkg/front_end/testcases/incremental/changing_modules.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules.yaml.world.3.expect
@@ -1,7 +1,7 @@
 main = main::main;
 library from "package:example/b.dart" as b {
 
-  static field dart.core::bool* example011 = true;
+  static field dart.core::bool example011 = true;
   static method b() → dynamic {
     dart.core::print("Hello from v0.1.1");
   }
@@ -24,7 +24,7 @@
   import "package:foo/bar.dart";
   import "package:foo/baz.dart";
 
-  static field dart.core::bool* foo2 = true;
+  static field dart.core::bool foo2 = true;
   static method foo() → dynamic {
     dart.core::print("Hello from foo 2");
     bar::bar();
diff --git a/pkg/front_end/testcases/incremental/changing_modules_10.yaml b/pkg/front_end/testcases/incremental/changing_modules_10.yaml
index e81be38..5d47893 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_10.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_10.yaml
@@ -10,13 +10,11 @@
 modules:
   module:
     module/a.dart: |
-      // @dart=2.9
       import 'package:module/b.dart';
 
       class A extends A2<B> { }
       class A2<T> { }
     module/b.dart: |
-      // @dart=2.9
       class B { }
     module/.dart_tool/package_config.json: |
       {
@@ -33,7 +31,6 @@
     fromComponent: true
     sources:
       main.dart: |
-        // @dart=2.9
         import 'package:module/a.dart';
         class Foo extends A {}
       .dart_tool/package_config.json: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_10.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_10.yaml.world.1.expect
index 8f6e15e..a4aa8e8 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_10.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_10.yaml.world.1.expect
@@ -4,7 +4,7 @@
   import "package:module/a.dart";
 
   class Foo extends a::A {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super a::A::•()
       ;
   }
@@ -13,42 +13,22 @@
 
   import "package:module/b.dart";
 
-  class A extends a::A2<b::B*> {
-    synthetic constructor •() → a::A*
+  class A extends a::A2<b::B> {
+    synthetic constructor •() → a::A
       : super a::A2::•()
       ;
   }
-  class A2<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::A2<a::A2::T*>*
+  class A2<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::A2<a::A2::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "package:module/b.dart" as b {
 
   class B extends dart.core::Object {
-    synthetic constructor •() → b::B*
+    synthetic constructor •() → b::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_10.yaml.world.2.expect b/pkg/front_end/testcases/incremental/changing_modules_10.yaml.world.2.expect
index 8f6e15e..a4aa8e8 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_10.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_10.yaml.world.2.expect
@@ -4,7 +4,7 @@
   import "package:module/a.dart";
 
   class Foo extends a::A {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super a::A::•()
       ;
   }
@@ -13,42 +13,22 @@
 
   import "package:module/b.dart";
 
-  class A extends a::A2<b::B*> {
-    synthetic constructor •() → a::A*
+  class A extends a::A2<b::B> {
+    synthetic constructor •() → a::A
       : super a::A2::•()
       ;
   }
-  class A2<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::A2<a::A2::T*>*
+  class A2<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::A2<a::A2::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "package:module/b.dart" as b {
 
   class B extends dart.core::Object {
-    synthetic constructor •() → b::B*
+    synthetic constructor •() → b::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_11.yaml b/pkg/front_end/testcases/incremental/changing_modules_11.yaml
index e433d98..ec018d6 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_11.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_11.yaml
@@ -10,13 +10,11 @@
 modules:
   module:
     module/a.dart: |
-      // @dart=2.9
       import 'package:module/b.dart';
 
       class A implements A2<B> { }
       class A2<T> { }
     module/b.dart: |
-      // @dart=2.9
       class B { }
     module/.dart_tool/package_config.json: |
       {
@@ -33,7 +31,6 @@
     fromComponent: true
     sources:
       main.dart: |
-        // @dart=2.9
         import 'package:module/a.dart';
         class Foo extends A {}
       .dart_tool/package_config.json: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_11.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_11.yaml.world.1.expect
index dc93385..e94c8ee 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_11.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_11.yaml.world.1.expect
@@ -4,7 +4,7 @@
   import "package:module/a.dart";
 
   class Foo extends a::A {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super a::A::•()
       ;
   }
@@ -13,52 +13,22 @@
 
   import "package:module/b.dart";
 
-  class A extends dart.core::Object implements a::A2<b::B*> {
-    synthetic constructor •() → a::A*
+  class A extends dart.core::Object implements a::A2<b::B> {
+    synthetic constructor •() → a::A
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class A2<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::A2<a::A2::T*>*
+  class A2<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::A2<a::A2::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "package:module/b.dart" as b {
 
   class B extends dart.core::Object {
-    synthetic constructor •() → b::B*
+    synthetic constructor •() → b::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_11.yaml.world.2.expect b/pkg/front_end/testcases/incremental/changing_modules_11.yaml.world.2.expect
index dc93385..e94c8ee 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_11.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_11.yaml.world.2.expect
@@ -4,7 +4,7 @@
   import "package:module/a.dart";
 
   class Foo extends a::A {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super a::A::•()
       ;
   }
@@ -13,52 +13,22 @@
 
   import "package:module/b.dart";
 
-  class A extends dart.core::Object implements a::A2<b::B*> {
-    synthetic constructor •() → a::A*
+  class A extends dart.core::Object implements a::A2<b::B> {
+    synthetic constructor •() → a::A
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class A2<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::A2<a::A2::T*>*
+  class A2<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::A2<a::A2::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "package:module/b.dart" as b {
 
   class B extends dart.core::Object {
-    synthetic constructor •() → b::B*
+    synthetic constructor •() → b::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_12.yaml b/pkg/front_end/testcases/incremental/changing_modules_12.yaml
index 082cc0a..ce698ca 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_12.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_12.yaml
@@ -9,19 +9,15 @@
 modules:
   module:
     module/a.dart: |
-      // @dart=2.9
       import 'package:module/b.dart';
       class A { }
     module/b.dart: |
-      // @dart=2.9
       export 'package:module/a.dart';
       class B { }
     module/c.dart: |
-      // @dart=2.9
       export 'package:module/d.dart';
       class C { }
     module/d.dart: |
-      // @dart=2.9
       import 'package:module/c.dart';
       class D { }
     module/.dart_tool/package_config.json: |
@@ -39,7 +35,6 @@
     fromComponent: true
     sources:
       main.dart: |
-        // @dart=2.9
         class Foo {}
       .dart_tool/package_config.json: |
         {
diff --git a/pkg/front_end/testcases/incremental/changing_modules_12.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_12.yaml.world.1.expect
index 5bf5f6e..96e3132 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_12.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_12.yaml.world.1.expect
@@ -2,18 +2,8 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_13.yaml b/pkg/front_end/testcases/incremental/changing_modules_13.yaml
index d92b7ca..050087a 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_13.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_13.yaml
@@ -9,7 +9,6 @@
 modules:
   module:
     module/a.dart: |
-      // @dart=2.9
       class A { }
       class B { }
       class C { }
@@ -29,7 +28,6 @@
     fromComponent: true
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:module/a.dart";
         class ABC = AB with C;
       .dart_tool/package_config.json: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_13.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_13.yaml.world.1.expect
index 136a4b6..dc9475d 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_13.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_13.yaml.world.1.expect
@@ -4,7 +4,7 @@
   import "package:module/a.dart";
 
   class ABC = a::AB with a::C {
-    synthetic constructor •() → main::ABC*
+    synthetic constructor •() → main::ABC
       : super a::AB::•()
       ;
   }
@@ -12,52 +12,22 @@
 library from "package:module/a.dart" as a {
 
   class A extends dart.core::Object {
-    synthetic constructor •() → a::A*
+    synthetic constructor •() → a::A
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class B extends dart.core::Object {
-    synthetic constructor •() → a::B*
+    synthetic constructor •() → a::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class C extends dart.core::Object {
-    synthetic constructor •() → a::C*
+    synthetic constructor •() → a::C
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class AB = a::A with a::B {
-    synthetic constructor •() → a::AB*
+    synthetic constructor •() → a::AB
       : super a::A::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_14.yaml b/pkg/front_end/testcases/incremental/changing_modules_14.yaml
index 77d4395..d3973fe 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_14.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_14.yaml
@@ -12,7 +12,6 @@
 modules:
   moduleC:
     moduleC/lib.dart: |
-      // @dart=2.9
       const constC = ['value_c'];
     moduleC/.dart_tool/package_config.json: |
       {
@@ -26,7 +25,6 @@
       }
   moduleB:
     moduleB/lib.dart: |
-      // @dart=2.9
       import "package:moduleC/lib.dart";
       const constB = ['value_b', constC];
     moduleB/.dart_tool/package_config.json: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_14.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_14.yaml.world.1.expect
index ac9e649..fc4a047 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_14.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_14.yaml.world.1.expect
@@ -15,11 +15,11 @@
 
   import "package:moduleC/lib.dart";
 
-  static const field dart.core::List<dart.core::Object*>* constB = const <dart.core::Object*>["value_b", lib3::constC];
+  static const field dart.core::List<dart.core::Object> constB = const <dart.core::Object>["value_b", lib3::constC];
 }
 library from "package:moduleC/lib.dart" as lib3 {
 
-  static const field dart.core::List<dart.core::String*>* constC = const <dart.core::String*>["value_c"];
+  static const field dart.core::List<dart.core::String> constC = const <dart.core::String>["value_c"];
 }
 constants  {
   #C1 = 42.0
diff --git a/pkg/front_end/testcases/incremental/changing_modules_15.yaml b/pkg/front_end/testcases/incremental/changing_modules_15.yaml
index f1c4102..ee0493c 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_15.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_15.yaml
@@ -12,7 +12,6 @@
 modules:
   moduleC:
     moduleC/lib.dart: |
-      // @dart=2.9
       const constC = true;
     moduleC/.dart_tool/package_config.json: |
       {
@@ -26,7 +25,6 @@
       }
   moduleB:
     moduleB/lib.dart: |
-      // @dart=2.9
       import "package:moduleC/lib.dart";
       const constB = false || constC;
     moduleB/.dart_tool/package_config.json: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_15.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_15.yaml.world.1.expect
index c7ef4da..4c400fa 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_15.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_15.yaml.world.1.expect
@@ -9,11 +9,11 @@
 
   import "package:moduleC/lib.dart";
 
-  static const field dart.core::bool* constB = false || lib2::constC;
+  static const field dart.core::bool constB = false || lib2::constC;
 }
 library from "package:moduleC/lib.dart" as lib2 {
 
-  static const field dart.core::bool* constC = true;
+  static const field dart.core::bool constC = true;
 }
 constants  {
   #C1 = true
diff --git a/pkg/front_end/testcases/incremental/changing_modules_2.yaml b/pkg/front_end/testcases/incremental/changing_modules_2.yaml
index a73afd8..51655eb 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_2.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_2.yaml
@@ -9,7 +9,6 @@
 modules:
   example_1:
     example_1/a.dart: |
-      // @dart=2.9
       a() {}
       var example = true;
     example_1/.dart_tool/package_config.json: |
@@ -24,7 +23,6 @@
       }
   example_2:
     example_2/a.dart: |
-      // @dart=2.9
       a() {}
       var example = true;
     example_2/.dart_tool/package_config.json: |
@@ -39,7 +37,6 @@
       }
   foo:
     foo/foo.dart: |
-      // @dart=2.9
       export "package:example/a.dart";
       var foo = true;
     foo/.dart_tool/package_config.json: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_2.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_2.yaml.world.1.expect
index 41e48cc..6375850 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_2.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_2.yaml.world.1.expect
@@ -1,7 +1,7 @@
 main = main::main;
 library from "package:example/a.dart" as a {
 
-  static field dart.core::bool* example = true;
+  static field dart.core::bool example = true;
   static method a() → dynamic {}
 }
 library from "package:foo/foo.dart" as foo {
@@ -11,7 +11,7 @@
 
   export "package:example/a.dart";
 
-  static field dart.core::bool* foo = true;
+  static field dart.core::bool foo = true;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
diff --git a/pkg/front_end/testcases/incremental/changing_modules_2.yaml.world.2.expect b/pkg/front_end/testcases/incremental/changing_modules_2.yaml.world.2.expect
index 41e48cc..6375850 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_2.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_2.yaml.world.2.expect
@@ -1,7 +1,7 @@
 main = main::main;
 library from "package:example/a.dart" as a {
 
-  static field dart.core::bool* example = true;
+  static field dart.core::bool example = true;
   static method a() → dynamic {}
 }
 library from "package:foo/foo.dart" as foo {
@@ -11,7 +11,7 @@
 
   export "package:example/a.dart";
 
-  static field dart.core::bool* foo = true;
+  static field dart.core::bool foo = true;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
diff --git a/pkg/front_end/testcases/incremental/changing_modules_3.yaml b/pkg/front_end/testcases/incremental/changing_modules_3.yaml
index b8e864b..53ccb82 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_3.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_3.yaml
@@ -9,7 +9,6 @@
 modules:
   foo:
     foo/foo.dart: |
-      // @dart=2.9
       var foo = true;
     foo/.dart_tool/package_config.json: |
       {
@@ -23,7 +22,6 @@
       }
   foo2:
     foo2/foo.dart: |
-      // @dart=2.9
       var foo2 = true;
     foo2/.dart_tool/package_config.json: |
       {
@@ -41,7 +39,6 @@
     simulateTransformer: true
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:foo/foo.dart";
         main() {
           print(foo);
@@ -74,7 +71,6 @@
     simulateTransformer: true
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:foo/foo.dart";
         main() {
           print(foo2);
diff --git a/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.1.expect
index d25031d1..bb6bb75 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.1.expect
@@ -1,7 +1,7 @@
 main = main::main;
 library from "package:foo/foo.dart" as foo {
 
-  static field dart.core::bool* foo = true;
+  static field dart.core::bool foo = true;
   final field dynamic unique_SimulateTransformer;
 }
 library from "org-dartlang-test:///main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.2.expect b/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.2.expect
index 56379e6..992affc 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.2.expect
@@ -1,7 +1,7 @@
 main = main::main;
 library from "package:foo/foo.dart" as foo {
 
-  static field dart.core::bool* foo2 = true;
+  static field dart.core::bool foo2 = true;
   final field dynamic unique_SimulateTransformer;
 }
 library from "org-dartlang-test:///main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental/changing_modules_4.yaml b/pkg/front_end/testcases/incremental/changing_modules_4.yaml
index 3e155a2..896fcfc 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_4.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_4.yaml
@@ -10,7 +10,6 @@
 modules:
   moduleB:
     moduleB/b.dart: |
-      // @dart=2.9
       import 'package:moduleC/c.dart';
       export 'package:moduleC/c.dart' show baz;
 
@@ -39,7 +38,6 @@
       }
   moduleC:
     moduleC/c.dart: |
-      // @dart=2.9
       import 'package:moduleD/d.dart';
 
       String baz = "42";
@@ -64,7 +62,6 @@
       }
   moduleD:
     moduleD/d.dart: |
-      // @dart=2.9
       String baz3 = "baz3";
     moduleD/.dart_tool/package_config.json: |
       {
@@ -81,7 +78,6 @@
     fromComponent: true
     sources:
       a.dart: |
-        // @dart=2.9
         import "package:moduleB/b.dart";
 
         String foo = baz;
diff --git a/pkg/front_end/testcases/incremental/changing_modules_4.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_4.yaml.world.1.expect
index 24ffa21..46e3fd2 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_4.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_4.yaml.world.1.expect
@@ -3,8 +3,8 @@
 
   import "package:moduleB/b.dart";
 
-  static field dart.core::String* foo = c::baz;
-  static field dart.core::int* x = b::mya2.{b::A2::bar}{dart.core::int*};
+  static field dart.core::String foo = c::baz;
+  static field dart.core::int x = b::mya2.{b::A2::bar}{dart.core::int};
 }
 library from "package:moduleB/b.dart" as b {
 additionalExports = (c::baz,
@@ -14,37 +14,27 @@
   export "package:moduleC/c.dart" show baz;
 
   class A2 extends c::A3 {
-    field dart.core::int* bar = 42;
-    synthetic constructor •() → b::A2*
+    field dart.core::int bar = 42;
+    synthetic constructor •() → b::A2
       : super c::A3::•()
       ;
   }
-  static field b::A2* mya2 = new b::A2::•();
+  static field b::A2 mya2 = new b::A2::•();
 }
 library from "package:moduleC/c.dart" as c {
 
   import "package:moduleD/d.dart";
 
   class A3 extends dart.core::Object {
-    field dart.core::int* foo = 42;
-    synthetic constructor •() → c::A3*
+    field dart.core::int foo = 42;
+    synthetic constructor •() → c::A3
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static field dart.core::String* baz = "42";
-  static field dart.core::String* baz2 = d::baz3;
+  static field dart.core::String baz = "42";
+  static field dart.core::String baz2 = d::baz3;
 }
 library from "package:moduleD/d.dart" as d {
 
-  static field dart.core::String* baz3 = "baz3";
+  static field dart.core::String baz3 = "baz3";
 }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_5.yaml b/pkg/front_end/testcases/incremental/changing_modules_5.yaml
index 4cd4a5f..9907b09 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_5.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_5.yaml
@@ -10,7 +10,6 @@
 modules:
   moduleB:
     moduleB/b.dart: |
-      // @dart=2.9
       import 'package:moduleC/c.dart';
 
       var bVar = 42;
@@ -40,7 +39,6 @@
       }
   moduleC:
     moduleC/c.dart: |
-      // @dart=2.9
       import 'package:moduleD/d.dart';
 
       String baz = "42";
@@ -65,7 +63,6 @@
       }
   moduleD:
     moduleD/d.dart: |
-      // @dart=2.9
       String baz3 = "baz3";
     moduleD/.dart_tool/package_config.json: |
       {
@@ -82,7 +79,6 @@
     fromComponent: true
     sources:
       a.dart: |
-        // @dart=2.9
         import "package:moduleB/b.dart";
 
         var foo = bVar;
diff --git a/pkg/front_end/testcases/incremental/changing_modules_5.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_5.yaml.world.1.expect
index c70a885..ff83593 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_5.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_5.yaml.world.1.expect
@@ -3,47 +3,37 @@
 
   import "package:moduleB/b.dart";
 
-  static field dart.core::int* foo = b::bVar;
-  static field dart.core::String* foo2 = b::bVarFromC;
+  static field dart.core::int foo = b::bVar;
+  static field dart.core::String foo2 = b::bVarFromC;
 }
 library from "package:moduleB/b.dart" as b {
 
   import "package:moduleC/c.dart";
 
   class A2 extends c::A3 {
-    field dart.core::int* bar = 42;
-    synthetic constructor •() → b::A2*
+    field dart.core::int bar = 42;
+    synthetic constructor •() → b::A2
       : super c::A3::•()
       ;
   }
-  static field dart.core::int* bVar = 42;
-  static field dart.core::String* bVarFromC = c::baz2;
-  static field b::A2* mya2 = new b::A2::•();
+  static field dart.core::int bVar = 42;
+  static field dart.core::String bVarFromC = c::baz2;
+  static field b::A2 mya2 = new b::A2::•();
 }
 library from "package:moduleC/c.dart" as c {
 
   import "package:moduleD/d.dart";
 
   class A3 extends dart.core::Object {
-    field dart.core::int* foo = 42;
-    synthetic constructor •() → c::A3*
+    field dart.core::int foo = 42;
+    synthetic constructor •() → c::A3
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static field dart.core::String* baz = "42";
-  static field dart.core::String* baz2 = d::baz3;
+  static field dart.core::String baz = "42";
+  static field dart.core::String baz2 = d::baz3;
 }
 library from "package:moduleD/d.dart" as d {
 
-  static field dart.core::String* baz3 = "baz3";
+  static field dart.core::String baz3 = "baz3";
 }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_6.yaml b/pkg/front_end/testcases/incremental/changing_modules_6.yaml
index ee9094b..108d3d7 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_6.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_6.yaml
@@ -10,7 +10,6 @@
 modules:
   moduleB:
     moduleB/b.dart: |
-      // @dart=2.9
       import 'package:moduleC/c.dart';
 
       var bVar = 42;
@@ -40,7 +39,6 @@
       }
   moduleC:
     moduleC/c.dart: |
-      // @dart=2.9
       import 'package:moduleD/d.dart';
 
       String baz = "42";
@@ -65,7 +63,6 @@
       }
   moduleD:
     moduleD/d.dart: |
-      // @dart=2.9
       String baz3 = "baz3";
     moduleD/.dart_tool/package_config.json: |
       {
@@ -82,7 +79,6 @@
     fromComponent: true
     sources:
       a.dart: |
-        // @dart=2.9
         import "package:moduleB/b.dart";
 
         var foo = bVar;
diff --git a/pkg/front_end/testcases/incremental/changing_modules_6.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_6.yaml.world.1.expect
index 264ec86..35d0600 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_6.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_6.yaml.world.1.expect
@@ -4,53 +4,43 @@
   import "package:moduleB/b.dart";
 
   class A1 extends b::A2 {
-    synthetic constructor •() → a::A1*
+    synthetic constructor •() → a::A1
       : super b::A2::•()
       ;
-    method fooMethod() → dart.core::String*
+    method fooMethod() → dart.core::String
       return "42!";
   }
-  static field dart.core::int* foo = b::bVar;
-  static field dart.core::String* foo2 = b::bVarFromC;
+  static field dart.core::int foo = b::bVar;
+  static field dart.core::String foo2 = b::bVarFromC;
 }
 library from "package:moduleB/b.dart" as b {
 
   import "package:moduleC/c.dart";
 
   class A2 extends c::A3 {
-    field dart.core::int* bar = 42;
-    synthetic constructor •() → b::A2*
+    field dart.core::int bar = 42;
+    synthetic constructor •() → b::A2
       : super c::A3::•()
       ;
   }
-  static field dart.core::int* bVar = 42;
-  static field dart.core::String* bVarFromC = c::baz2;
-  static field b::A2* mya2 = new b::A2::•();
+  static field dart.core::int bVar = 42;
+  static field dart.core::String bVarFromC = c::baz2;
+  static field b::A2 mya2 = new b::A2::•();
 }
 library from "package:moduleC/c.dart" as c {
 
   import "package:moduleD/d.dart";
 
   class A3 extends dart.core::Object {
-    field dart.core::int* foo = 42;
-    synthetic constructor •() → c::A3*
+    field dart.core::int foo = 42;
+    synthetic constructor •() → c::A3
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static field dart.core::String* baz = "42";
-  static field dart.core::String* baz2 = d::baz3;
+  static field dart.core::String baz = "42";
+  static field dart.core::String baz2 = d::baz3;
 }
 library from "package:moduleD/d.dart" as d {
 
-  static field dart.core::String* baz3 = "baz3";
+  static field dart.core::String baz3 = "baz3";
 }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_7.yaml b/pkg/front_end/testcases/incremental/changing_modules_7.yaml
index 28632d3..2fbcb0b 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_7.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_7.yaml
@@ -10,14 +10,12 @@
 modules:
   module:
     module/lib1.dart: |
-      // @dart=2.9
       import 'lib3.dart';
 
       class Class1 {
-        Class3a get c3a {}
+        Class3a get c3a => throw '';
       }
     module/lib2.dart: |
-      // @dart=2.9
       import 'lib4.dart';
 
       class Class2 {
@@ -27,16 +25,14 @@
         }
       }
     module/lib3.dart: |
-      // @dart=2.9
       class Class3a {
-        Class3b get c3b {}
+        Class3b get c3b => throw '';
       }
 
       class Class3b {
-        String str() {}
+        String str() => throw '';
       }
     module/lib4.dart: |
-      // @dart=2.9
       class Class4 {}
     module/.dart_tool/package_config.json: |
       {
@@ -53,7 +49,6 @@
     fromComponent: true
     sources:
       compileme.dart: |
-        // @dart=2.9
         import 'package:module/lib1.dart';
         import 'package:module/lib2.dart';
 
@@ -106,7 +101,6 @@
     skipOutlineBodyCheck: true
     sources:
       compileme.dart: |
-        // @dart=2.9
         import 'package:module/lib1.dart';
         import 'package:module/lib2.dart';
 
diff --git a/pkg/front_end/testcases/incremental/changing_modules_7.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_7.yaml.world.1.expect
index a3215f8d..61a40e9 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_7.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_7.yaml.world.1.expect
@@ -5,27 +5,17 @@
   import "package:module/lib2.dart";
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → com::Foo*
+    synthetic constructor •() → com::Foo
       : super dart.core::Object::•()
       ;
-    method class1() → lib1::Class1* {
-      lib1::Class1* class1 = new lib1::Class1::•();
-      class1.{lib1::Class1::c3a}{lib3::Class3a*}.{lib3::Class3a::c3b}{lib3::Class3b*}.{lib3::Class3b::str}(){() →* dart.core::String*};
+    method class1() → lib1::Class1 {
+      lib1::Class1 class1 = new lib1::Class1::•();
+      class1.{lib1::Class1::c3a}{lib3::Class3a}.{lib3::Class3a::c3b}{lib3::Class3b}.{lib3::Class3b::str}(){() → dart.core::String};
       return class1;
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic {
-    lib2::Class2* class2 = new lib2::Class2::•();
+    lib2::Class2 class2 = new lib2::Class2::•();
     dart.core::print(class2);
   }
 }
@@ -34,20 +24,11 @@
   import "package:module/lib3.dart";
 
   class Class1 extends dart.core::Object {
-    synthetic constructor •() → lib1::Class1*
+    synthetic constructor •() → lib1::Class1
       : super dart.core::Object::•()
       ;
-    get c3a() → lib3::Class3a* {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    get c3a() → lib3::Class3a
+      return throw "";
   }
 }
 library from "package:module/lib2.dart" as lib2 {
@@ -55,75 +36,37 @@
   import "package:module/lib4.dart";
 
   class Class2 extends dart.core::Object {
-    synthetic constructor •() → lib2::Class2*
+    synthetic constructor •() → lib2::Class2
       : super dart.core::Object::•()
       ;
     method cl4() → void {
-      lib4::Class4* class4 = new lib4::Class4::•();
+      lib4::Class4 class4 = new lib4::Class4::•();
       dart.core::print(class4);
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "package:module/lib3.dart" as lib3 {
 
   class Class3a extends dart.core::Object {
-    synthetic constructor •() → lib3::Class3a*
+    synthetic constructor •() → lib3::Class3a
       : super dart.core::Object::•()
       ;
-    get c3b() → lib3::Class3b* {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    get c3b() → lib3::Class3b
+      return throw "";
   }
   class Class3b extends dart.core::Object {
-    synthetic constructor •() → lib3::Class3b*
+    synthetic constructor •() → lib3::Class3b
       : super dart.core::Object::•()
       ;
-    method str() → dart.core::String* {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    method str() → dart.core::String
+      return throw "";
   }
 }
 library from "package:module/lib4.dart" as lib4 {
 
   class Class4 extends dart.core::Object {
-    synthetic constructor •() → lib4::Class4*
+    synthetic constructor •() → lib4::Class4
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_7.yaml.world.2.expect b/pkg/front_end/testcases/incremental/changing_modules_7.yaml.world.2.expect
index c677c51..df138d5 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_7.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_7.yaml.world.2.expect
@@ -5,20 +5,10 @@
   import "package:module/lib2.dart";
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → com::Foo*
+    synthetic constructor •() → com::Foo
       ;
-    method class1() → lib1::Class1*
+    method class1() → lib1::Class1
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic
     ;
@@ -28,20 +18,11 @@
   import "package:module/lib3.dart";
 
   class Class1 extends dart.core::Object {
-    synthetic constructor •() → lib1::Class1*
+    synthetic constructor •() → lib1::Class1
       : super dart.core::Object::•()
       ;
-    get c3a() → lib3::Class3a* {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    get c3a() → lib3::Class3a
+      return throw "";
   }
 }
 library from "package:module/lib2.dart" as lib2 {
@@ -49,75 +30,37 @@
   import "package:module/lib4.dart";
 
   class Class2 extends dart.core::Object {
-    synthetic constructor •() → lib2::Class2*
+    synthetic constructor •() → lib2::Class2
       : super dart.core::Object::•()
       ;
     method cl4() → void {
-      lib4::Class4* class4 = new lib4::Class4::•();
+      lib4::Class4 class4 = new lib4::Class4::•();
       dart.core::print(class4);
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "package:module/lib3.dart" as lib3 {
 
   class Class3a extends dart.core::Object {
-    synthetic constructor •() → lib3::Class3a*
+    synthetic constructor •() → lib3::Class3a
       : super dart.core::Object::•()
       ;
-    get c3b() → lib3::Class3b* {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    get c3b() → lib3::Class3b
+      return throw "";
   }
   class Class3b extends dart.core::Object {
-    synthetic constructor •() → lib3::Class3b*
+    synthetic constructor •() → lib3::Class3b
       : super dart.core::Object::•()
       ;
-    method str() → dart.core::String* {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    method str() → dart.core::String
+      return throw "";
   }
 }
 library from "package:module/lib4.dart" as lib4 {
 
   class Class4 extends dart.core::Object {
-    synthetic constructor •() → lib4::Class4*
+    synthetic constructor •() → lib4::Class4
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_8.yaml b/pkg/front_end/testcases/incremental/changing_modules_8.yaml
index 118080c..281ee16 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_8.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_8.yaml
@@ -10,14 +10,12 @@
 modules:
   module:
     module/lib1.dart: |
-      // @dart=2.9
       import 'lib2.dart';
 
       abstract class XSet {
         factory XSet.identity() = XLinkedHashSet.identity;
       }
     module/lib2.dart: |
-      // @dart=2.9
       import 'lib1.dart';
       import 'lib3.dart';
 
@@ -25,7 +23,6 @@
         factory XLinkedHashSet.identity() = XIdentityHashSet;
       }
     module/lib3.dart: |
-      // @dart=2.9
       import 'lib2.dart';
 
       class XIdentityHashSet implements XLinkedHashSet {
@@ -46,7 +43,6 @@
     fromComponent: true
     sources:
       compileme.dart: |
-        // @dart=2.9
         import 'package:module/lib1.dart';
 
         main() {
diff --git a/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect
index f8cb2d3..abc21f4 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect
@@ -4,7 +4,7 @@
   import "package:module/lib1.dart";
 
   static method main() → dynamic {
-    lib1::XSet* history = new lib3::XIdentityHashSet::•();
+    lib1::XSet history = new lib3::XIdentityHashSet::•();
   }
 }
 library from "package:module/lib1.dart" as lib1 {
@@ -12,19 +12,9 @@
   import "package:module/lib2.dart";
 
   abstract class XSet extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[#C1];
-    static factory identity() → lib1::XSet*
+    static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+    static factory identity() → lib1::XSet
       return lib2::XLinkedHashSet::identity();
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "package:module/lib2.dart" as lib2 {
@@ -33,19 +23,9 @@
   import "package:module/lib3.dart";
 
   class XLinkedHashSet extends dart.core::Object implements lib1::XSet {
-    static final field dynamic _redirecting# = <dynamic>[#C2];
-    static factory identity() → lib2::XLinkedHashSet*
+    static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+    static factory identity() → lib2::XLinkedHashSet
       return new lib3::XIdentityHashSet::•();
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "package:module/lib3.dart" as lib3 {
@@ -53,19 +33,9 @@
   import "package:module/lib2.dart";
 
   class XIdentityHashSet extends dart.core::Object implements lib2::XLinkedHashSet {
-    constructor •() → lib3::XIdentityHashSet*
+    constructor •() → lib3::XIdentityHashSet
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/changing_modules_9.yaml b/pkg/front_end/testcases/incremental/changing_modules_9.yaml
index e267a81..23155af 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_9.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_9.yaml
@@ -10,7 +10,6 @@
 modules:
   moduleA:
     moduleA/a.dart: |
-      // @dart=2.9
       export 'package:moduleB/b.dart';
 
       class A { }
@@ -30,7 +29,6 @@
       }
   moduleB:
     moduleB/b.dart: |
-      // @dart=2.9
       class B {
         int foo = 42;
       }
@@ -49,7 +47,6 @@
     fromComponent: true
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:moduleA/a.dart";
 
         main() {
diff --git a/pkg/front_end/testcases/incremental/changing_modules_9.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_9.yaml.world.1.expect
index 8b5f7a9..3ebe5d3 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_9.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_9.yaml.world.1.expect
@@ -4,7 +4,7 @@
   import "package:moduleA/a.dart";
 
   static method main() → dynamic {
-    a::A* a = new a::A::•();
+    a::A a = new a::A::•();
   }
 }
 library from "package:moduleA/a.dart" as a {
@@ -13,37 +13,17 @@
   export "package:moduleB/b.dart";
 
   class A extends dart.core::Object {
-    synthetic constructor •() → a::A*
+    synthetic constructor •() → a::A
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "package:moduleB/b.dart" as b {
 
   class B extends dart.core::Object {
-    field dart.core::int* foo = 42;
-    synthetic constructor •() → b::B*
+    field dart.core::int foo = 42;
+    synthetic constructor •() → b::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_9.yaml.world.2.expect b/pkg/front_end/testcases/incremental/changing_modules_9.yaml.world.2.expect
index 8b5f7a9..3ebe5d3 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_9.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_9.yaml.world.2.expect
@@ -4,7 +4,7 @@
   import "package:moduleA/a.dart";
 
   static method main() → dynamic {
-    a::A* a = new a::A::•();
+    a::A a = new a::A::•();
   }
 }
 library from "package:moduleA/a.dart" as a {
@@ -13,37 +13,17 @@
   export "package:moduleB/b.dart";
 
   class A extends dart.core::Object {
-    synthetic constructor •() → a::A*
+    synthetic constructor •() → a::A
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "package:moduleB/b.dart" as b {
 
   class B extends dart.core::Object {
-    field dart.core::int* foo = 42;
-    synthetic constructor •() → b::B*
+    field dart.core::int foo = 42;
+    synthetic constructor •() → b::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_part.yaml b/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_part.yaml
index 57c1a4c..e8a3d25 100644
--- a/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_part.yaml
+++ b/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_part.yaml
@@ -11,17 +11,14 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
         main() { b(); }
       b.dart: |
-        // @dart=2.9
         part 'c.dart';
         b() {
           c();
         }
       c.dart: |
-        // @dart=2.9
         part of 'b.dart';
         c() {}
     expectedLibraryCount: 2
@@ -32,7 +29,6 @@
     expectInitializeFromDill: false
     sources:
       b.dart: |
-        // @dart=2.9
         b() {}
     expectedLibraryCount: 2
     uriToSourcesDoesntInclude:
diff --git a/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_unreferenced_libraries.yaml b/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_unreferenced_libraries.yaml
index ba49b68..7d5d86d 100644
--- a/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_unreferenced_libraries.yaml
+++ b/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_unreferenced_libraries.yaml
@@ -11,17 +11,14 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
         main() { b(); }
       b.dart: |
-        // @dart=2.9
         part 'c.dart';
         b() {
           c();
         }
       c.dart: |
-        // @dart=2.9
         part of 'b.dart';
         c() {}
     expectedLibraryCount: 2
@@ -32,7 +29,6 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
-        // @dart=2.9
         main() {}
     expectedLibraryCount: 1
     uriToSourcesDoesntInclude:
@@ -45,7 +41,6 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
-        // @dart=2.9
         main() {}
     expectedLibraryCount: 1
     uriToSourcesDoesntInclude:
diff --git a/pkg/front_end/testcases/incremental/cleans_up_uritosource_unreferenced_package_library.yaml b/pkg/front_end/testcases/incremental/cleans_up_uritosource_unreferenced_package_library.yaml
index ea47771..98612ff 100644
--- a/pkg/front_end/testcases/incremental/cleans_up_uritosource_unreferenced_package_library.yaml
+++ b/pkg/front_end/testcases/incremental/cleans_up_uritosource_unreferenced_package_library.yaml
@@ -22,11 +22,9 @@
           ]
         }
       main.dart: |
-        // @dart=2.9
         import "package:example/b.dart";
         main() { b(); }
       pkg/example/b.dart: |
-        // @dart=2.9
         b() {}
     expectedLibraryCount: 2
   - entry: main.dart
@@ -42,7 +40,6 @@
           "packages": []
         }
       main.dart: |
-        // @dart=2.9
         main() {}
     expectedLibraryCount: 1
     uriToSourcesDoesntInclude:
diff --git a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml
index fe79e16..ae08c58 100644
--- a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml
+++ b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml
@@ -11,19 +11,16 @@
     errors: true
     sources:
       main.dart: |
-        // @dart=2.9
         export "lib1.dart" show x;
         export "lib2.dart" show x;
         main() {
           print("exports");
         }
       lib1.dart: |
-        // @dart=2.9
         x() {
           print("lib1.x!");
         }
       lib2.dart: |
-        // @dart=2.9
         x() {
           print("lib2.x!");
         }
@@ -35,19 +32,16 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         export "lib1.dart" show x;
         export "lib2.dart" show x;
         main() {
           print("exports!");
         }
       lib1.dart: |
-        // @dart=2.9
         x() {
           print("lib1.x!");
         }
       lib2.dart: |
-        // @dart=2.9
         x() {
           print("lib2.x!");
         }
diff --git a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect
index d263cde3..90f6f3b 100644
--- a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect
@@ -15,7 +15,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// 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;
 // ^
 //
@@ -23,7 +23,7 @@
   export "org-dartlang-test:///lib1.dart" show x;
   export "org-dartlang-test:///lib2.dart" show x;
 
-  static const field dynamic _exports# = #C1;
+  static const field dynamic _exports# = #C1 /*isLegacy*/;
   static method main() → dynamic {
     dart.core::print("exports");
   }
diff --git a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect
index f84cb36..6c9fb88 100644
--- a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect
@@ -15,7 +15,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// 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;
 // ^
 //
@@ -23,7 +23,7 @@
   export "org-dartlang-test:///lib1.dart" show x;
   export "org-dartlang-test:///lib2.dart" show x;
 
-  static const field dynamic _exports# = #C1;
+  static const field dynamic _exports# = #C1 /*isLegacy*/;
   static method main() → dynamic {
     dart.core::print("exports!");
   }
diff --git a/pkg/front_end/testcases/incremental/constant_set_literal.yaml b/pkg/front_end/testcases/incremental/constant_set_literal.yaml
index b58f969..d8ddd8d 100644
--- a/pkg/front_end/testcases/incremental/constant_set_literal.yaml
+++ b/pkg/front_end/testcases/incremental/constant_set_literal.yaml
@@ -9,7 +9,6 @@
   - entry: "main.dart"
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
 
         const Set<String> foo = {};
@@ -18,7 +17,6 @@
           print(bar);
         }
       lib.dart: |
-        // @dart=2.9
         const Set<String> bar = {"hello", "world"};
     expectedLibraryCount: 2
   - entry: "main.dart"
@@ -28,6 +26,5 @@
       - lib.dart
     sources:
       lib.dart: |
-        // @dart=2.9
         const Set<int> bar = {42};
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.1.expect b/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.1.expect
index c6642dc..047d357 100644
--- a/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.1.expect
@@ -1,13 +1,13 @@
 main = main::main;
 library from "org-dartlang-test:///lib.dart" as lib {
 
-  static const field dart.core::Set<dart.core::String*>* bar = #C3;
+  static const field dart.core::Set<dart.core::String> bar = #C3;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field dart.core::Set<dart.core::String*>* foo = #C4;
+  static const field dart.core::Set<dart.core::String> foo = #C4;
   static method main() → dynamic {
     dart.core::print(#C4);
     dart.core::print(#C3);
diff --git a/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.2.expect b/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.2.expect
index e7dc08e..2c2bcbd 100644
--- a/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/constant_set_literal.yaml.world.2.expect
@@ -1,13 +1,13 @@
 main = main::main;
 library from "org-dartlang-test:///lib.dart" as lib {
 
-  static const field dart.core::Set<dart.core::int*>* bar = #C2;
+  static const field dart.core::Set<dart.core::int> bar = #C2;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field dart.core::Set<dart.core::String*>* foo = #C3;
+  static const field dart.core::Set<dart.core::String> foo = #C3;
   static method main() → dynamic {
     dart.core::print(#C3);
     dart.core::print(#C2);
diff --git a/pkg/front_end/testcases/incremental/crash_01.yaml b/pkg/front_end/testcases/incremental/crash_01.yaml
index 9663d9a..d8c9c08 100644
--- a/pkg/front_end/testcases/incremental/crash_01.yaml
+++ b/pkg/front_end/testcases/incremental/crash_01.yaml
@@ -22,7 +22,6 @@
           ]
         }
       app/main.dart: |
-        // @dart=2.9
         import "package:flutter/src/cupertino/interface_level.dart";
       flutter/src/widgets/framework.dart: |
         abstract class Widget {}
diff --git a/pkg/front_end/testcases/incremental/crash_02.yaml b/pkg/front_end/testcases/incremental/crash_02.yaml
index 38115cb..7a10c94 100644
--- a/pkg/front_end/testcases/incremental/crash_02.yaml
+++ b/pkg/front_end/testcases/incremental/crash_02.yaml
@@ -22,7 +22,6 @@
           ]
         }
       app/main.dart: |
-        // @dart=2.9
         import "package:flutter/src/widgets/framework.dart";
       flutter/src/widgets/framework.dart: |
         import "package:flutter/src/widgets/widget_inspector.dart";
diff --git a/pkg/front_end/testcases/incremental/crash_03.yaml b/pkg/front_end/testcases/incremental/crash_03.yaml
index 7e1e066..4d1be72 100644
--- a/pkg/front_end/testcases/incremental/crash_03.yaml
+++ b/pkg/front_end/testcases/incremental/crash_03.yaml
@@ -22,7 +22,6 @@
           ]
         }
       app/main.dart: |
-        // @dart=2.9
         import "package:flutter/src/widgets/framework.dart";
       flutter/src/widgets/framework.dart: |
         abstract class Widget {}
diff --git a/pkg/front_end/testcases/incremental/crash_07.yaml b/pkg/front_end/testcases/incremental/crash_07.yaml
index cfb8245..ed141b7 100644
--- a/pkg/front_end/testcases/incremental/crash_07.yaml
+++ b/pkg/front_end/testcases/incremental/crash_07.yaml
@@ -10,12 +10,10 @@
     errors: true
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         import 'nonexistingfile.dart';
         class A implements B {}
       lib.dart: |
-        // @dart=2.9
         class B implements C<NonExistingClass> {}
         class C<E> {}
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/crash_07.yaml.world.1.expect b/pkg/front_end/testcases/incremental/crash_07.yaml.world.1.expect
index 299f150..e480482 100644
--- a/pkg/front_end/testcases/incremental/crash_07.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/crash_07.yaml.world.1.expect
@@ -3,40 +3,20 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:2:22: Error: Type 'NonExistingClass' not found.
+// org-dartlang-test:///lib.dart:1:22: Error: Type 'NonExistingClass' not found.
 // class B implements C<NonExistingClass> {}
 //                      ^^^^^^^^^^^^^^^^
 //
 
   class B extends dart.core::Object implements lib::C<invalid-type> {
-    synthetic constructor •() → lib::B*
+    synthetic constructor •() → lib::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class C<E extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → lib::C<lib::C::E*>*
+  class C<E extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → lib::C<lib::C::E%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -45,26 +25,16 @@
   import "org-dartlang-test:///nonexistingfile.dart";
 
   class A extends dart.core::Object implements lib::B {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///nonexistingfile.dart" as non {
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:8: Error: Error when reading 'org-dartlang-test:///nonexistingfile.dart': File org-dartlang-test:///nonexistingfile.dart does not exist.
+// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexistingfile.dart': File org-dartlang-test:///nonexistingfile.dart does not exist.
 // import 'nonexistingfile.dart';
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml b/pkg/front_end/testcases/incremental/crash_test_1.yaml
index 5a7785c..1b66228 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml
@@ -9,13 +9,11 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart";
         void main() {
           var c = new C.e4();
         }
       lib.dart: |
-        // @dart=2.9
         class C {
           C();
           factory C.e4() async = C;
@@ -27,14 +25,12 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart";
         void main() {
           var c = new C.e4();
           print(c);
         }
       lib.dart: |
-        // @dart=2.9
         class C {
           C();
           factory C.e4() async = C;
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
index b30010d..16a9d5c 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
@@ -3,28 +3,18 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:4:18: Error: Factory bodies can't use 'async', 'async*', or 'sync*'.
+// org-dartlang-test:///lib.dart:3:18: Error: Factory bodies can't use 'async', 'async*', or 'sync*'.
 //   factory C.e4() async = C;
 //                  ^^^^^
 //
 
   class C extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[#C1];
-    constructor •() → lib::C*
+    static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+    constructor •() → lib::C
       : super dart.core::Object::•()
       ;
-    static factory e4() → lib::C*
+    static factory e4() → lib::C
       return new lib::C::•();
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -32,7 +22,7 @@
   import "org-dartlang-test:///lib.dart";
 
   static method main() → void {
-    lib::C* c = new lib::C::•();
+    lib::C c = new lib::C::•();
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
index cc3198c..385f382 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
@@ -3,28 +3,18 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:4:18: Error: Factory bodies can't use 'async', 'async*', or 'sync*'.
+// org-dartlang-test:///lib.dart:3:18: Error: Factory bodies can't use 'async', 'async*', or 'sync*'.
 //   factory C.e4() async = C;
 //                  ^^^^^
 //
 
   class C extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[#C1];
-    constructor •() → lib::C*
+    static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+    constructor •() → lib::C
       : super dart.core::Object::•()
       ;
-    static factory e4() → lib::C*
+    static factory e4() → lib::C
       return new lib::C::•();
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -32,7 +22,7 @@
   import "org-dartlang-test:///lib.dart";
 
   static method main() → void {
-    lib::C* c = new lib::C::•();
+    lib::C c = new lib::C::•();
     dart.core::print(c);
   }
 }
diff --git a/pkg/front_end/testcases/incremental/deleting_file.yaml b/pkg/front_end/testcases/incremental/deleting_file.yaml
index bafc4b3..dea1937 100644
--- a/pkg/front_end/testcases/incremental/deleting_file.yaml
+++ b/pkg/front_end/testcases/incremental/deleting_file.yaml
@@ -11,14 +11,12 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
         main() {
           print("Hello no. 0");
           b();
         }
       b.dart: |
-        // @dart=2.9
         b() {
           print("b");
         }
@@ -29,7 +27,6 @@
       - b.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
         main() {
           print("Hello no. 0");
@@ -44,7 +41,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
         main() {
           print("Hello no. 1");
@@ -59,7 +55,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
         main() {
           print("Hello no. 1");
diff --git a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.2.expect b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.2.expect
index a1988d3..65c08c4c 100644
--- a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.2.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
+// org-dartlang-test:///main.dart:1:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
 // import "b.dart";
 //        ^
 //
@@ -13,7 +13,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.
+// org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.
 //   b();
 //   ^
 //
@@ -22,6 +22,6 @@
 
   static method main() → dynamic {
     dart.core::print("Hello no. 0");
-    invalid-expression "org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.\n  b();\n  ^";
+    invalid-expression "org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.\n  b();\n  ^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.3.expect b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.3.expect
index 8e795d4..2fff4ef 100644
--- a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.3.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
+// org-dartlang-test:///main.dart:1:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
 // import "b.dart";
 //        ^
 //
@@ -13,7 +13,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.
+// org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.
 //   b();
 //   ^
 //
@@ -22,6 +22,6 @@
 
   static method main() → dynamic {
     dart.core::print("Hello no. 1");
-    invalid-expression "org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.\n  b();\n  ^";
+    invalid-expression "org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.\n  b();\n  ^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.4.expect b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.4.expect
index 8e795d4..2fff4ef 100644
--- a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.4.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
+// org-dartlang-test:///main.dart:1:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
 // import "b.dart";
 //        ^
 //
@@ -13,7 +13,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.
+// org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.
 //   b();
 //   ^
 //
@@ -22,6 +22,6 @@
 
   static method main() → dynamic {
     dart.core::print("Hello no. 1");
-    invalid-expression "org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.\n  b();\n  ^";
+    invalid-expression "org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.\n  b();\n  ^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/disappearing_library.yaml b/pkg/front_end/testcases/incremental/disappearing_library.yaml
index c04715d..75a951b 100644
--- a/pkg/front_end/testcases/incremental/disappearing_library.yaml
+++ b/pkg/front_end/testcases/incremental/disappearing_library.yaml
@@ -12,7 +12,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         library mainLibrary;
         import "b.dart" as b;
 
@@ -20,7 +19,6 @@
           b.foo();
         }
       b.dart: |
-        // @dart=2.9
         library bLibrary;
 
         foo() {
@@ -33,7 +31,6 @@
       - b.dart
     sources:
       b.dart: |
-        // @dart=2.9
         library bLibrary;
 
         main() {
diff --git a/pkg/front_end/testcases/incremental/disappearing_package.yaml b/pkg/front_end/testcases/incremental/disappearing_package.yaml
index 5349d99..aa20efa 100644
--- a/pkg/front_end/testcases/incremental/disappearing_package.yaml
+++ b/pkg/front_end/testcases/incremental/disappearing_package.yaml
@@ -12,14 +12,12 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       pkg/example/b.dart: |
-        // @dart=2.9
         b() {
           print("b");
         }
@@ -42,7 +40,6 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           print("hello");
         }
diff --git a/pkg/front_end/testcases/incremental/entry_not_package_url_main.yaml b/pkg/front_end/testcases/incremental/entry_not_package_url_main.yaml
index 1f881a7..4e055b5 100644
--- a/pkg/front_end/testcases/incremental/entry_not_package_url_main.yaml
+++ b/pkg/front_end/testcases/incremental/entry_not_package_url_main.yaml
@@ -10,7 +10,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
         }
       .dart_tool/package_config.json: |
diff --git a/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml b/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml
index 4c8beb6..78a9a76 100644
--- a/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml
+++ b/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml
@@ -11,7 +11,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           asdf;
         }
diff --git a/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml.world.1.expect b/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml.world.1.expect
index f598435..a0d9cf4 100644
--- a/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml.world.1.expect
@@ -3,12 +3,12 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:3: Error: Undefined name 'asdf'.
+// org-dartlang-test:///main.dart:2:3: Error: Undefined name 'asdf'.
 //   asdf;
 //   ^^^^
 //
 
   static method main() → dynamic {
-    invalid-expression "org-dartlang-test:///main.dart:3:3: Error: Undefined name 'asdf'.\n  asdf;\n  ^^^^";
+    invalid-expression "org-dartlang-test:///main.dart:2:3: Error: Undefined name 'asdf'.\n  asdf;\n  ^^^^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/entry_not_package_url_no_main.yaml b/pkg/front_end/testcases/incremental/entry_not_package_url_no_main.yaml
index a070cbb..43def34 100644
--- a/pkg/front_end/testcases/incremental/entry_not_package_url_no_main.yaml
+++ b/pkg/front_end/testcases/incremental/entry_not_package_url_no_main.yaml
@@ -10,7 +10,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         notMain() {}
       .dart_tool/package_config.json: |
         {
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml
index 6557fc6..38de9ca 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml
@@ -19,20 +19,18 @@
           ]
         }
       main.dart: |
-        // @dart=2.9
         import 'package:flutter/object.dart';
         import 'lib.dart';
         
         class Adaptor extends RenderFoo with LibMixin {}
 
         class AdaptorElement extends RenderObject {
-          Adaptor get renderObject => super.renderObject;
+          Adaptor get renderObject => super.renderObject as Adaptor;
           void foo() {
             print(renderObject.constraints.axis);
           }
         }
       lib.dart: |
-        // @dart=2.9
         import 'package:flutter/object.dart';
         mixin LibMixin on RenderObject {}
       flutter/object.dart: |
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.1.expect b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.1.expect
index 45c9ab4..68a17c6 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.1.expect
@@ -35,18 +35,6 @@
   import "package:flutter/object.dart";
 
   abstract class LibMixin extends obj::RenderObject /*isMixinDeclaration*/  {
-    abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
-    abstract member-signature get renderObject() → obj::RenderObject*; -> obj::RenderObject::renderObject
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -55,46 +43,23 @@
   import "org-dartlang-test:///lib.dart";
 
   abstract class _Adaptor&RenderFoo&LibMixin extends obj::RenderFoo implements lib::LibMixin /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor •() → main::_Adaptor&RenderFoo&LibMixin*
+    synthetic constructor •() → main::_Adaptor&RenderFoo&LibMixin
       : super obj::RenderFoo::•()
       ;
-    abstract member-signature get constraints() → obj::FooConstraints*; -> obj::RenderFoo::constraints
-    abstract member-signature get renderObject() → obj::RenderObject*; -> obj::RenderObject::renderObject
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class Adaptor extends main::_Adaptor&RenderFoo&LibMixin {
-    synthetic constructor •() → main::Adaptor*
+    synthetic constructor •() → main::Adaptor
       : super main::_Adaptor&RenderFoo&LibMixin::•()
       ;
   }
   class AdaptorElement extends obj::RenderObject {
-    synthetic constructor •() → main::AdaptorElement*
+    synthetic constructor •() → main::AdaptorElement
       : super obj::RenderObject::•()
       ;
-    get renderObject() → main::Adaptor*
-      return super.{obj::RenderObject::renderObject} as{TypeError} main::Adaptor*;
+    get renderObject() → main::Adaptor
+      return super.{obj::RenderObject::renderObject} as{ForNonNullableByDefault} main::Adaptor;
     method foo() → void {
-      dart.core::print(this.{main::AdaptorElement::renderObject}{main::Adaptor*}.{main::_Adaptor&RenderFoo&LibMixin::constraints}{obj::FooConstraints*}.{obj::FooConstraints::axis}{dart.core::String*});
+      dart.core::print(this.{main::AdaptorElement::renderObject}{main::Adaptor}.{obj::RenderFoo::constraints}{obj::FooConstraints}.{obj::FooConstraints::axis}{dart.core::String});
     }
-    abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.2.expect b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.2.expect
index 45c9ab4..68a17c6 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.2.expect
@@ -35,18 +35,6 @@
   import "package:flutter/object.dart";
 
   abstract class LibMixin extends obj::RenderObject /*isMixinDeclaration*/  {
-    abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
-    abstract member-signature get renderObject() → obj::RenderObject*; -> obj::RenderObject::renderObject
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -55,46 +43,23 @@
   import "org-dartlang-test:///lib.dart";
 
   abstract class _Adaptor&RenderFoo&LibMixin extends obj::RenderFoo implements lib::LibMixin /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor •() → main::_Adaptor&RenderFoo&LibMixin*
+    synthetic constructor •() → main::_Adaptor&RenderFoo&LibMixin
       : super obj::RenderFoo::•()
       ;
-    abstract member-signature get constraints() → obj::FooConstraints*; -> obj::RenderFoo::constraints
-    abstract member-signature get renderObject() → obj::RenderObject*; -> obj::RenderObject::renderObject
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class Adaptor extends main::_Adaptor&RenderFoo&LibMixin {
-    synthetic constructor •() → main::Adaptor*
+    synthetic constructor •() → main::Adaptor
       : super main::_Adaptor&RenderFoo&LibMixin::•()
       ;
   }
   class AdaptorElement extends obj::RenderObject {
-    synthetic constructor •() → main::AdaptorElement*
+    synthetic constructor •() → main::AdaptorElement
       : super obj::RenderObject::•()
       ;
-    get renderObject() → main::Adaptor*
-      return super.{obj::RenderObject::renderObject} as{TypeError} main::Adaptor*;
+    get renderObject() → main::Adaptor
+      return super.{obj::RenderObject::renderObject} as{ForNonNullableByDefault} main::Adaptor;
     method foo() → void {
-      dart.core::print(this.{main::AdaptorElement::renderObject}{main::Adaptor*}.{main::_Adaptor&RenderFoo&LibMixin::constraints}{obj::FooConstraints*}.{obj::FooConstraints::axis}{dart.core::String*});
+      dart.core::print(this.{main::AdaptorElement::renderObject}{main::Adaptor}.{obj::RenderFoo::constraints}{obj::FooConstraints}.{obj::FooConstraints::axis}{dart.core::String});
     }
-    abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml
index 6e0e5c8..fa61ced 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml
@@ -19,23 +19,20 @@
           ]
         }
       main.dart: |
-        // @dart=2.9
         import 'package:flutter/object.dart';
         import 'lib1.dart';
 
         class AdaptorElement extends RenderObject {
-          Adaptor get renderObject => super.renderObject;
+          Adaptor get renderObject => super.renderObject as Adaptor;
           void foo() {
             print(renderObject.constraints.axis);
           }
         }
       lib1.dart: |
-        // @dart=2.9
         import 'package:flutter/object.dart';
         import 'lib2.dart';
         abstract class Adaptor extends RenderFoo with LibMixin {}
       lib2.dart: |
-        // @dart=2.9
         import 'package:flutter/object.dart';
         mixin LibMixin on RenderObject {}
       flutter/object.dart: |
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.1.expect b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.1.expect
index ec1075d..e9c963c 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.1.expect
@@ -36,24 +36,12 @@
   import "org-dartlang-test:///lib2.dart";
 
   abstract class _Adaptor&RenderFoo&LibMixin extends obj::RenderFoo implements lib2::LibMixin /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor •() → lib1::_Adaptor&RenderFoo&LibMixin*
+    synthetic constructor •() → lib1::_Adaptor&RenderFoo&LibMixin
       : super obj::RenderFoo::•()
       ;
-    abstract member-signature get constraints() → obj::FooConstraints*; -> obj::RenderFoo::constraints
-    abstract member-signature get renderObject() → obj::RenderObject*; -> obj::RenderObject::renderObject
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class Adaptor extends lib1::_Adaptor&RenderFoo&LibMixin {
-    synthetic constructor •() → lib1::Adaptor*
+    synthetic constructor •() → lib1::Adaptor
       : super lib1::_Adaptor&RenderFoo&LibMixin::•()
       ;
   }
@@ -63,18 +51,6 @@
   import "package:flutter/object.dart";
 
   abstract class LibMixin extends obj::RenderObject /*isMixinDeclaration*/  {
-    abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
-    abstract member-signature get renderObject() → obj::RenderObject*; -> obj::RenderObject::renderObject
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -83,24 +59,13 @@
   import "org-dartlang-test:///lib1.dart";
 
   class AdaptorElement extends obj::RenderObject {
-    synthetic constructor •() → main::AdaptorElement*
+    synthetic constructor •() → main::AdaptorElement
       : super obj::RenderObject::•()
       ;
-    get renderObject() → lib1::Adaptor*
-      return super.{obj::RenderObject::renderObject} as{TypeError} lib1::Adaptor*;
+    get renderObject() → lib1::Adaptor
+      return super.{obj::RenderObject::renderObject} as{ForNonNullableByDefault} lib1::Adaptor;
     method foo() → void {
-      dart.core::print(this.{main::AdaptorElement::renderObject}{lib1::Adaptor*}.{lib1::_Adaptor&RenderFoo&LibMixin::constraints}{obj::FooConstraints*}.{obj::FooConstraints::axis}{dart.core::String*});
+      dart.core::print(this.{main::AdaptorElement::renderObject}{lib1::Adaptor}.{obj::RenderFoo::constraints}{obj::FooConstraints}.{obj::FooConstraints::axis}{dart.core::String});
     }
-    abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.2.expect b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.2.expect
index ec1075d..e9c963c 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.2.expect
@@ -36,24 +36,12 @@
   import "org-dartlang-test:///lib2.dart";
 
   abstract class _Adaptor&RenderFoo&LibMixin extends obj::RenderFoo implements lib2::LibMixin /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor •() → lib1::_Adaptor&RenderFoo&LibMixin*
+    synthetic constructor •() → lib1::_Adaptor&RenderFoo&LibMixin
       : super obj::RenderFoo::•()
       ;
-    abstract member-signature get constraints() → obj::FooConstraints*; -> obj::RenderFoo::constraints
-    abstract member-signature get renderObject() → obj::RenderObject*; -> obj::RenderObject::renderObject
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class Adaptor extends lib1::_Adaptor&RenderFoo&LibMixin {
-    synthetic constructor •() → lib1::Adaptor*
+    synthetic constructor •() → lib1::Adaptor
       : super lib1::_Adaptor&RenderFoo&LibMixin::•()
       ;
   }
@@ -63,18 +51,6 @@
   import "package:flutter/object.dart";
 
   abstract class LibMixin extends obj::RenderObject /*isMixinDeclaration*/  {
-    abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
-    abstract member-signature get renderObject() → obj::RenderObject*; -> obj::RenderObject::renderObject
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -83,24 +59,13 @@
   import "org-dartlang-test:///lib1.dart";
 
   class AdaptorElement extends obj::RenderObject {
-    synthetic constructor •() → main::AdaptorElement*
+    synthetic constructor •() → main::AdaptorElement
       : super obj::RenderObject::•()
       ;
-    get renderObject() → lib1::Adaptor*
-      return super.{obj::RenderObject::renderObject} as{TypeError} lib1::Adaptor*;
+    get renderObject() → lib1::Adaptor
+      return super.{obj::RenderObject::renderObject} as{ForNonNullableByDefault} lib1::Adaptor;
     method foo() → void {
-      dart.core::print(this.{main::AdaptorElement::renderObject}{lib1::Adaptor*}.{lib1::_Adaptor&RenderFoo&LibMixin::constraints}{obj::FooConstraints*}.{obj::FooConstraints::axis}{dart.core::String*});
+      dart.core::print(this.{main::AdaptorElement::renderObject}{lib1::Adaptor}.{obj::RenderFoo::constraints}{obj::FooConstraints}.{obj::FooConstraints::axis}{dart.core::String});
     }
-    abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/expression_calculation_with_error.yaml b/pkg/front_end/testcases/incremental/expression_calculation_with_error.yaml
index 9576219..51073a5 100644
--- a/pkg/front_end/testcases/incremental/expression_calculation_with_error.yaml
+++ b/pkg/front_end/testcases/incremental/expression_calculation_with_error.yaml
@@ -13,7 +13,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           print("hello");
         }
diff --git a/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml b/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml
index 0ecdf8e..13a6a2e 100644
--- a/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml
+++ b/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml
@@ -9,7 +9,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         extension NumberParsing on String {
           int parseInt() {
             return int.parse(this);
diff --git a/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml.world.1.expect b/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml.world.1.expect
index 361ccb3..02d4ea6 100644
--- a/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml.world.1.expect
@@ -1,13 +1,13 @@
 main = <No Member>;
 library from "org-dartlang-test:///main.dart" as main {
 
-  extension NumberParsing on dart.core::String* {
+  extension NumberParsing on dart.core::String {
     method parseInt = main::NumberParsing|parseInt;
     tearoff parseInt = main::NumberParsing|get#parseInt;
   }
-  static method NumberParsing|parseInt(lowered final dart.core::String* #this) → dart.core::int* {
+  static method NumberParsing|parseInt(lowered final dart.core::String #this) → dart.core::int {
     return dart.core::int::parse(#this);
   }
-  static method NumberParsing|get#parseInt(lowered final dart.core::String* #this) → () →* dart.core::int*
-    return () → dart.core::int* => main::NumberParsing|parseInt(#this);
+  static method NumberParsing|get#parseInt(lowered final dart.core::String #this) → () → dart.core::int
+    return () → dart.core::int => main::NumberParsing|parseInt(#this);
 }
diff --git a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml
index 62cacea..21d2963 100644
--- a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml
+++ b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml
@@ -14,7 +14,6 @@
     errors: true
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         import "lib2.dart" as p;
         main() {
@@ -22,12 +21,10 @@
           o.onObject;
         }
       lib1.dart: |
-        // @dart=2.9
         extension OnObject on Object {
           String get onObject => "object #1";
         }
       lib2.dart: |
-        // @dart=2.9
         extension AlsoOnObject on Object {
           String get onObject => "object #2";
         }
@@ -40,7 +37,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         import "lib1.dart" as p;
         main() {
@@ -57,7 +53,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         import "lib2.dart" as p;
         main() {
diff --git a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.1.expect b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.1.expect
index d04e859..9dde03d 100644
--- a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.1.expect
@@ -1,33 +1,33 @@
 main = main::main;
 library from "org-dartlang-test:///lib1.dart" as lib1 {
 
-  extension OnObject on dart.core::Object* {
+  extension OnObject on dart.core::Object {
     get onObject = lib1::OnObject|get#onObject;
   }
-  static method OnObject|get#onObject(lowered final dart.core::Object* #this) → dart.core::String*
+  static method OnObject|get#onObject(lowered final dart.core::Object #this) → dart.core::String
     return "object #1";
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
-  extension AlsoOnObject on dart.core::Object* {
+  extension AlsoOnObject on dart.core::Object {
     get onObject = lib2::AlsoOnObject|get#onObject;
   }
-  static method AlsoOnObject|get#onObject(lowered final dart.core::Object* #this) → dart.core::String*
+  static method AlsoOnObject|get#onObject(lowered final dart.core::Object #this) → dart.core::String
     return "object #2";
 }
 library from "org-dartlang-test:///main.dart" as main {
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:6:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
+// org-dartlang-test:///main.dart:5:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
 //  - 'Object' is from 'dart:core'.
 // Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
 //   o.onObject;
 //     ^^^^^^^^
-// org-dartlang-test:///lib1.dart:3:14: Context: This is one of the extension members.
+// org-dartlang-test:///lib1.dart:2:14: Context: This is one of the extension members.
 //   String get onObject => "object #1";
 //              ^^^^^^^^
-// org-dartlang-test:///lib2.dart:3:14: Context: This is one of the extension members.
+// org-dartlang-test:///lib2.dart:2:14: Context: This is one of the extension members.
 //   String get onObject => "object #2";
 //              ^^^^^^^^
 //
@@ -36,7 +36,7 @@
   import "org-dartlang-test:///lib2.dart" as p;
 
   static method main() → dynamic {
-    dart.core::Object* o = 1;
-    invalid-expression "org-dartlang-test:///main.dart:6:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.\n - 'Object' is from 'dart:core'.\nTry using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.\n  o.onObject;\n    ^^^^^^^^" in o{<unresolved>}.onObject;
+    dart.core::Object o = 1;
+    invalid-expression "org-dartlang-test:///main.dart:5:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.\n - 'Object' is from 'dart:core'.\nTry using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.\n  o.onObject;\n    ^^^^^^^^" in o{<unresolved>}.onObject;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.2.expect b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.2.expect
index 55a319c..49f8dfb 100644
--- a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.2.expect
@@ -1,10 +1,10 @@
 main = main::main;
 library from "org-dartlang-test:///lib1.dart" as lib1 {
 
-  extension OnObject on dart.core::Object* {
+  extension OnObject on dart.core::Object {
     get onObject = lib1::OnObject|get#onObject;
   }
-  static method OnObject|get#onObject(lowered final dart.core::Object* #this) → dart.core::String*
+  static method OnObject|get#onObject(lowered final dart.core::Object #this) → dart.core::String
     return "object #1";
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -13,7 +13,7 @@
   import "org-dartlang-test:///lib1.dart" as p;
 
   static method main() → dynamic {
-    dart.core::Object* o = 1;
+    dart.core::Object o = 1;
     lib1::OnObject|get#onObject(o);
   }
 }
diff --git a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.3.expect b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.3.expect
index d04e859..9dde03d 100644
--- a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.3.expect
@@ -1,33 +1,33 @@
 main = main::main;
 library from "org-dartlang-test:///lib1.dart" as lib1 {
 
-  extension OnObject on dart.core::Object* {
+  extension OnObject on dart.core::Object {
     get onObject = lib1::OnObject|get#onObject;
   }
-  static method OnObject|get#onObject(lowered final dart.core::Object* #this) → dart.core::String*
+  static method OnObject|get#onObject(lowered final dart.core::Object #this) → dart.core::String
     return "object #1";
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
-  extension AlsoOnObject on dart.core::Object* {
+  extension AlsoOnObject on dart.core::Object {
     get onObject = lib2::AlsoOnObject|get#onObject;
   }
-  static method AlsoOnObject|get#onObject(lowered final dart.core::Object* #this) → dart.core::String*
+  static method AlsoOnObject|get#onObject(lowered final dart.core::Object #this) → dart.core::String
     return "object #2";
 }
 library from "org-dartlang-test:///main.dart" as main {
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:6:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
+// org-dartlang-test:///main.dart:5:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
 //  - 'Object' is from 'dart:core'.
 // Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
 //   o.onObject;
 //     ^^^^^^^^
-// org-dartlang-test:///lib1.dart:3:14: Context: This is one of the extension members.
+// org-dartlang-test:///lib1.dart:2:14: Context: This is one of the extension members.
 //   String get onObject => "object #1";
 //              ^^^^^^^^
-// org-dartlang-test:///lib2.dart:3:14: Context: This is one of the extension members.
+// org-dartlang-test:///lib2.dart:2:14: Context: This is one of the extension members.
 //   String get onObject => "object #2";
 //              ^^^^^^^^
 //
@@ -36,7 +36,7 @@
   import "org-dartlang-test:///lib2.dart" as p;
 
   static method main() → dynamic {
-    dart.core::Object* o = 1;
-    invalid-expression "org-dartlang-test:///main.dart:6:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.\n - 'Object' is from 'dart:core'.\nTry using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.\n  o.onObject;\n    ^^^^^^^^" in o{<unresolved>}.onObject;
+    dart.core::Object o = 1;
+    invalid-expression "org-dartlang-test:///main.dart:5:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.\n - 'Object' is from 'dart:core'.\nTry using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.\n  o.onObject;\n    ^^^^^^^^" in o{<unresolved>}.onObject;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml
index 78a3218..fb17878 100644
--- a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml
+++ b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml
@@ -9,7 +9,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         import "lib2.dart";
         import "lib3.dart";
@@ -19,21 +18,18 @@
           "42".fooMe2();
         }
       lib1.dart: |
-        // @dart=2.9
         extension NumberParsing on String {
           int parseInt() {
             return int.parse(this);
           }
         }
       lib2.dart: |
-        // @dart=2.9
         extension DuplicateName on String {
           String fooMe1() {
             return "Foo1";
           }
         }
       lib3.dart: |
-        // @dart=2.9
         extension DuplicateName on String {
           String fooMe2() {
             return "Foo2";
@@ -58,7 +54,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         import "lib2.dart";
         import "lib3.dart";
@@ -68,21 +63,18 @@
           "42".fooMe2();
         }
       lib1.dart: |
-        // @dart=2.9
         extension NumberParsing on String {
           int parseInt() {
             return int.parse(this);
           }
         }
       lib2.dart: |
-        // @dart=2.9
         extension DuplicateName on String {
           String fooMe1() {
             return "Foo1";
           }
         }
       lib3.dart: |
-        // @dart=2.9
         extension DuplicateName on String {
           String fooMe2() {
             return "Foo2";
diff --git a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.1.expect b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.1.expect
index 83ad3f0..0e35632 100644
--- a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.1.expect
@@ -1,39 +1,39 @@
 main = main::main;
 library from "org-dartlang-test:///lib1.dart" as lib1 {
 
-  extension NumberParsing on dart.core::String* {
+  extension NumberParsing on dart.core::String {
     method parseInt = lib1::NumberParsing|parseInt;
     tearoff parseInt = lib1::NumberParsing|get#parseInt;
   }
-  static method NumberParsing|parseInt(lowered final dart.core::String* #this) → dart.core::int* {
+  static method NumberParsing|parseInt(lowered final dart.core::String #this) → dart.core::int {
     return dart.core::int::parse(#this);
   }
-  static method NumberParsing|get#parseInt(lowered final dart.core::String* #this) → () →* dart.core::int*
-    return () → dart.core::int* => lib1::NumberParsing|parseInt(#this);
+  static method NumberParsing|get#parseInt(lowered 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* {
+  extension DuplicateName on dart.core::String {
     method fooMe1 = lib2::DuplicateName|fooMe1;
     tearoff fooMe1 = lib2::DuplicateName|get#fooMe1;
   }
-  static method DuplicateName|fooMe1(lowered final dart.core::String* #this) → dart.core::String* {
+  static method DuplicateName|fooMe1(lowered final dart.core::String #this) → dart.core::String {
     return "Foo1";
   }
-  static method DuplicateName|get#fooMe1(lowered final dart.core::String* #this) → () →* dart.core::String*
-    return () → dart.core::String* => lib2::DuplicateName|fooMe1(#this);
+  static method DuplicateName|get#fooMe1(lowered 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* {
+  extension DuplicateName on dart.core::String {
     method fooMe2 = lib3::DuplicateName|fooMe2;
     tearoff fooMe2 = lib3::DuplicateName|get#fooMe2;
   }
-  static method DuplicateName|fooMe2(lowered final dart.core::String* #this) → dart.core::String* {
+  static method DuplicateName|fooMe2(lowered final dart.core::String #this) → dart.core::String {
     return "Foo2";
   }
-  static method DuplicateName|get#fooMe2(lowered final dart.core::String* #this) → () →* dart.core::String*
-    return () → dart.core::String* => lib3::DuplicateName|fooMe2(#this);
+  static method DuplicateName|get#fooMe2(lowered 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 {
 
diff --git a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.2.expect b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.2.expect
index 83ad3f0..0e35632 100644
--- a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml.world.2.expect
@@ -1,39 +1,39 @@
 main = main::main;
 library from "org-dartlang-test:///lib1.dart" as lib1 {
 
-  extension NumberParsing on dart.core::String* {
+  extension NumberParsing on dart.core::String {
     method parseInt = lib1::NumberParsing|parseInt;
     tearoff parseInt = lib1::NumberParsing|get#parseInt;
   }
-  static method NumberParsing|parseInt(lowered final dart.core::String* #this) → dart.core::int* {
+  static method NumberParsing|parseInt(lowered final dart.core::String #this) → dart.core::int {
     return dart.core::int::parse(#this);
   }
-  static method NumberParsing|get#parseInt(lowered final dart.core::String* #this) → () →* dart.core::int*
-    return () → dart.core::int* => lib1::NumberParsing|parseInt(#this);
+  static method NumberParsing|get#parseInt(lowered 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* {
+  extension DuplicateName on dart.core::String {
     method fooMe1 = lib2::DuplicateName|fooMe1;
     tearoff fooMe1 = lib2::DuplicateName|get#fooMe1;
   }
-  static method DuplicateName|fooMe1(lowered final dart.core::String* #this) → dart.core::String* {
+  static method DuplicateName|fooMe1(lowered final dart.core::String #this) → dart.core::String {
     return "Foo1";
   }
-  static method DuplicateName|get#fooMe1(lowered final dart.core::String* #this) → () →* dart.core::String*
-    return () → dart.core::String* => lib2::DuplicateName|fooMe1(#this);
+  static method DuplicateName|get#fooMe1(lowered 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* {
+  extension DuplicateName on dart.core::String {
     method fooMe2 = lib3::DuplicateName|fooMe2;
     tearoff fooMe2 = lib3::DuplicateName|get#fooMe2;
   }
-  static method DuplicateName|fooMe2(lowered final dart.core::String* #this) → dart.core::String* {
+  static method DuplicateName|fooMe2(lowered final dart.core::String #this) → dart.core::String {
     return "Foo2";
   }
-  static method DuplicateName|get#fooMe2(lowered final dart.core::String* #this) → () →* dart.core::String*
-    return () → dart.core::String* => lib3::DuplicateName|fooMe2(#this);
+  static method DuplicateName|get#fooMe2(lowered 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 {
 
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml b/pkg/front_end/testcases/incremental/ffi_01.yaml
index 2c40646..6295865 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml
@@ -9,7 +9,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
 
         main() {
@@ -19,20 +18,19 @@
           print(coordinate.next);
         }
       lib.dart: |
-        // @dart=2.9
         import 'dart:ffi';
 
         class Coordinate extends Struct {
           @Double()
-          double x;
+          external double x;
 
           @Double()
-          double y;
+          external double y;
 
-          Pointer<Coordinate> next;
+          external Pointer<Coordinate>? next;
 
-          factory Coordinate.allocate(double x, double y, Pointer<Coordinate> next) {
-            return null;
+          factory Coordinate.allocate(double x, double y, Pointer<Coordinate>? next) {
+            throw '';
           }
         }
     expectedLibraryCount: 2
@@ -43,7 +41,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
 
         main() {
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
index b7e1762..f8e1774 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
@@ -8,36 +8,27 @@
     constructor #fromTypedDataBase(dart.core::Object #typedDataBase) → lib::Coordinate
       : super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
       ;
-    static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
-      return null;
-    }
-    abstract member-signature get _typedDataBase() → dart.core::Object*; -> dart.ffi::_Compound::_typedDataBase
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
     @#C8
-    get x() → dart.core::double*
+    get x() → dart.core::double
       return dart.ffi::_loadDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*});
-    set x(dart.core::double* #v) → void
-      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
     @#C8
-    get y() → dart.core::double*
+    set x(dart.core::double #externalFieldValue) → void
+      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue);
+    @#C8
+    get y() → dart.core::double
       return dart.ffi::_loadDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*});
-    set y(dart.core::double* #v) → void
-      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
-    get next() → dart.ffi::Pointer<lib::Coordinate*>*
-      return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
-    set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
-      return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
+    @#C8
+    set y(dart.core::double #externalFieldValue) → void
+      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue);
+    get next() → dart.ffi::Pointer<lib::Coordinate>?
+      return dart.ffi::_fromAddress<lib::Coordinate>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+    set next(dart.ffi::Pointer<lib::Coordinate>? #externalFieldValue) → void
+      return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+    static factory allocate(dart.core::double x, dart.core::double y, dart.ffi::Pointer<lib::Coordinate>? next) → lib::Coordinate {
+      throw "";
+    }
     @#C16
-    static get /*isNonNullableByDefault*/ #sizeOf() → dart.core::int*
+    static get #sizeOf() → dart.core::int*
       return #C19.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
   }
 }
@@ -46,10 +37,10 @@
   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::double*});
-    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double*});
-    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate*>*});
+    lib::Coordinate coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
+    dart.core::print(coordinate.{lib::Coordinate::x}{dart.core::double});
+    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double});
+    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate>?});
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
index 655f66e..4ac553a 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
@@ -8,36 +8,27 @@
     constructor #fromTypedDataBase(dart.core::Object #typedDataBase) → lib::Coordinate
       : super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
       ;
-    static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
-      return null;
-    }
-    abstract member-signature get _typedDataBase() → dart.core::Object*; -> dart.ffi::_Compound::_typedDataBase
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
     @#C8
-    get x() → dart.core::double*
+    get x() → dart.core::double
       return dart.ffi::_loadDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*});
-    set x(dart.core::double* #v) → void
-      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
     @#C8
-    get y() → dart.core::double*
+    set x(dart.core::double #externalFieldValue) → void
+      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue);
+    @#C8
+    get y() → dart.core::double
       return dart.ffi::_loadDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*});
-    set y(dart.core::double* #v) → void
-      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
-    get next() → dart.ffi::Pointer<lib::Coordinate*>*
-      return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
-    set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
-      return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
+    @#C8
+    set y(dart.core::double #externalFieldValue) → void
+      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue);
+    get next() → dart.ffi::Pointer<lib::Coordinate>?
+      return dart.ffi::_fromAddress<lib::Coordinate>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+    set next(dart.ffi::Pointer<lib::Coordinate>? #externalFieldValue) → void
+      return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+    static factory allocate(dart.core::double x, dart.core::double y, dart.ffi::Pointer<lib::Coordinate>? next) → lib::Coordinate {
+      throw "";
+    }
     @#C16
-    static get /*isNonNullableByDefault*/ #sizeOf() → dart.core::int*
+    static get #sizeOf() → dart.core::int*
       return #C19.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
   }
 }
@@ -46,10 +37,10 @@
   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::double*});
-    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double*});
-    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate*>*});
+    lib::Coordinate coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
+    dart.core::print(coordinate.{lib::Coordinate::x}{dart.core::double});
+    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double});
+    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate>?});
     main::done();
   }
   static method done() → dynamic {
diff --git a/pkg/front_end/testcases/incremental/ffi_02.yaml b/pkg/front_end/testcases/incremental/ffi_02.yaml
index 19d30a0..ec0ac7f 100644
--- a/pkg/front_end/testcases/incremental/ffi_02.yaml
+++ b/pkg/front_end/testcases/incremental/ffi_02.yaml
@@ -10,10 +10,9 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
 
-        Coordinate coordinate;
+        late Coordinate coordinate;
 
         main() {
           coordinate = new Coordinate.allocate(42.0, 42.0, null);
@@ -22,20 +21,19 @@
           print(coordinate.next);
         }
       lib.dart: |
-        // @dart=2.9
         import 'dart:ffi';
 
         class Coordinate extends Struct {
           @Double()
-          double x;
+          external double x;
 
           @Double()
-          double y;
+          external double y;
 
-          Pointer<Coordinate> next;
+          external Pointer<Coordinate>? next;
 
-          factory Coordinate.allocate(double x, double y, Pointer<Coordinate> next) {
-            return null;
+          factory Coordinate.allocate(double x, double y, Pointer<Coordinate>? next) {
+            throw '';
           }
         }
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
index 8606c08..01043ea 100644
--- a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
@@ -8,36 +8,27 @@
     constructor #fromTypedDataBase(dart.core::Object #typedDataBase) → lib::Coordinate
       : super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
       ;
-    static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
-      return null;
-    }
-    abstract member-signature get _typedDataBase() → dart.core::Object*; -> dart.ffi::_Compound::_typedDataBase
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
     @#C8
-    get x() → dart.core::double*
+    get x() → dart.core::double
       return dart.ffi::_loadDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*});
-    set x(dart.core::double* #v) → void
-      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
     @#C8
-    get y() → dart.core::double*
+    set x(dart.core::double #externalFieldValue) → void
+      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue);
+    @#C8
+    get y() → dart.core::double
       return dart.ffi::_loadDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*});
-    set y(dart.core::double* #v) → void
-      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
-    get next() → dart.ffi::Pointer<lib::Coordinate*>*
-      return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
-    set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
-      return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
+    @#C8
+    set y(dart.core::double #externalFieldValue) → void
+      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue);
+    get next() → dart.ffi::Pointer<lib::Coordinate>?
+      return dart.ffi::_fromAddress<lib::Coordinate>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+    set next(dart.ffi::Pointer<lib::Coordinate>? #externalFieldValue) → void
+      return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+    static factory allocate(dart.core::double x, dart.core::double y, dart.ffi::Pointer<lib::Coordinate>? next) → lib::Coordinate {
+      throw "";
+    }
     @#C16
-    static get /*isNonNullableByDefault*/ #sizeOf() → dart.core::int*
+    static get #sizeOf() → dart.core::int*
       return #C19.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
   }
 }
@@ -45,12 +36,12 @@
 
   import "org-dartlang-test:///lib.dart";
 
-  static field lib::Coordinate* coordinate;
+  late 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::double*});
-    dart.core::print(main::coordinate.{lib::Coordinate::y}{dart.core::double*});
-    dart.core::print(main::coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate*>*});
+    dart.core::print(main::coordinate.{lib::Coordinate::x}{dart.core::double});
+    dart.core::print(main::coordinate.{lib::Coordinate::y}{dart.core::double});
+    dart.core::print(main::coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate>?});
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expression.1.expect b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expression.1.expect
index c3ece07..29aa6aa 100644
--- a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expression.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expression.1.expect
@@ -1,2 +1,2 @@
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return dart.core::print(#lib1::coordinate.{#lib2::Coordinate::x}{dart.core::double*});
+  return dart.core::print(#lib1::coordinate.{#lib2::Coordinate::x}{dart.core::double});
diff --git a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml
index 6df844e..1322120 100644
--- a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml
@@ -13,18 +13,16 @@
     skipClassHierarchyTest: true
     sources:
       main.dart: |
-        // @dart=2.9
         import 'package:flutter/framework.dart';
         import 'after_layout.dart';
         class _HotReloadIssueState extends State<HotReloadIssue>
             with AfterLayoutMixin<HotReloadIssue> {
-          Widget build(BuildContext context) {}
+          Widget build(BuildContext context) => throw '';
           void afterFirstLayout(BuildContext context) {}
         }
         class HotReloadIssue extends StatefulWidget {}
 
       after_layout.dart: |
-        // @dart=2.9
         import 'package:flutter/framework.dart';
         mixin AfterLayoutMixin<T extends StatefulWidget> on State<T> {}
 
diff --git a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.1.expect
index 4ae1498..7d26320 100644
--- a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.1.expect
@@ -3,14 +3,7 @@
 
   import "package:flutter/framework.dart";
 
-  abstract class AfterLayoutMixin<T extends fra::StatefulWidget*> extends fra::State<aft::AfterLayoutMixin::T*> /*isMixinDeclaration*/  {
-    abstract member-signature get _widget() → aft::AfterLayoutMixin::T*; -> fra::State::_widget
-    abstract member-signature set _widget(covariant-by-class aft::AfterLayoutMixin::T* value) → void; -> fra::State::_widget
-    abstract member-signature method toString() → dart.core::String*; -> fra::_State&Object&Diagnosticable::toString
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+  abstract class AfterLayoutMixin<T extends fra::StatefulWidget> extends fra::State<aft::AfterLayoutMixin::T> /*isMixinDeclaration*/  {
   }
 }
 library from "package:flutter/framework.dart" as fra {
@@ -71,37 +64,26 @@
   import "package:flutter/framework.dart";
   import "org-dartlang-test:///after_layout.dart";
 
-  abstract class __HotReloadIssueState&State&AfterLayoutMixin = fra::State<main::HotReloadIssue*> with aft::AfterLayoutMixin<main::HotReloadIssue*> /*isAnonymousMixin*/  {
-    synthetic constructor •() → main::__HotReloadIssueState&State&AfterLayoutMixin*
+  abstract class __HotReloadIssueState&State&AfterLayoutMixin = fra::State<main::HotReloadIssue> with aft::AfterLayoutMixin<main::HotReloadIssue> /*isAnonymousMixin*/  {
+    synthetic constructor •() → main::__HotReloadIssueState&State&AfterLayoutMixin
       : super fra::State::•()
       ;
-    abstract member-signature get _widget() → main::HotReloadIssue*; -> fra::State::_widget
-    abstract member-signature set _widget(covariant-by-class main::HotReloadIssue* value) → void; -> fra::State::_widget
-    abstract member-signature method toString() → dart.core::String*; -> fra::_State&Object&Diagnosticable::toString
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class _HotReloadIssueState extends main::__HotReloadIssueState&State&AfterLayoutMixin {
-    synthetic constructor •() → main::_HotReloadIssueState*
+    synthetic constructor •() → main::_HotReloadIssueState
       : super main::__HotReloadIssueState&State&AfterLayoutMixin::•()
       ;
-    method build(fra::BuildContext* context) → fra::Widget* {}
-    method afterFirstLayout(fra::BuildContext* context) → void {}
-    static method _#new#tearOff() → main::_HotReloadIssueState*
+    method build(fra::BuildContext context) → fra::Widget
+      return throw "";
+    method afterFirstLayout(fra::BuildContext context) → void {}
+    static method _#new#tearOff() → main::_HotReloadIssueState
       return new main::_HotReloadIssueState::•();
   }
   class HotReloadIssue extends fra::StatefulWidget {
-    synthetic constructor •() → main::HotReloadIssue*
+    synthetic constructor •() → main::HotReloadIssue
       : super fra::StatefulWidget::•()
       ;
-    static method _#new#tearOff() → main::HotReloadIssue*
+    static method _#new#tearOff() → main::HotReloadIssue
       return new main::HotReloadIssue::•();
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.2.expect
index cd64084..7d26320 100644
--- a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.2.expect
@@ -3,14 +3,7 @@
 
   import "package:flutter/framework.dart";
 
-  abstract class AfterLayoutMixin<T extends fra::StatefulWidget*> extends fra::State<aft::AfterLayoutMixin::T*> /*isMixinDeclaration*/  {
-    abstract member-signature get _widget() → aft::AfterLayoutMixin::T*; -> fra::State::_widget
-    abstract member-signature set _widget(covariant-by-class aft::AfterLayoutMixin::T* value) → void; -> fra::State::_widget
-    abstract member-signature method toString() → dart.core::String*; -> fra::_State&Object&Diagnosticable::toString
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+  abstract class AfterLayoutMixin<T extends fra::StatefulWidget> extends fra::State<aft::AfterLayoutMixin::T> /*isMixinDeclaration*/  {
   }
 }
 library from "package:flutter/framework.dart" as fra {
@@ -71,37 +64,26 @@
   import "package:flutter/framework.dart";
   import "org-dartlang-test:///after_layout.dart";
 
-  abstract class __HotReloadIssueState&State&AfterLayoutMixin = fra::State<main::HotReloadIssue*> with aft::AfterLayoutMixin<main::HotReloadIssue*> /*isAnonymousMixin*/  {
-    synthetic constructor •() → main::__HotReloadIssueState&State&AfterLayoutMixin*
+  abstract class __HotReloadIssueState&State&AfterLayoutMixin = fra::State<main::HotReloadIssue> with aft::AfterLayoutMixin<main::HotReloadIssue> /*isAnonymousMixin*/  {
+    synthetic constructor •() → main::__HotReloadIssueState&State&AfterLayoutMixin
       : super fra::State::•()
       ;
-    abstract member-signature get _widget() → main::HotReloadIssue*; -> fra::State::_widget
-    abstract member-signature set _widget(covariant-by-class main::HotReloadIssue* value) → void; -> fra::State::_widget
-    abstract member-signature method toString() → dart.core::String*; -> fra::Diagnosticable::toString
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class _HotReloadIssueState extends main::__HotReloadIssueState&State&AfterLayoutMixin {
-    synthetic constructor •() → main::_HotReloadIssueState*
+    synthetic constructor •() → main::_HotReloadIssueState
       : super main::__HotReloadIssueState&State&AfterLayoutMixin::•()
       ;
-    method build(fra::BuildContext* context) → fra::Widget* {}
-    method afterFirstLayout(fra::BuildContext* context) → void {}
-    static method _#new#tearOff() → main::_HotReloadIssueState*
+    method build(fra::BuildContext context) → fra::Widget
+      return throw "";
+    method afterFirstLayout(fra::BuildContext context) → void {}
+    static method _#new#tearOff() → main::_HotReloadIssueState
       return new main::_HotReloadIssueState::•();
   }
   class HotReloadIssue extends fra::StatefulWidget {
-    synthetic constructor •() → main::HotReloadIssue*
+    synthetic constructor •() → main::HotReloadIssue
       : super fra::StatefulWidget::•()
       ;
-    static method _#new#tearOff() → main::HotReloadIssue*
+    static method _#new#tearOff() → main::HotReloadIssue
       return new main::HotReloadIssue::•();
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml
index 3ee21e2..d725921 100644
--- a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml
@@ -9,18 +9,16 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
 
         class Test extends Test2 {
-          Quux world() => null;
+          Quux world() => throw '';
         }
 
         abstract class Test2 {
           Baz world();
         }
       lib.dart: |
-        // @dart=2.9
         class FooEntry {}
 
         class BarEntry extends FooEntry {}
@@ -48,11 +46,10 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
 
         class Test extends Test2 {
-          Quux world() => null;
+          Quux world() => throw '';
         }
 
         abstract class Test2 {
diff --git a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.1.expect
index d8273a9..9488ccb 100644
--- a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.1.expect
@@ -2,73 +2,43 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class FooEntry extends dart.core::Object {
-    synthetic constructor •() → lib::FooEntry*
+    synthetic constructor •() → lib::FooEntry
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class BarEntry extends lib::FooEntry {
-    synthetic constructor •() → lib::BarEntry*
+    synthetic constructor •() → lib::BarEntry
       : super lib::FooEntry::•()
       ;
   }
   abstract class FooTarget extends dart.core::Object {
-    synthetic constructor •() → lib::FooTarget*
+    synthetic constructor •() → lib::FooTarget
       : super dart.core::Object::•()
       ;
-    abstract method hello(lib::FooEntry* entry) → void;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract method hello(lib::FooEntry entry) → void;
   }
   abstract class Baz extends dart.core::Object implements lib::FooTarget {
-    synthetic constructor •() → lib::Baz*
+    synthetic constructor •() → lib::Baz
       : super dart.core::Object::•()
       ;
-    method hello(covariant-by-declaration lib::FooEntry* entry) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    method hello(covariant-by-declaration lib::FooEntry entry) → void {}
   }
   abstract class MyMixin extends lib::Baz /*isMixinDeclaration*/  {
   }
   abstract class Qux extends lib::Baz {
-    synthetic constructor •() → lib::Qux*
+    synthetic constructor •() → lib::Qux
       : super lib::Baz::•()
       ;
-    method hello(covariant-by-declaration lib::BarEntry* entry) → void {}
+    method hello(covariant-by-declaration lib::BarEntry entry) → void {}
   }
   abstract class _Quux&Qux&MyMixin extends lib::Qux implements lib::MyMixin /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor •() → lib::_Quux&Qux&MyMixin*
+    synthetic constructor •() → lib::_Quux&Qux&MyMixin
       : super lib::Qux::•()
       ;
-    abstract member-signature method hello(covariant-by-declaration lib::FooEntry* entry) → void; -> lib::Baz::hello
+    abstract member-signature method hello(covariant-by-declaration lib::FooEntry entry) → void; -> lib::Baz::hello
   }
   class Quux extends lib::_Quux&Qux&MyMixin {
-    synthetic constructor •() → lib::Quux*
+    synthetic constructor •() → lib::Quux
       : super lib::_Quux&Qux&MyMixin::•()
       ;
   }
@@ -78,26 +48,16 @@
   import "org-dartlang-test:///lib.dart";
 
   class Test extends main::Test2 {
-    synthetic constructor •() → main::Test*
+    synthetic constructor •() → main::Test
       : super main::Test2::•()
       ;
-    method world() → lib::Quux*
-      return null;
+    method world() → lib::Quux
+      return throw "";
   }
   abstract class Test2 extends dart.core::Object {
-    synthetic constructor •() → main::Test2*
+    synthetic constructor •() → main::Test2
       : super dart.core::Object::•()
       ;
-    abstract method world() → lib::Baz*;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract method world() → lib::Baz;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.2.expect
index 65c8b9e..f0ed98f 100644
--- a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.2.expect
@@ -2,73 +2,43 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class FooEntry extends dart.core::Object {
-    synthetic constructor •() → lib::FooEntry*
+    synthetic constructor •() → lib::FooEntry
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class BarEntry extends lib::FooEntry {
-    synthetic constructor •() → lib::BarEntry*
+    synthetic constructor •() → lib::BarEntry
       : super lib::FooEntry::•()
       ;
   }
   abstract class FooTarget extends dart.core::Object {
-    synthetic constructor •() → lib::FooTarget*
+    synthetic constructor •() → lib::FooTarget
       : super dart.core::Object::•()
       ;
-    abstract method hello(lib::FooEntry* entry) → void;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract method hello(lib::FooEntry entry) → void;
   }
   abstract class Baz extends dart.core::Object implements lib::FooTarget {
-    synthetic constructor •() → lib::Baz*
+    synthetic constructor •() → lib::Baz
       : super dart.core::Object::•()
       ;
-    method hello(covariant-by-declaration lib::FooEntry* entry) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    method hello(covariant-by-declaration lib::FooEntry entry) → void {}
   }
   abstract class MyMixin extends lib::Baz /*isMixinDeclaration*/  {
   }
   abstract class Qux extends lib::Baz {
-    synthetic constructor •() → lib::Qux*
+    synthetic constructor •() → lib::Qux
       : super lib::Baz::•()
       ;
-    method hello(covariant-by-declaration lib::BarEntry* entry) → void {}
+    method hello(covariant-by-declaration lib::BarEntry entry) → void {}
   }
   abstract class _Quux&Qux&MyMixin extends lib::Qux implements lib::MyMixin /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor •() → lib::_Quux&Qux&MyMixin*
+    synthetic constructor •() → lib::_Quux&Qux&MyMixin
       : super lib::Qux::•()
       ;
-    abstract member-signature method hello(covariant-by-declaration lib::FooEntry* entry) → void; -> lib::Baz::hello
+    abstract member-signature method hello(covariant-by-declaration lib::FooEntry entry) → void; -> lib::Baz::hello
   }
   class Quux extends lib::_Quux&Qux&MyMixin {
-    synthetic constructor •() → lib::Quux*
+    synthetic constructor •() → lib::Quux
       : super lib::_Quux&Qux&MyMixin::•()
       ;
   }
@@ -78,27 +48,17 @@
   import "org-dartlang-test:///lib.dart";
 
   class Test extends main::Test2 {
-    synthetic constructor •() → main::Test*
+    synthetic constructor •() → main::Test
       : super main::Test2::•()
       ;
-    method world() → lib::Quux*
-      return null;
+    method world() → lib::Quux
+      return throw "";
   }
   abstract class Test2 extends dart.core::Object {
-    synthetic constructor •() → main::Test2*
+    synthetic constructor •() → main::Test2
       : super dart.core::Object::•()
       ;
-    abstract method world() → lib::Baz*;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract method world() → lib::Baz;
   }
   static method main() → dynamic {
     dart.core::print(new main::Test::•());
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml
index 01cc15f..dd756a9 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml
@@ -9,18 +9,15 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'package:flutter/src/widgets/framework.dart';
         import 'package:flutter/src/widgets/widget_inspector.dart';
 
         class Foo extends Widget {}
       flutter/lib/src/widgets/framework.dart: |
-        // @dart=2.9
         abstract class Bar {}
 
         abstract class Widget extends Bar {}
       flutter/lib/src/widgets/widget_inspector.dart: |
-        // @dart=2.9
         abstract class _HasCreationLocation {
           _Location get _location;
         }
@@ -29,11 +26,11 @@
         /// file locations.
         class _Location {
           const _Location({
-            this.file,
-            this.line,
-            this.column,
-            this.name,
-            this.parameterLocations,
+            required this.file,
+            required this.line,
+            required this.column,
+            required this.name,
+            required this.parameterLocations,
           });
 
           /// File path of the location.
@@ -69,7 +66,6 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
-        // @dart=2.9
         import 'package:flutter/src/widgets/framework.dart';
         import 'package:flutter/src/widgets/widget_inspector.dart';
 
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect
index 1168c24..82bfff9 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect
@@ -2,18 +2,13 @@
 library from "package:flutter/src/widgets/framework.dart" as fra {
 
   abstract class Bar extends dart.core::Object {
-    synthetic constructor •() → fra::Bar*
+    synthetic constructor •() → fra::Bar
       : super dart.core::Object::•()
       ;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation {
-    final field wid::_Location* _location;
-    synthetic constructor •({wid::_Location* $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget*
+    final field wid::_Location? _location /*isLegacy*/;
+    synthetic constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
   }
@@ -21,32 +16,22 @@
 library from "package:flutter/src/widgets/widget_inspector.dart" as wid {
 
   abstract class _HasCreationLocation extends dart.core::Object {
-    synthetic constructor •() → wid::_HasCreationLocation*
+    synthetic constructor •() → wid::_HasCreationLocation
       : super dart.core::Object::•()
       ;
-    abstract get _location() → wid::_Location*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract get _location() → wid::_Location;
   }
   class _Location extends dart.core::Object /*hasConstConstructor*/  {
-    final field dart.core::String* file;
-    final field dart.core::int* line;
-    final field dart.core::int* column;
-    final field dart.core::String* name;
-    final field dart.core::List<wid::_Location*>* parameterLocations;
-    const constructor •({dart.core::String* file = #C1, dart.core::int* line = #C1, dart.core::int* column = #C1, dart.core::String* name = #C1, dart.core::List<wid::_Location*>* parameterLocations = #C1}) → wid::_Location*
+    final field dart.core::String file;
+    final field dart.core::int line;
+    final field dart.core::int column;
+    final field dart.core::String name;
+    final field dart.core::List<wid::_Location> parameterLocations;
+    const constructor •({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
-    static method _#new#tearOff({dart.core::String* file = #C1, dart.core::int* line = #C1, dart.core::int* column = #C1, dart.core::String* name = #C1, dart.core::List<wid::_Location*>* parameterLocations = #C1}) → wid::_Location*
+    static method _#new#tearOff({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -55,17 +40,17 @@
   import "package:flutter/src/widgets/widget_inspector.dart";
 
   class Foo extends fra::Widget {
-    synthetic constructor •({wid::_Location* $creationLocationd_0dea112b090073317d4 = #C1}) → main::Foo*
+    synthetic constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → main::Foo
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
-    static method _#new#tearOff() → main::Foo*
+    static method _#new#tearOff() → main::Foo
       return new main::Foo::•($creationLocationd_0dea112b090073317d4: #C6);
   }
 }
 constants  {
   #C1 = null
   #C2 = "org-dartlang-test:///main.dart"
-  #C3 = 5.0
+  #C3 = 4.0
   #C4 = 7.0
   #C5 = "Foo"
   #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
@@ -74,6 +59,6 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:9:9)
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:8:9)
 - Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
 
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect
index 1168c24..82bfff9 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect
@@ -2,18 +2,13 @@
 library from "package:flutter/src/widgets/framework.dart" as fra {
 
   abstract class Bar extends dart.core::Object {
-    synthetic constructor •() → fra::Bar*
+    synthetic constructor •() → fra::Bar
       : super dart.core::Object::•()
       ;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation {
-    final field wid::_Location* _location;
-    synthetic constructor •({wid::_Location* $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget*
+    final field wid::_Location? _location /*isLegacy*/;
+    synthetic constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
   }
@@ -21,32 +16,22 @@
 library from "package:flutter/src/widgets/widget_inspector.dart" as wid {
 
   abstract class _HasCreationLocation extends dart.core::Object {
-    synthetic constructor •() → wid::_HasCreationLocation*
+    synthetic constructor •() → wid::_HasCreationLocation
       : super dart.core::Object::•()
       ;
-    abstract get _location() → wid::_Location*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract get _location() → wid::_Location;
   }
   class _Location extends dart.core::Object /*hasConstConstructor*/  {
-    final field dart.core::String* file;
-    final field dart.core::int* line;
-    final field dart.core::int* column;
-    final field dart.core::String* name;
-    final field dart.core::List<wid::_Location*>* parameterLocations;
-    const constructor •({dart.core::String* file = #C1, dart.core::int* line = #C1, dart.core::int* column = #C1, dart.core::String* name = #C1, dart.core::List<wid::_Location*>* parameterLocations = #C1}) → wid::_Location*
+    final field dart.core::String file;
+    final field dart.core::int line;
+    final field dart.core::int column;
+    final field dart.core::String name;
+    final field dart.core::List<wid::_Location> parameterLocations;
+    const constructor •({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       : wid::_Location::file = file, wid::_Location::line = line, wid::_Location::column = column, wid::_Location::name = name, wid::_Location::parameterLocations = parameterLocations, super dart.core::Object::•()
       ;
-    static method _#new#tearOff({dart.core::String* file = #C1, dart.core::int* line = #C1, dart.core::int* column = #C1, dart.core::String* name = #C1, dart.core::List<wid::_Location*>* parameterLocations = #C1}) → wid::_Location*
+    static method _#new#tearOff({required dart.core::String file = #C1, required dart.core::int line = #C1, required dart.core::int column = #C1, required dart.core::String name = #C1, required dart.core::List<wid::_Location> parameterLocations = #C1}) → wid::_Location
       return new wid::_Location::•(file: file, line: line, column: column, name: name, parameterLocations: parameterLocations);
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -55,17 +40,17 @@
   import "package:flutter/src/widgets/widget_inspector.dart";
 
   class Foo extends fra::Widget {
-    synthetic constructor •({wid::_Location* $creationLocationd_0dea112b090073317d4 = #C1}) → main::Foo*
+    synthetic constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → main::Foo
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
-    static method _#new#tearOff() → main::Foo*
+    static method _#new#tearOff() → main::Foo
       return new main::Foo::•($creationLocationd_0dea112b090073317d4: #C6);
   }
 }
 constants  {
   #C1 = null
   #C2 = "org-dartlang-test:///main.dart"
-  #C3 = 5.0
+  #C3 = 4.0
   #C4 = 7.0
   #C5 = "Foo"
   #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
@@ -74,6 +59,6 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:9:9)
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:8:9)
 - Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
 
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_1.yaml b/pkg/front_end/testcases/incremental/incremental_serialization_1.yaml
index 3e63911..49d644c 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_1.yaml
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_1.yaml
@@ -10,7 +10,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "dart:core";
         import "package:package2/lib2.dart";
         import "package:package2/lib3.dart";
@@ -19,17 +18,14 @@
           lib3();
         }
       package1/lib1.dart: |
-        // @dart=2.9
         lib1() {
           return 42;
         }
       package2/lib2.dart: |
-        // @dart=2.9
         lib2() {
           return 42;
         }
       package2/lib3.dart: |
-        // @dart=2.9
         import "package:package1/lib1.dart";
         lib3() {
           return lib1();
@@ -57,7 +53,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:package1/lib1.dart";
         main() {
           lib1();
@@ -75,7 +70,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:package2/lib2.dart";
         main() {
           lib2();
@@ -91,13 +85,11 @@
       - package:package1/lib1.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:package2/lib2.dart";
         main() {
           lib2();
         }
       package1/lib1.dart: |
-        // @dart=2.9
         lib1_1() {
           return 42;
         }
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_2.yaml b/pkg/front_end/testcases/incremental/incremental_serialization_2.yaml
index 15fb17a..9bb763c 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_2.yaml
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_2.yaml
@@ -11,7 +11,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:package1/lib1.dart";
         import "package:package1/lib2.dart";
         import "package:package1/lib3.dart";
@@ -21,17 +20,14 @@
           lib3();
         }
       package1/lib1.dart: |
-        // @dart=2.9
         lib1() {
           return 42;
         }
       package1/lib2.dart: |
-        // @dart=2.9
         lib2() {
           return 42;
         }
       package1/lib3.dart: |
-        // @dart=2.9
         import "package:package1/lib1.dart";
         lib3() {
           return lib1();
@@ -55,7 +51,6 @@
       - package:package1/lib3.dart
     sources:
       package1/lib3.dart: |
-        // @dart=2.9
         import "package:package1/lib1.dart";
         lib3() {
           return lib3_1();
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml b/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml
index e3664d7..1863ef8 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml
@@ -13,36 +13,31 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "dart:core";
         import "package:package1/lib1_a.dart";
         main() {
           lib1();
         }
       package1/lib1_a.dart: |
-        // @dart=2.9
         import "package:package3/lib3.dart" as lib3;
         export "lib1_b.dart";
         lib1a() {
           lib3.lib3();
         }
       package1/lib1_b.dart: |
-        // @dart=2.9
         import "package:package2/lib2.dart" as lib2;
         lib1() {
           return la(null);
         }
-        la(lib2.Foo f) {
+        la(lib2.Foo? f) {
           return 42;
         }
       package2/lib2.dart: |
-        // @dart=2.9
         int f = 42;
         class Foo {
           static int y = 42;
         }
       package3/lib3.dart: |
-        // @dart=2.9
         lib3() {
           print("lib3");
         }
@@ -70,36 +65,31 @@
     expectInitializeFromDill: true
     sources:
       main.dart: |
-        // @dart=2.9
         import "dart:core";
         import "package:package1/lib1_a.dart";
         main() {
           lib1();
         }
       package1/lib1_a.dart: |
-        // @dart=2.9
         import "package:package3/lib3.dart" as lib3;
         export "lib1_b.dart";
         lib1a() {
           lib3.lib3();
         }
       package1/lib1_b.dart: |
-        // @dart=2.9
         import "package:package2/lib2.dart" as lib2;
         lib1() {
           return la(null);
         }
-        la(lib2.Foo f) {
+        la(lib2.Foo? f) {
           return 42;
         }
       package2/lib2.dart: |
-        // @dart=2.9
         int f = 42;
         class Foo {
           static int y = 42;
         }
       package3/lib3.dart: |
-        // @dart=2.9
         lib3() {
           print("lib3");
         }
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml.world.1.expect
index 6aaedcc..8f81a48 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml.world.1.expect
@@ -26,29 +26,19 @@
   static method lib1() → dynamic {
     return lib::la(null);
   }
-  static method la(lib22::Foo* f) → dynamic {
+  static method la(lib22::Foo? f) → dynamic {
     return 42;
   }
 }
 library from "package:package2/lib2.dart" as lib22 {
 
   class Foo extends dart.core::Object {
-    static field dart.core::int* y = 42;
-    synthetic constructor •() → lib22::Foo*
+    static field dart.core::int y = 42;
+    synthetic constructor •() → lib22::Foo
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static field dart.core::int* f = 42;
+  static field dart.core::int f = 42;
 }
 library from "package:package3/lib3.dart" as lib3 {
 
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml.world.2.expect b/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml.world.2.expect
index 6aaedcc..8f81a48 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml.world.2.expect
@@ -26,29 +26,19 @@
   static method lib1() → dynamic {
     return lib::la(null);
   }
-  static method la(lib22::Foo* f) → dynamic {
+  static method la(lib22::Foo? f) → dynamic {
     return 42;
   }
 }
 library from "package:package2/lib2.dart" as lib22 {
 
   class Foo extends dart.core::Object {
-    static field dart.core::int* y = 42;
-    synthetic constructor •() → lib22::Foo*
+    static field dart.core::int y = 42;
+    synthetic constructor •() → lib22::Foo
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static field dart.core::int* f = 42;
+  static field dart.core::int f = 42;
 }
 library from "package:package3/lib3.dart" as lib3 {
 
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_4.yaml b/pkg/front_end/testcases/incremental/incremental_serialization_4.yaml
index 144fc2c..108d755 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_4.yaml
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_4.yaml
@@ -13,7 +13,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:package1/p1.dart";
         import "package:package2/p2.dart";
         main() {
@@ -21,7 +20,6 @@
           p2();
         }
       package1/p1.dart: |
-        // @dart=2.9
         p1() {
           print("Package 1");
           p1_v1_Only();
@@ -30,7 +28,6 @@
           print("Package 1 v1 only!");
         }
       package1v2/p1.dart: |
-        // @dart=2.9
         p1() {
           print("Package 1 v2");
           p1_v2_Only();
@@ -39,7 +36,6 @@
           print("Package 1 v2 only!");
         }
       package2/p2.dart: |
-        // @dart=2.9
         import "package:package1/p1.dart";
         p2() {
           p1();
@@ -65,7 +61,6 @@
     expectInitializeFromDill: false # .packages changed
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:package1/p1.dart";
         import "package:package2/p2.dart";
         main() {
@@ -73,7 +68,6 @@
           p2();
         }
       package1/p1.dart: |
-        // @dart=2.9
         p1() {
           print("Package 1");
           p1_v1_Only();
@@ -82,7 +76,6 @@
           print("Package 1 v1 only!");
         }
       package1v2/p1.dart: |
-        // @dart=2.9
         p1() {
           print("Package 1 v2");
           p1_v2_Only();
@@ -91,7 +84,6 @@
           print("Package 1 v2 only!");
         }
       package2/p2.dart: |
-        // @dart=2.9
         import "package:package1/p1.dart";
         p2() {
           p1();
diff --git a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml
index f2414e8..2efee99 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml
+++ b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml
@@ -13,14 +13,12 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "foo.dart";
         main() {
           Foo foo = new Foo();
           foo.foo();
         }
       foo.dart: |
-        // @dart=2.9
         class Foo {
           foo() {
             print("Foo!");
@@ -32,12 +30,10 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           print("hello from main");
         }
       foo.dart: |
-        // @dart=2.9
         class Foo {
           foo() {
             print("Foo!");
@@ -51,7 +47,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "foo.dart";
         main() {
           Foo foo = new Foo();
diff --git a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.1.expect b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.1.expect
index 5296948..ea64df1 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.1.expect
@@ -2,22 +2,12 @@
 library from "org-dartlang-test:///foo.dart" as foo {
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → foo::Foo*
+    synthetic constructor •() → foo::Foo
       : super dart.core::Object::•()
       ;
     method foo() → dynamic {
       dart.core::print("Foo!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -25,7 +15,7 @@
   import "org-dartlang-test:///foo.dart";
 
   static method main() → dynamic {
-    foo::Foo* foo = new foo::Foo::•();
-    foo.{foo::Foo::foo}(){() →* dynamic};
+    foo::Foo foo = new foo::Foo::•();
+    foo.{foo::Foo::foo}(){() → dynamic};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.3.expect b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.3.expect
index 5296948..ea64df1 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.3.expect
@@ -2,22 +2,12 @@
 library from "org-dartlang-test:///foo.dart" as foo {
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → foo::Foo*
+    synthetic constructor •() → foo::Foo
       : super dart.core::Object::•()
       ;
     method foo() → dynamic {
       dart.core::print("Foo!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -25,7 +15,7 @@
   import "org-dartlang-test:///foo.dart";
 
   static method main() → dynamic {
-    foo::Foo* foo = new foo::Foo::•();
-    foo.{foo::Foo::foo}(){() →* dynamic};
+    foo::Foo foo = new foo::Foo::•();
+    foo.{foo::Foo::foo}(){() → dynamic};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml
index dd9cc98..330c4fc 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml
+++ b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml
@@ -14,14 +14,12 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:mypackage/foo.dart";
         main() {
           Foo foo = new Foo();
           foo.foo();
         }
       mypackage/foo.dart: |
-        // @dart=2.9
         class Foo {
           foo() {
             print("Foo!");
@@ -43,12 +41,10 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           print("hello from main");
         }
       mypackage/foo.dart: |
-        // @dart=2.9
         class Foo {
           foo() {
             print("Foo!");
@@ -72,7 +68,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:mypackage/foo.dart";
         main() {
           Foo foo = new Foo();
diff --git a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.1.expect b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.1.expect
index 7f55824..5731142 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.1.expect
@@ -4,28 +4,18 @@
   import "package:mypackage/foo.dart";
 
   static method main() → dynamic {
-    foo::Foo* foo = new foo::Foo::•();
-    foo.{foo::Foo::foo}(){() →* dynamic};
+    foo::Foo foo = new foo::Foo::•();
+    foo.{foo::Foo::foo}(){() → dynamic};
   }
 }
 library from "package:mypackage/foo.dart" as foo {
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → foo::Foo*
+    synthetic constructor •() → foo::Foo
       : super dart.core::Object::•()
       ;
     method foo() → dynamic {
       dart.core::print("Foo!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.3.expect b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.3.expect
index 7f55824..5731142 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.3.expect
@@ -4,28 +4,18 @@
   import "package:mypackage/foo.dart";
 
   static method main() → dynamic {
-    foo::Foo* foo = new foo::Foo::•();
-    foo.{foo::Foo::foo}(){() →* dynamic};
+    foo::Foo foo = new foo::Foo::•();
+    foo.{foo::Foo::foo}(){() → dynamic};
   }
 }
 library from "package:mypackage/foo.dart" as foo {
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → foo::Foo*
+    synthetic constructor •() → foo::Foo
       : super dart.core::Object::•()
       ;
     method foo() → dynamic {
       dart.core::print("Foo!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/initializer_not_copied.yaml b/pkg/front_end/testcases/incremental/initializer_not_copied.yaml
index f6b8c6b..7146c86 100644
--- a/pkg/front_end/testcases/incremental/initializer_not_copied.yaml
+++ b/pkg/front_end/testcases/incremental/initializer_not_copied.yaml
@@ -12,7 +12,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class C extends C3 implements C4 {
           void noSuchMethod(Invocation invocation) {
diff --git a/pkg/front_end/testcases/incremental/initializer_not_copied.yaml.world.1.expect b/pkg/front_end/testcases/incremental/initializer_not_copied.yaml.world.1.expect
index dc9903b..7b0a7bc 100644
--- a/pkg/front_end/testcases/incremental/initializer_not_copied.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/initializer_not_copied.yaml.world.1.expect
@@ -31,27 +31,18 @@
   import "org-dartlang-test:///lib.dart";
 
   class C extends lib::C3 implements lib::C4 {
-    synthetic constructor •() → main::C*
+    synthetic constructor •() → main::C
       : super lib::C3::•()
       ;
-    method noSuchMethod(dart.core::Invocation* invocation) → void {
-      dart.core::print(invocation.{dart.core::Invocation::positionalArguments}{dart.core::List<dynamic>*});
+    method noSuchMethod(dart.core::Invocation invocation) → void {
+      dart.core::print(invocation.{dart.core::Invocation::positionalArguments}{dart.core::List<dynamic>});
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    no-such-method-forwarder method m([covariant-by-declaration dart.core::String* a]) → dynamic
-      return this.{main::C::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C3, 0, #C4, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(a)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C5))){(dart.core::Invocation*) →* void} as{TypeError,ForDynamic} dynamic;
+    no-such-method-forwarder method m([covariant-by-declaration dart.core::String a]) → dynamic
+      return this.{main::C::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C3, 0, #C4, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(a)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C5))){(dart.core::Invocation) → void} as{TypeError,ForDynamic,ForNonNullableByDefault} dynamic;
   }
   static method main() → dynamic {
-    main::C* c = new main::C::•();
-    c.{main::C::m}(){([dart.core::String*]) →* dynamic};
+    main::C c = new main::C::•();
+    c.{main::C::m}(){([dart.core::String]) → dynamic};
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/initializer_not_copied.yaml.world.2.expect b/pkg/front_end/testcases/incremental/initializer_not_copied.yaml.world.2.expect
index 60cba58..a68df11 100644
--- a/pkg/front_end/testcases/incremental/initializer_not_copied.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/initializer_not_copied.yaml.world.2.expect
@@ -31,27 +31,18 @@
   import "org-dartlang-test:///lib.dart";
 
   class C extends lib::C3 implements lib::C4 {
-    synthetic constructor •() → main::C*
+    synthetic constructor •() → main::C
       : super lib::C3::•()
       ;
-    method noSuchMethod(dart.core::Invocation* invocation) → void {
-      dart.core::print(invocation.{dart.core::Invocation::positionalArguments}{dart.core::List<dynamic>*});
+    method noSuchMethod(dart.core::Invocation invocation) → void {
+      dart.core::print(invocation.{dart.core::Invocation::positionalArguments}{dart.core::List<dynamic>});
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    no-such-method-forwarder method m([covariant-by-declaration dart.core::String* a = #C1]) → dynamic
-      return this.{main::C::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C3, 0, #C4, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(a)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C5))){(dart.core::Invocation*) →* void} as{TypeError,ForDynamic} dynamic;
+    no-such-method-forwarder method m([covariant-by-declaration dart.core::String a = #C1]) → dynamic
+      return this.{main::C::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C3, 0, #C4, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(a)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C5))){(dart.core::Invocation) → void} as{TypeError,ForDynamic,ForNonNullableByDefault} dynamic;
   }
   static method main() → dynamic {
-    main::C* c = new main::C::•();
-    c.{main::C::m}(){([dart.core::String*]) →* dynamic};
+    main::C c = new main::C::•();
+    c.{main::C::m}(){([dart.core::String]) → dynamic};
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml b/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml
index fd9154f..2620942c 100644
--- a/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml
+++ b/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml
@@ -9,7 +9,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         // The space makes the scheme invalid -- this causes Uri.parse to throw.
         part ' package:foo/bar.dart';
     expectedLibraryCount: 1
@@ -22,7 +21,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {}
     expectInitializeFromDill: false
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml.world.1.expect b/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml.world.1.expect
index 2b1004b..8763205 100644
--- a/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml.world.1.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:6: Error: Expected a URI.
+// org-dartlang-test:///main.dart:2:6: Error: Expected a URI.
 // part ' package:foo/bar.dart';
 //      ^
 //
@@ -13,7 +13,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:7: Error: Couldn't parse URI ' package:foo/bar.dart':
+// org-dartlang-test:///main.dart:2:7: Error: Couldn't parse URI ' package:foo/bar.dart':
 //   Scheme not starting with alphabetic character.
 // part ' package:foo/bar.dart';
 //       ^
diff --git a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml
index 0ee68fc..a77a588 100644
--- a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml
+++ b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml
@@ -8,7 +8,6 @@
     errors: true
     sources:
       main.dart: |
-        // @dart=2.9
         part '$foo';
         main() {}
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.1.expect b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.1.expect
index 1184909..144eef3 100644
--- a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.1.expect
@@ -1,9 +1,9 @@
 main = main::main;
-library from "org-dartlang-malformed-uri:bad18" as bad {
+library from "org-dartlang-malformed-uri:bad5" as bad5 {
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Expected a URI.
+// org-dartlang-test:///main.dart:1:6: Error: Expected a URI.
 // part '$foo';
 //      ^
 //
@@ -13,11 +13,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:7: Error: Can't use string interpolation in a URI.
+// org-dartlang-test:///main.dart:1:7: Error: Can't use string interpolation in a URI.
 // part '$foo';
 //       ^
 //
 
-  part org-dartlang-malformed-uri:bad18;
+  part org-dartlang-malformed-uri:bad5;
   static method main() → dynamic {}
 }
diff --git a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.2.expect b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.2.expect
index 1184909..144eef3 100644
--- a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.2.expect
@@ -1,9 +1,9 @@
 main = main::main;
-library from "org-dartlang-malformed-uri:bad18" as bad {
+library from "org-dartlang-malformed-uri:bad5" as bad5 {
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Expected a URI.
+// org-dartlang-test:///main.dart:1:6: Error: Expected a URI.
 // part '$foo';
 //      ^
 //
@@ -13,11 +13,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:7: Error: Can't use string interpolation in a URI.
+// org-dartlang-test:///main.dart:1:7: Error: Can't use string interpolation in a URI.
 // part '$foo';
 //       ^
 //
 
-  part org-dartlang-malformed-uri:bad18;
+  part org-dartlang-malformed-uri:bad5;
   static method main() → dynamic {}
 }
diff --git a/pkg/front_end/testcases/incremental/invalidate_export_of_main.yaml b/pkg/front_end/testcases/incremental/invalidate_export_of_main.yaml
index eee5b6c..768fd3c 100644
--- a/pkg/front_end/testcases/incremental/invalidate_export_of_main.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_export_of_main.yaml
@@ -10,8 +10,6 @@
   - a.dart
 sources:
   a.dart: |
-    // @dart=2.9
     export 'b.dart';
   b.dart: |
-    // @dart=2.9
     main() { print("hello"); }
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part.yaml
index 224d615..3932e94 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part.yaml
@@ -10,14 +10,12 @@
   - entry: "package:example/main.dart"
     sources:
       pkg/example/main.dart: |
-        // @dart=2.9
         part "b.dart";
         main() {
           print("hello");
           b();
         }
       pkg/example/b.dart: |
-        // @dart=2.9
         part of "main.dart";
         b() {
           print("b1");
@@ -40,14 +38,12 @@
       - "package:example/b.dart"
     sources:
       pkg/example/main.dart: |
-        // @dart=2.9
         part "b.dart";
         main() {
           print("hello");
           b();
         }
       pkg/example/b.dart: |
-        // @dart=2.9
         part of "main.dart";
         b() {
           print("b2");
@@ -70,14 +66,12 @@
       - "package:example/b.dart"
     sources:
       pkg/example/main.dart: |
-        // @dart=2.9
         part "b.dart";
         main() {
           print("hello");
           b();
         }
       pkg/example/b.dart: |
-        // @dart=2.9
         part of "main.dart";
         b() {
           print("b3");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_2.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_2.yaml
index c8635e8..ca20741 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_2.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_2.yaml
@@ -9,14 +9,12 @@
   - entry: "package:example/main.dart"
     sources:
       pkg/example/main.dart: |
-        // @dart=2.9
         part "b.dart";
         main() {
           print("hello");
           b();
         }
       pkg/example/b.dart: |
-        // @dart=2.9
         part of "main.dart";
         b() {
           print("b1");
@@ -41,7 +39,6 @@
       - "package:example/b.dart"
     sources:
       pkg/example/b.dart: |
-        // @dart=2.9
         part of "main.dart";
         b() {
           print("b2");
@@ -66,7 +63,6 @@
       - "package:example/b.dart"
     sources:
       pkg/example/b.dart: |
-        // @dart=2.9
         part of "main.dart";
         b() {
           print("b3");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_as_file.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_as_file.yaml
index b6fc99f..046ced9 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_as_file.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_as_file.yaml
@@ -10,14 +10,12 @@
   - pkg/example/b.dart
 sources:
   pkg/example/main.dart: |
-    // @dart=2.9
     part "b.dart";
     main() {
       print("hello");
       b();
     }
   pkg/example/b.dart: |
-    // @dart=2.9
     part of "main.dart";
     b() {
       print("b1");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_as_package.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_as_package.yaml
index 6519fd4..e96a3ed 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_as_package.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_as_package.yaml
@@ -10,14 +10,12 @@
   - "package:example/b.dart"
 sources:
   pkg/example/main.dart: |
-    // @dart=2.9
     part "b.dart";
     main() {
       print("hello");
       b();
     }
   pkg/example/b.dart: |
-    // @dart=2.9
     part of "main.dart";
     b() {
       print("b1");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_file.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_file.yaml
index 17c374a..4df5b5a 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_file.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_file.yaml
@@ -11,14 +11,12 @@
   - pkg/example/b.dart
 sources:
   pkg/example/main.dart: |
-    // @dart=2.9
     part "package:example/b.dart";
     main() {
       print("hello");
       b();
     }
   pkg/example/b.dart: |
-    // @dart=2.9
     part of "package:example/main.dart";
     b() {
       print("b1");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_package.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_package.yaml
index d79692e..ef23401 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_package.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_package.yaml
@@ -11,14 +11,12 @@
   - "package:example/b.dart"
 sources:
   pkg/example/main.dart: |
-    // @dart=2.9
     part "package:example/b.dart";
     main() {
       print("hello");
       b();
     }
   pkg/example/b.dart: |
-    // @dart=2.9
     part of "package:example/main.dart";
     b() {
       print("b1");
diff --git a/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml b/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml
index ec752c6..2313785 100644
--- a/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml
+++ b/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml
@@ -15,19 +15,16 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
         main() {
           print("hello");
           b();
         }
       b.dart: |
-        // @dart=2.9
         b() {
           print("hello from b");
         }
       c.dart: |
-        // @dart=2.9
         c() {
           print("hello from c");
         }
@@ -41,7 +38,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
         import "nonexisting.dart";
         main() {
@@ -49,7 +45,6 @@
           b();
         }
       b.dart: |
-        // @dart=2.9
         import "c.dart";
         b() {
           print("hello from b");
@@ -65,7 +60,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
         main() {
           print("hello");
diff --git a/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml.world.2.expect b/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml.world.2.expect
index 00a49d0..8f72034 100644
--- a/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml.world.2.expect
@@ -28,7 +28,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/issue_32366.yaml b/pkg/front_end/testcases/incremental/issue_32366.yaml
index 595813f..c049a7d 100644
--- a/pkg/front_end/testcases/incremental/issue_32366.yaml
+++ b/pkg/front_end/testcases/incremental/issue_32366.yaml
@@ -8,7 +8,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         abstract class AIterator extends Iterator {
         }
         class Foo {
@@ -26,7 +25,6 @@
     errors: true
     sources:
       main.dart: |
-        // @dart=2.9
         abstract class BIterator extends Iterator {
         }
         class Foo {
diff --git a/pkg/front_end/testcases/incremental/issue_32366.yaml.world.1.expect b/pkg/front_end/testcases/incremental/issue_32366.yaml.world.1.expect
index 3cb283a..bc95a7c 100644
--- a/pkg/front_end/testcases/incremental/issue_32366.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/issue_32366.yaml.world.1.expect
@@ -2,36 +2,15 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   abstract class AIterator extends dart.core::Iterator<dynamic> {
-    synthetic constructor •() → main::AIterator*
+    synthetic constructor •() → main::AIterator
       : super dart.core::Iterator::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    abstract member-signature method moveNext() → dart.core::bool*; -> dart.core::Iterator::moveNext
   }
   class Foo extends dart.core::Object {
     final field dynamic a;
-    constructor •(dynamic a) → main::Foo*
+    constructor •(dynamic a) → main::Foo
       : main::Foo::a = a, super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic {
     new main::Foo::•(5);
diff --git a/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect b/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect
index 65cc6dc..84dceba 100644
--- a/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect
@@ -3,65 +3,44 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:5:11: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:4:11: Error: Expected ';' after this.
 //   final a kjsdf ksjdf ;
 //           ^^^^^
 //
-// org-dartlang-test:///main.dart:5:11: Error: Final field 'kjsdf' is not initialized.
+// org-dartlang-test:///main.dart:4:11: Error: Final field 'kjsdf' is not initialized.
 // Try to initialize the field in the declaration or in every constructor.
 //   final a kjsdf ksjdf ;
 //           ^^^^^
 //
-// org-dartlang-test:///main.dart:5:17: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///main.dart:4:17: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 // Try adding the name of the type of the variable or the keyword 'var'.
 //   final a kjsdf ksjdf ;
 //                 ^^^^^
 //
-// org-dartlang-test:///main.dart:5:9: Error: 'a' isn't a type.
+// org-dartlang-test:///main.dart:4:9: Error: 'a' isn't a type.
 //   final a kjsdf ksjdf ;
 //         ^
 //
-// org-dartlang-test:///main.dart:5:9: Error: Type 'a' not found.
+// org-dartlang-test:///main.dart:4:9: Error: Type 'a' not found.
 //   final a kjsdf ksjdf ;
 //         ^
 //
-// org-dartlang-test:///main.dart:6:12: Error: 'a' isn't an instance field of this class.
+// org-dartlang-test:///main.dart:5:12: Error: 'a' isn't an instance field of this class.
 //   Foo(this.a);
 //            ^
 //
 
   abstract class BIterator extends dart.core::Iterator<dynamic> {
-    synthetic constructor •() → main::BIterator*
+    synthetic constructor •() → main::BIterator
       : super dart.core::Iterator::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    abstract member-signature method moveNext() → dart.core::bool*; -> dart.core::Iterator::moveNext
   }
   class Foo extends dart.core::Object {
     final field invalid-type kjsdf = null;
     field dynamic ksjdf = null;
-    constructor •(dynamic a) → main::Foo*
-      : final dynamic #t1 = invalid-expression "org-dartlang-test:///main.dart:6:12: Error: 'a' isn't an instance field of this class.\n  Foo(this.a);\n           ^"
+    constructor •(dynamic a) → main::Foo
+      : final dynamic #t1 = invalid-expression "org-dartlang-test:///main.dart:5:12: Error: 'a' isn't an instance field of this class.\n  Foo(this.a);\n           ^"
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic {
     new main::Foo::•(5);
diff --git a/pkg/front_end/testcases/incremental/issue_41976.yaml b/pkg/front_end/testcases/incremental/issue_41976.yaml
index ed856be..d8e31e8 100644
--- a/pkg/front_end/testcases/incremental/issue_41976.yaml
+++ b/pkg/front_end/testcases/incremental/issue_41976.yaml
@@ -9,7 +9,6 @@
   - entry: foo.dart
     sources:
       foo.dart: |
-        // @dart=2.9
         abstract class Key {
           const factory Key(String value) = ValueKey;
           const Key.empty();
diff --git a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
index 20a26f1..bf30834 100644
--- a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
@@ -2,46 +2,26 @@
 library from "org-dartlang-test:///foo.dart" as foo {
 
   abstract class Key extends dart.core::Object /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[#C1];
-    const constructor empty() → foo::Key*
+    static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+    const constructor empty() → foo::Key
       : super dart.core::Object::•()
       ;
-    static factory •(dart.core::String* value) → foo::Key*
+    static factory •(dart.core::String value) → foo::Key
       return new foo::ValueKey::•(value);
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class LocalKey extends foo::Key /*hasConstConstructor*/  {
-    const constructor •() → foo::LocalKey*
+    const constructor •() → foo::LocalKey
       : super foo::Key::empty()
       ;
   }
   class ValueKey extends dart.core::Object implements foo::LocalKey /*hasConstConstructor*/  {
-    final field dart.core::String* value;
-    const constructor •(dart.core::String* value) → foo::ValueKey*
+    final field dart.core::String value;
+    const constructor •(dart.core::String value) → foo::ValueKey
       : foo::ValueKey::value = value, super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → void {
-    foo::Key* k = new foo::ValueKey::•("t");
+    foo::Key k = new foo::ValueKey::•("t");
     dart.core::print("${k}");
   }
 }
diff --git a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expression.2.expect b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expression.2.expect
index caf27dd..d88fafa 100644
--- a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expression.2.expect
+++ b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expression.2.expect
@@ -1,5 +1,5 @@
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return (() → dart.core::int* {
-    #lib1::Key* x = new #lib1::ValueKey::•("t");
-    return x.{#lib1::Key::hashCode}{dart.core::int*};
-  })(){() →* dart.core::int*};
+  return (() → dart.core::int {
+    #lib1::Key x = new #lib1::ValueKey::•("t");
+    return x.{dart.core::Object::hashCode}{dart.core::int};
+  })(){() → dart.core::int};
diff --git a/pkg/front_end/testcases/incremental/issue_44523.yaml b/pkg/front_end/testcases/incremental/issue_44523.yaml
index d7d4906..63f5ae4 100644
--- a/pkg/front_end/testcases/incremental/issue_44523.yaml
+++ b/pkg/front_end/testcases/incremental/issue_44523.yaml
@@ -21,7 +21,6 @@
           ]
         }
       app/main.dart: |
-        // @dart=2.9
         import "package:flutter/lib1.dart";
         class _Bar extends RestorableProperty {}
       flutter/lib1.dart: |
diff --git a/pkg/front_end/testcases/incremental/issue_44523.yaml.world.1.expect b/pkg/front_end/testcases/incremental/issue_44523.yaml.world.1.expect
index fab130fd..e7d2aad 100644
--- a/pkg/front_end/testcases/incremental/issue_44523.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/issue_44523.yaml.world.1.expect
@@ -4,21 +4,9 @@
   import "package:flutter/lib1.dart";
 
   class _Bar extends lib1::RestorableProperty {
-    synthetic constructor •() → main::_Bar*
+    synthetic constructor •() → main::_Bar
       : super lib1::RestorableProperty::•()
       ;
-    abstract member-signature method _debugAssertNotDisposed() → dart.core::bool*; -> lib1::RestorableProperty::_debugAssertNotDisposed
-    abstract member-signature method _debugAssertNotDisposed() → dart.core::bool*; -> lib2::ChangeNotifier::_debugAssertNotDisposed
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "package:flutter/lib1.dart" as lib1 {
diff --git a/pkg/front_end/testcases/incremental/issue_44523.yaml.world.2.expect b/pkg/front_end/testcases/incremental/issue_44523.yaml.world.2.expect
index fab130fd..e7d2aad 100644
--- a/pkg/front_end/testcases/incremental/issue_44523.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/issue_44523.yaml.world.2.expect
@@ -4,21 +4,9 @@
   import "package:flutter/lib1.dart";
 
   class _Bar extends lib1::RestorableProperty {
-    synthetic constructor •() → main::_Bar*
+    synthetic constructor •() → main::_Bar
       : super lib1::RestorableProperty::•()
       ;
-    abstract member-signature method _debugAssertNotDisposed() → dart.core::bool*; -> lib1::RestorableProperty::_debugAssertNotDisposed
-    abstract member-signature method _debugAssertNotDisposed() → dart.core::bool*; -> lib2::ChangeNotifier::_debugAssertNotDisposed
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "package:flutter/lib1.dart" as lib1 {
diff --git a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml
index c2c104f..6b88d9a 100644
--- a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml
+++ b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml
@@ -17,14 +17,12 @@
     warnings: false
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
 
         main() {
           useString("hello");
         }
       b.dart: |
-        // @dart=2.9
         import "dart:core";
 
         void useString(String s) {
@@ -41,14 +39,12 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
 
         main() {
           useString("hello");
         }
       b.dart: |
-        // @dart=2.9
         import "dart:core";
 
         void useString(String s) {
diff --git a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.1.expect b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.1.expect
index 2360766..ab378a3 100644
--- a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.1.expect
@@ -3,7 +3,7 @@
 
   import "dart:core";
 
-  static method useString(dart.core::String* s) → void {
+  static method useString(dart.core::String s) → void {
     dart.core::print("Hello from useString: ${s}");
   }
 }
diff --git a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.2.expect b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.2.expect
index 2360766..ab378a3 100644
--- a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.2.expect
@@ -3,7 +3,7 @@
 
   import "dart:core";
 
-  static method useString(dart.core::String* s) → void {
+  static method useString(dart.core::String s) → void {
     dart.core::print("Hello from useString: ${s}");
   }
 }
diff --git a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml
index ac99df2..81b1aa1 100644
--- a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml
+++ b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml
@@ -9,7 +9,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main_lib1.dart: |
-        // @dart=2.9
         class SuperClass {
           void method(covariant int i) {}
         }
@@ -20,14 +19,12 @@
 
         class Class extends SuperClass with Mixin {}
       main_lib2.dart: |
-        // @dart=2.9
         import 'main_lib1.dart';
 
         class SubClass extends Class {}
 
         method() => new SubClass().method(0);
       main.dart: |
-        // @dart=2.9
         import 'main_lib2.dart';
 
         main() {
@@ -42,7 +39,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'main_lib2.dart';
 
         main() {
@@ -59,7 +55,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'main_lib2.dart';
 
         main() {
diff --git a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.1.expect b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.1.expect
index c0afa98..ac9787d 100644
--- a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.1.expect
@@ -10,46 +10,26 @@
 library from "org-dartlang-test:///main_lib1.dart" as mai2 {
 
   class SuperClass extends dart.core::Object {
-    synthetic constructor •() → mai2::SuperClass*
+    synthetic constructor •() → mai2::SuperClass
       : super dart.core::Object::•()
       ;
-    method method(covariant-by-declaration dart.core::int* i) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    method method(covariant-by-declaration dart.core::int i) → void {}
   }
   class Mixin extends dart.core::Object {
-    synthetic constructor •() → mai2::Mixin*
+    synthetic constructor •() → mai2::Mixin
       : super dart.core::Object::•()
       ;
-    method method(dart.core::num* i) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    method method(dart.core::num i) → void {}
   }
   abstract class _Class&SuperClass&Mixin = mai2::SuperClass with mai2::Mixin /*isAnonymousMixin*/  {
-    synthetic constructor •() → mai2::_Class&SuperClass&Mixin*
+    synthetic constructor •() → mai2::_Class&SuperClass&Mixin
       : super mai2::SuperClass::•()
       ;
-    forwarding-stub method method(covariant-by-declaration dart.core::num* i) → void
+    forwarding-stub method method(covariant-by-declaration dart.core::num i) → void
       return super.{mai2::Mixin::method}(i);
   }
   class Class extends mai2::_Class&SuperClass&Mixin {
-    synthetic constructor •() → mai2::Class*
+    synthetic constructor •() → mai2::Class
       : super mai2::_Class&SuperClass&Mixin::•()
       ;
   }
@@ -59,10 +39,10 @@
   import "org-dartlang-test:///main_lib1.dart";
 
   class SubClass extends mai2::Class {
-    synthetic constructor •() → mai::SubClass*
+    synthetic constructor •() → mai::SubClass
       : super mai2::Class::•()
       ;
   }
   static method method() → dynamic
-    return new mai::SubClass::•().{mai2::_Class&SuperClass&Mixin::method}(0){(dart.core::num*) →* void};
+    return new mai::SubClass::•().{mai2::_Class&SuperClass&Mixin::method}(0){(dart.core::num) → void};
 }
diff --git a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.2.expect b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.2.expect
index 533b853..a1687b3 100644
--- a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.2.expect
@@ -11,46 +11,26 @@
 library from "org-dartlang-test:///main_lib1.dart" as mai2 {
 
   class SuperClass extends dart.core::Object {
-    synthetic constructor •() → mai2::SuperClass*
+    synthetic constructor •() → mai2::SuperClass
       : super dart.core::Object::•()
       ;
-    method method(covariant-by-declaration dart.core::int* i) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    method method(covariant-by-declaration dart.core::int i) → void {}
   }
   class Mixin extends dart.core::Object {
-    synthetic constructor •() → mai2::Mixin*
+    synthetic constructor •() → mai2::Mixin
       : super dart.core::Object::•()
       ;
-    method method(dart.core::num* i) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    method method(dart.core::num i) → void {}
   }
   abstract class _Class&SuperClass&Mixin = mai2::SuperClass with mai2::Mixin /*isAnonymousMixin*/  {
-    synthetic constructor •() → mai2::_Class&SuperClass&Mixin*
+    synthetic constructor •() → mai2::_Class&SuperClass&Mixin
       : super mai2::SuperClass::•()
       ;
-    forwarding-stub method method(covariant-by-declaration dart.core::num* i) → void
+    forwarding-stub method method(covariant-by-declaration dart.core::num i) → void
       return super.{mai2::Mixin::method}(i);
   }
   class Class extends mai2::_Class&SuperClass&Mixin {
-    synthetic constructor •() → mai2::Class*
+    synthetic constructor •() → mai2::Class
       : super mai2::_Class&SuperClass&Mixin::•()
       ;
   }
@@ -60,10 +40,10 @@
   import "org-dartlang-test:///main_lib1.dart";
 
   class SubClass extends mai2::Class {
-    synthetic constructor •() → mai::SubClass*
+    synthetic constructor •() → mai::SubClass
       : super mai2::Class::•()
       ;
   }
   static method method() → dynamic
-    return new mai::SubClass::•().{mai2::_Class&SuperClass&Mixin::method}(0){(dart.core::num*) →* void};
+    return new mai::SubClass::•().{mai2::_Class&SuperClass&Mixin::method}(0){(dart.core::num) → void};
 }
diff --git a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.3.expect b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.3.expect
index c0afa98..ac9787d 100644
--- a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.3.expect
@@ -10,46 +10,26 @@
 library from "org-dartlang-test:///main_lib1.dart" as mai2 {
 
   class SuperClass extends dart.core::Object {
-    synthetic constructor •() → mai2::SuperClass*
+    synthetic constructor •() → mai2::SuperClass
       : super dart.core::Object::•()
       ;
-    method method(covariant-by-declaration dart.core::int* i) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    method method(covariant-by-declaration dart.core::int i) → void {}
   }
   class Mixin extends dart.core::Object {
-    synthetic constructor •() → mai2::Mixin*
+    synthetic constructor •() → mai2::Mixin
       : super dart.core::Object::•()
       ;
-    method method(dart.core::num* i) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    method method(dart.core::num i) → void {}
   }
   abstract class _Class&SuperClass&Mixin = mai2::SuperClass with mai2::Mixin /*isAnonymousMixin*/  {
-    synthetic constructor •() → mai2::_Class&SuperClass&Mixin*
+    synthetic constructor •() → mai2::_Class&SuperClass&Mixin
       : super mai2::SuperClass::•()
       ;
-    forwarding-stub method method(covariant-by-declaration dart.core::num* i) → void
+    forwarding-stub method method(covariant-by-declaration dart.core::num i) → void
       return super.{mai2::Mixin::method}(i);
   }
   class Class extends mai2::_Class&SuperClass&Mixin {
-    synthetic constructor •() → mai2::Class*
+    synthetic constructor •() → mai2::Class
       : super mai2::_Class&SuperClass&Mixin::•()
       ;
   }
@@ -59,10 +39,10 @@
   import "org-dartlang-test:///main_lib1.dart";
 
   class SubClass extends mai2::Class {
-    synthetic constructor •() → mai::SubClass*
+    synthetic constructor •() → mai::SubClass
       : super mai2::Class::•()
       ;
   }
   static method method() → dynamic
-    return new mai::SubClass::•().{mai2::_Class&SuperClass&Mixin::method}(0){(dart.core::num*) →* void};
+    return new mai::SubClass::•().{mai2::_Class&SuperClass&Mixin::method}(0){(dart.core::num) → void};
 }
diff --git a/pkg/front_end/testcases/incremental/mixin_from_sdk.yaml b/pkg/front_end/testcases/incremental/mixin_from_sdk.yaml
index 3e68b28..51be325 100644
--- a/pkg/front_end/testcases/incremental/mixin_from_sdk.yaml
+++ b/pkg/front_end/testcases/incremental/mixin_from_sdk.yaml
@@ -12,7 +12,6 @@
   - a.dart
 sources:
   a.dart: |
-    // @dart=2.9
     import 'dart:collection';
 
     class Foo extends Object with ListMixin<int> {
diff --git a/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml b/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml
index c830e1c..e760b10 100644
--- a/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml
+++ b/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml
@@ -10,7 +10,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         abstract class A<T> {}
         mixin M<T> on A<T> {}
         class C extends Object with M {}
diff --git a/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml.world.1.expect b/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml.world.1.expect
index 3ff776a..87eb5c7 100644
--- a/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml.world.1.expect
@@ -3,53 +3,33 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:7: Error: 'Object' doesn't implement 'A<dynamic>' so it can't be used with 'M<dynamic>'.
+// org-dartlang-test:///main.dart:3:7: Error: 'Object' doesn't implement 'A<dynamic>' so it can't be used with 'M<dynamic>'.
 //  - 'Object' is from 'dart:core'.
 //  - 'A' is from 'org-dartlang-test:///main.dart'.
 //  - 'M' is from 'org-dartlang-test:///main.dart'.
 // class C extends Object with M {}
 //       ^
 //
-// org-dartlang-test:///main.dart:4:7: Error: Type parameters couldn't be inferred for the mixin 'M' because 'Object' does not implement the mixin's supertype constraint 'A<T>'.
+// org-dartlang-test:///main.dart:3:7: Error: Type parameters couldn't be inferred for the mixin 'M' because 'Object' does not implement the mixin's supertype constraint 'A<T>'.
 //  - 'A' is from 'org-dartlang-test:///main.dart'.
 // class C extends Object with M {}
 //       ^
 //
 
-  abstract class A<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → main::A<main::A::T*>*
+  abstract class A<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → main::A<main::A::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  abstract class M<T extends dart.core::Object* = dynamic> extends main::A<main::M::T*> /*isMixinDeclaration*/  {
+  abstract class M<T extends dart.core::Object? = dynamic> extends main::A<main::M::T%> /*isMixinDeclaration*/  {
   }
   abstract class _C&Object&M extends dart.core::Object implements main::M<dynamic> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-    const synthetic constructor •() → main::_C&Object&M*
+    const synthetic constructor •() → main::_C&Object&M
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class C extends main::_C&Object&M {
-    synthetic constructor •() → main::C*
+    synthetic constructor •() → main::C
       : super main::_C&Object&M::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/multiple_entriepoints.yaml b/pkg/front_end/testcases/incremental/multiple_entriepoints.yaml
index 6f4c9d8..0577118 100644
--- a/pkg/front_end/testcases/incremental/multiple_entriepoints.yaml
+++ b/pkg/front_end/testcases/incremental/multiple_entriepoints.yaml
@@ -12,17 +12,14 @@
       - b.dart
     sources:
       a.dart: |
-        // @dart=2.9
         a() {
           print("hello a");
         }
       b.dart: |
-        // @dart=2.9
         b() {
           print("hello b");
         }
       c.dart: |
-        // @dart=2.9
         b() {
           print("hello c (I'm not included!)");
         }
diff --git a/pkg/front_end/testcases/incremental/no_invalidate_on_export_of_main.yaml b/pkg/front_end/testcases/incremental/no_invalidate_on_export_of_main.yaml
index 5172413..5f3ac3c 100644
--- a/pkg/front_end/testcases/incremental/no_invalidate_on_export_of_main.yaml
+++ b/pkg/front_end/testcases/incremental/no_invalidate_on_export_of_main.yaml
@@ -10,8 +10,6 @@
 invalidate:
 sources:
   a.dart: |
-    // @dart=2.9
     export 'b.dart';
   b.dart: |
-    // @dart=2.9
     main() { print("hello"); }
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_1.yaml b/pkg/front_end/testcases/incremental/no_outline_change_1.yaml
index 378608c..563d16c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_1.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_1.yaml
@@ -10,13 +10,11 @@
     experiments: alternative-invalidation-strategy
     sources:
       actualMain.dart: |
-        // @dart=2.9
         import 'main.dart' as m;
         main() {
           m.main();
         }
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         main() {
@@ -24,7 +22,6 @@
         }
         mainHello() {}
       libA.dart: |
-        // @dart=2.9
         import 'main.dart';
         import 'libB.dart';
         class Foo {}
@@ -33,7 +30,6 @@
           mainHello();
         }
       libB.dart: |
-        // @dart=2.9
         import 'libA.dart';
         class Bar {
           Foo foo;
@@ -48,7 +44,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_1.yaml.world.1.expect
index be26f7c..644fc90 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_1.yaml.world.1.expect
@@ -13,22 +13,12 @@
   import "org-dartlang-test:///libB.dart";
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → libA::Foo*
+    synthetic constructor •() → libA::Foo
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method whatever() → dynamic {
-    libB::Bar* bar = new libB::Bar::•(new libA::Foo::•());
+    libB::Bar bar = new libB::Bar::•(new libA::Foo::•());
     main::mainHello();
   }
 }
@@ -37,20 +27,10 @@
   import "org-dartlang-test:///libA.dart";
 
   class Bar extends dart.core::Object {
-    field libA::Foo* foo;
-    constructor •(libA::Foo* foo) → libB::Bar*
+    field libA::Foo foo;
+    constructor •(libA::Foo foo) → libB::Bar
       : libB::Bar::foo = foo, super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_1.yaml.world.2.expect
index bf98757..7fa866e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_1.yaml.world.2.expect
@@ -13,22 +13,12 @@
   import "org-dartlang-test:///libB.dart";
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → libA::Foo*
+    synthetic constructor •() → libA::Foo
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method whatever() → dynamic {
-    libB::Bar* bar = new libB::Bar::•(new libA::Foo::•());
+    libB::Bar bar = new libB::Bar::•(new libA::Foo::•());
     main::mainHello();
   }
 }
@@ -37,20 +27,10 @@
   import "org-dartlang-test:///libA.dart";
 
   class Bar extends dart.core::Object {
-    field libA::Foo* foo;
-    constructor •(libA::Foo* foo) → libB::Bar*
+    field libA::Foo foo;
+    constructor •(libA::Foo foo) → libB::Bar
       : libB::Bar::foo = foo, super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml
index 97dacaf..10f6a6e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         import "lib2.dart";
         import "lib3.dart";
@@ -21,14 +20,12 @@
           lib3Method(foo);
         }
       lib1.dart: |
-        // @dart=2.9
         class Foo {
           void fooMethod() {
             // Not filled out.
           }
         }
       lib2.dart: |
-        // @dart=2.9
         import "lib1.dart";
         class Bar extends Foo {
           void barMethod() {
@@ -36,7 +33,6 @@
           }
         }
       lib3.dart: |
-       // @dart=2.9
         import "lib1.dart";
         import "lib2.dart";
         void lib3Method(Foo foo) {
@@ -53,7 +49,6 @@
       - lib1.dart
     sources:
       lib1.dart: |
-        // @dart=2.9
         class Foo {
           void fooMethod() {
             print("fooMethod");
@@ -69,7 +64,6 @@
       - lib3.dart
     sources:
       lib3.dart: |
-        // @dart=2.9
         import "lib1.dart";
         import "lib2.dart";
         void lib3Method(Foo foo) {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.1.expect
index 4843839..faf5c79 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.1.expect
@@ -2,20 +2,10 @@
 library from "org-dartlang-test:///lib1.dart" as lib1 {
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → lib1::Foo*
+    synthetic constructor •() → lib1::Foo
       : super dart.core::Object::•()
       ;
     method fooMethod() → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -23,7 +13,7 @@
   import "org-dartlang-test:///lib1.dart";
 
   class Bar extends lib1::Foo {
-    synthetic constructor •() → lib2::Bar*
+    synthetic constructor •() → lib2::Bar
       : super lib1::Foo::•()
       ;
     method barMethod() → void {}
@@ -34,9 +24,9 @@
   import "org-dartlang-test:///lib1.dart";
   import "org-dartlang-test:///lib2.dart";
 
-  static method lib3Method(lib1::Foo* foo) → void {
-    lib1::Foo* bar = new lib2::Bar::•();
-    dart.core::bool* equal = foo =={lib1::Foo::==}{(dynamic) →* dart.core::bool*} bar;
+  static method lib3Method(lib1::Foo foo) → void {
+    lib1::Foo bar = new lib2::Bar::•();
+    dart.core::bool equal = foo =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} bar;
     dart.core::print("foo == bar = ${equal}");
   }
 }
@@ -47,7 +37,7 @@
   import "org-dartlang-test:///lib3.dart";
 
   static method main() → dynamic {
-    lib1::Foo* foo = new lib2::Bar::•();
+    lib1::Foo foo = new lib2::Bar::•();
     lib3::lib3Method(foo);
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.2.expect
index 8485011..bb646813 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.2.expect
@@ -2,22 +2,12 @@
 library from "org-dartlang-test:///lib1.dart" as lib1 {
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → lib1::Foo*
+    synthetic constructor •() → lib1::Foo
       : super dart.core::Object::•()
       ;
     method fooMethod() → void {
       dart.core::print("fooMethod");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -25,7 +15,7 @@
   import "org-dartlang-test:///lib1.dart";
 
   class Bar extends lib1::Foo {
-    synthetic constructor •() → lib2::Bar*
+    synthetic constructor •() → lib2::Bar
       : super lib1::Foo::•()
       ;
     method barMethod() → void {}
@@ -36,9 +26,9 @@
   import "org-dartlang-test:///lib1.dart";
   import "org-dartlang-test:///lib2.dart";
 
-  static method lib3Method(lib1::Foo* foo) → void {
-    lib1::Foo* bar = new lib2::Bar::•();
-    dart.core::bool* equal = foo =={lib1::Foo::==}{(dynamic) →* dart.core::bool*} bar;
+  static method lib3Method(lib1::Foo foo) → void {
+    lib1::Foo bar = new lib2::Bar::•();
+    dart.core::bool equal = foo =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} bar;
     dart.core::print("foo == bar = ${equal}");
   }
 }
@@ -49,7 +39,7 @@
   import "org-dartlang-test:///lib3.dart";
 
   static method main() → dynamic {
-    lib1::Foo* foo = new lib2::Bar::•();
+    lib1::Foo foo = new lib2::Bar::•();
     lib3::lib3Method(foo);
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.3.expect
index d8f13774..737c62a 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.3.expect
@@ -2,22 +2,12 @@
 library from "org-dartlang-test:///lib1.dart" as lib1 {
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → lib1::Foo*
+    synthetic constructor •() → lib1::Foo
       : super dart.core::Object::•()
       ;
     method fooMethod() → void {
       dart.core::print("fooMethod");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -25,7 +15,7 @@
   import "org-dartlang-test:///lib1.dart";
 
   class Bar extends lib1::Foo {
-    synthetic constructor •() → lib2::Bar*
+    synthetic constructor •() → lib2::Bar
       : super lib1::Foo::•()
       ;
     method barMethod() → void {}
@@ -36,9 +26,9 @@
   import "org-dartlang-test:///lib1.dart";
   import "org-dartlang-test:///lib2.dart";
 
-  static method lib3Method(lib1::Foo* foo) → void {
-    lib1::Foo* bar = new lib2::Bar::•();
-    dart.core::bool* equal = foo =={lib1::Foo::==}{(dynamic) →* dart.core::bool*} bar;
+  static method lib3Method(lib1::Foo foo) → void {
+    lib1::Foo bar = new lib2::Bar::•();
+    dart.core::bool equal = foo =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} bar;
     dart.core::print("foo == bar = ${equal}");
     dart.core::print("Done!");
   }
@@ -50,7 +40,7 @@
   import "org-dartlang-test:///lib3.dart";
 
   static method main() → dynamic {
-    lib1::Foo* foo = new lib2::Bar::•();
+    lib1::Foo foo = new lib2::Bar::•();
     lib3::lib3Method(foo);
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml
index 8d38adc..e06e7d3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml
@@ -11,13 +11,11 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         main() {
           libMethod();
         }
       lib1.dart: |
-        // @dart=2.9
         import "lib2.dart";
         class Foo {
           factory Foo() = Bar;
@@ -27,7 +25,6 @@
           Bar bar = new Bar();
         }
       lib2.dart: |
-        // @dart=2.9
         import "lib1.dart";
         class Bar implements Foo {
           Bar();
@@ -41,7 +38,6 @@
       - lib1.dart
     sources:
       lib1.dart: |
-        // @dart=2.9
         import "lib2.dart";
         class Foo {
           factory Foo() = Bar;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect
index b8a5016..7f831ad 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect
@@ -4,23 +4,13 @@
   import "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[#C1];
-    static factory •() → lib1::Foo*
+    static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+    static factory •() → lib1::Foo
       return new lib2::Bar::•();
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method libMethod() → void {
-    lib1::Foo* foo = new lib2::Bar::•();
-    lib2::Bar* bar = new lib2::Bar::•();
+    lib1::Foo foo = new lib2::Bar::•();
+    lib2::Bar bar = new lib2::Bar::•();
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -28,19 +18,9 @@
   import "org-dartlang-test:///lib1.dart";
 
   class Bar extends dart.core::Object implements lib1::Foo {
-    constructor •() → lib2::Bar*
+    constructor •() → lib2::Bar
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
index ba249a3..ff2f55c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
@@ -4,24 +4,14 @@
   import "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[#C1];
-    static factory •() → lib1::Foo*
+    static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+    static factory •() → lib1::Foo
       return new lib2::Bar::•();
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method libMethod() → void {
-    lib1::Foo* foo = new lib2::Bar::•();
-    lib2::Bar* bar = new lib2::Bar::•();
-    dart.core::print(foo =={lib1::Foo::==}{(dynamic) →* dart.core::bool*} bar);
+    lib1::Foo foo = new lib2::Bar::•();
+    lib2::Bar bar = new lib2::Bar::•();
+    dart.core::print(foo =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} bar);
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -29,19 +19,9 @@
   import "org-dartlang-test:///lib1.dart";
 
   class Bar extends dart.core::Object implements lib1::Foo {
-    constructor •() → lib2::Bar*
+    constructor •() → lib2::Bar
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml
index 7249224..24ee095 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml
@@ -11,14 +11,12 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib2.dart" show Bar;
         import "lib1.dart" show Bar;
         main() {
           Bar bar = new Bar();
         }
       lib1.dart: |
-        // @dart=2.9
         export "lib2.dart";
         class Foo {
           Foo() {
@@ -26,7 +24,6 @@
           }
         }
       lib2.dart: |
-        // @dart=2.9
         class Bar {
           Bar() {
 
@@ -41,7 +38,6 @@
       - lib1.dart
     sources:
       lib1.dart: |
-        // @dart=2.9
         export "lib2.dart";
         class Foo {
           Foo() {
@@ -58,7 +54,6 @@
       - lib2.dart
     sources:
       lib2.dart: |
-        // @dart=2.9
         class Bar {
           Bar() {
             print("Bar!");
@@ -74,7 +69,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib2.dart" show Bar;
         import "lib1.dart" show Bar;
         main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.1.expect
index 3746e52..baf4f3d 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.1.expect
@@ -5,35 +5,15 @@
   export "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    constructor •() → lib1::Foo*
+    constructor •() → lib1::Foo
       : super dart.core::Object::•() {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   class Bar extends dart.core::Object {
-    constructor •() → lib2::Bar*
+    constructor •() → lib2::Bar
       : super dart.core::Object::•() {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -42,6 +22,6 @@
   import "org-dartlang-test:///lib1.dart" show Bar;
 
   static method main() → dynamic {
-    lib2::Bar* bar = new lib2::Bar::•();
+    lib2::Bar bar = new lib2::Bar::•();
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.2.expect
index 96ec3d6..6eab121 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.2.expect
@@ -5,37 +5,17 @@
   export "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    constructor •() → lib1::Foo*
+    constructor •() → lib1::Foo
       : super dart.core::Object::•() {
       dart.core::print("Foo!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   class Bar extends dart.core::Object {
-    constructor •() → lib2::Bar*
+    constructor •() → lib2::Bar
       : super dart.core::Object::•() {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -44,6 +24,6 @@
   import "org-dartlang-test:///lib1.dart" show Bar;
 
   static method main() → dynamic {
-    lib2::Bar* bar = new lib2::Bar::•();
+    lib2::Bar bar = new lib2::Bar::•();
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.3.expect
index 533cf21..a24c06e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.3.expect
@@ -5,39 +5,19 @@
   export "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    constructor •() → lib1::Foo*
+    constructor •() → lib1::Foo
       : super dart.core::Object::•() {
       dart.core::print("Foo!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   class Bar extends dart.core::Object {
-    constructor •() → lib2::Bar*
+    constructor •() → lib2::Bar
       : super dart.core::Object::•() {
       dart.core::print("Bar!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -46,6 +26,6 @@
   import "org-dartlang-test:///lib1.dart" show Bar;
 
   static method main() → dynamic {
-    lib2::Bar* bar = new lib2::Bar::•();
+    lib2::Bar bar = new lib2::Bar::•();
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.4.expect b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.4.expect
index b32b613..0ddf51c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml.world.4.expect
@@ -5,39 +5,19 @@
   export "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    constructor •() → lib1::Foo*
+    constructor •() → lib1::Foo
       : super dart.core::Object::•() {
       dart.core::print("Foo!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   class Bar extends dart.core::Object {
-    constructor •() → lib2::Bar*
+    constructor •() → lib2::Bar
       : super dart.core::Object::•() {
       dart.core::print("Bar!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -46,7 +26,7 @@
   import "org-dartlang-test:///lib1.dart" show Bar;
 
   static method main() → dynamic {
-    lib2::Bar* bar = new lib2::Bar::•();
+    lib2::Bar bar = new lib2::Bar::•();
     dart.core::print(bar);
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml
index bcdc011..10b1083 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml
@@ -12,17 +12,14 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart" as prefix;
         main() {
           print(prefix.Foo.BAR);
         }
       lib1.dart: |
-        // @dart=2.9
         export "lib2.dart" show Foo;
         import "main.dart";
       lib2.dart: |
-        // @dart=2.9
         class Foo {
           static const Foo BAR = const Foo("BAR");
           const Foo(String x);
@@ -36,7 +33,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart" as prefix;
         main() {
           print(prefix.Foo.BAR);
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.1.expect
index e74b105..fa8de36 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.1.expect
@@ -9,20 +9,10 @@
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    static const field lib2::Foo* BAR = #C1;
-    const constructor •(dart.core::String* x) → lib2::Foo*
+    static const field lib2::Foo BAR = #C1;
+    const constructor •(dart.core::String x) → lib2::Foo
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -40,6 +30,6 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///lib2.dart:
-- Foo. (from org-dartlang-test:///lib2.dart:4:9)
+- Foo. (from org-dartlang-test:///lib2.dart:3:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.2.expect
index a4182de..a2b3ee6 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.2.expect
@@ -9,20 +9,10 @@
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    static const field lib2::Foo* BAR = #C1;
-    const constructor •(dart.core::String* x) → lib2::Foo*
+    static const field lib2::Foo BAR = #C1;
+    const constructor •(dart.core::String x) → lib2::Foo
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -41,6 +31,6 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///lib2.dart:
-- Foo. (from org-dartlang-test:///lib2.dart:4:9)
+- Foo. (from org-dartlang-test:///lib2.dart:3:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_14.yaml b/pkg/front_end/testcases/incremental/no_outline_change_14.yaml
index cbce88b..a33699a 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_14.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_14.yaml
@@ -11,19 +11,16 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         abstract class Foo implements Bar {
           @override
           Foo get x;
         }
       lib1.dart: |
-        // @dart=2.9
         import "lib2.dart";
         abstract class Bar implements Baz {
         }
       lib2.dart: |
-        // @dart=2.9
         abstract class Baz {
           Baz get x;
         }
@@ -36,7 +33,6 @@
       - lib2.dart
     sources:
       lib2.dart: |
-        // @dart=2.9
         abstract class Baz {
           Baz get x;
         }
@@ -50,7 +46,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         abstract class Foo implements Bar {
           @override
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_14.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_14.yaml.world.1.expect
index 7df7d03..168119e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_14.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_14.yaml.world.1.expect
@@ -4,38 +4,18 @@
   import "org-dartlang-test:///lib2.dart";
 
   abstract class Bar extends dart.core::Object implements lib2::Baz {
-    synthetic constructor •() → lib1::Bar*
+    synthetic constructor •() → lib1::Bar
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   abstract class Baz extends dart.core::Object {
-    synthetic constructor •() → lib2::Baz*
+    synthetic constructor •() → lib2::Baz
       : super dart.core::Object::•()
       ;
-    abstract get x() → lib2::Baz*;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract get x() → lib2::Baz;
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -43,21 +23,11 @@
   import "org-dartlang-test:///lib1.dart";
 
   abstract class Foo extends dart.core::Object implements lib1::Bar {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
     @#C1
-    abstract get x() → main::Foo*;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract get x() → main::Foo;
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_14.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_14.yaml.world.2.expect
index 7df7d03..168119e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_14.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_14.yaml.world.2.expect
@@ -4,38 +4,18 @@
   import "org-dartlang-test:///lib2.dart";
 
   abstract class Bar extends dart.core::Object implements lib2::Baz {
-    synthetic constructor •() → lib1::Bar*
+    synthetic constructor •() → lib1::Bar
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   abstract class Baz extends dart.core::Object {
-    synthetic constructor •() → lib2::Baz*
+    synthetic constructor •() → lib2::Baz
       : super dart.core::Object::•()
       ;
-    abstract get x() → lib2::Baz*;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract get x() → lib2::Baz;
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -43,21 +23,11 @@
   import "org-dartlang-test:///lib1.dart";
 
   abstract class Foo extends dart.core::Object implements lib1::Bar {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
     @#C1
-    abstract get x() → main::Foo*;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract get x() → main::Foo;
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_14.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_14.yaml.world.3.expect
index 7df7d03..168119e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_14.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_14.yaml.world.3.expect
@@ -4,38 +4,18 @@
   import "org-dartlang-test:///lib2.dart";
 
   abstract class Bar extends dart.core::Object implements lib2::Baz {
-    synthetic constructor •() → lib1::Bar*
+    synthetic constructor •() → lib1::Bar
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   abstract class Baz extends dart.core::Object {
-    synthetic constructor •() → lib2::Baz*
+    synthetic constructor •() → lib2::Baz
       : super dart.core::Object::•()
       ;
-    abstract get x() → lib2::Baz*;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract get x() → lib2::Baz;
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -43,21 +23,11 @@
   import "org-dartlang-test:///lib1.dart";
 
   abstract class Foo extends dart.core::Object implements lib1::Bar {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
     @#C1
-    abstract get x() → main::Foo*;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract get x() → main::Foo;
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml
index fb7b2f9..1ec3e65 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml
@@ -11,14 +11,12 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         abstract class C extends B implements A<int> {}
         main() {
           print("#1");
         }
       lib1.dart: |
-        // @dart=2.9
         class A<T> {
           foo(T t) {
             print("foo T $t");
@@ -39,7 +37,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         abstract class C extends B implements A<int> {}
         main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.1.expect
index 7dd08b9..c6c715c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.1.expect
@@ -1,52 +1,32 @@
 main = main::main;
 library from "org-dartlang-test:///lib1.dart" as lib1 {
 
-  class A<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → lib1::A<lib1::A::T*>*
+  class A<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → lib1::A<lib1::A::T%>
       : super dart.core::Object::•()
       ;
-    method foo(covariant-by-class lib1::A::T* t) → dynamic {
+    method foo(covariant-by-class lib1::A::T% t) → dynamic {
       dart.core::print("foo T ${t}");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class B extends dart.core::Object {
-    synthetic constructor •() → lib1::B*
+    synthetic constructor •() → lib1::B
       : super dart.core::Object::•()
       ;
-    method foo(dart.core::int* t) → dynamic {
+    method foo(dart.core::int t) → dynamic {
       dart.core::print("foo int ${t}");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///lib1.dart";
 
-  abstract class C extends lib1::B implements lib1::A<dart.core::int*> {
-    synthetic constructor •() → main::C*
+  abstract class C extends lib1::B implements lib1::A<dart.core::int> {
+    synthetic constructor •() → main::C
       : super lib1::B::•()
       ;
-    forwarding-stub method foo(covariant-by-class dart.core::int* t) → dynamic
+    forwarding-stub method foo(covariant-by-class dart.core::int t) → dynamic
       return super.{lib1::B::foo}(t);
   }
   static method main() → dynamic {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.2.expect
index 4096374..2497315 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.2.expect
@@ -1,52 +1,32 @@
 main = main::main;
 library from "org-dartlang-test:///lib1.dart" as lib1 {
 
-  class A<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → lib1::A<lib1::A::T*>*
+  class A<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → lib1::A<lib1::A::T%>
       : super dart.core::Object::•()
       ;
-    method foo(covariant-by-class lib1::A::T* t) → dynamic {
+    method foo(covariant-by-class lib1::A::T% t) → dynamic {
       dart.core::print("foo T ${t}");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class B extends dart.core::Object {
-    synthetic constructor •() → lib1::B*
+    synthetic constructor •() → lib1::B
       : super dart.core::Object::•()
       ;
-    method foo(dart.core::int* t) → dynamic {
+    method foo(dart.core::int t) → dynamic {
       dart.core::print("foo int ${t}");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///lib1.dart";
 
-  abstract class C extends lib1::B implements lib1::A<dart.core::int*> {
-    synthetic constructor •() → main::C*
+  abstract class C extends lib1::B implements lib1::A<dart.core::int> {
+    synthetic constructor •() → main::C
       : super lib1::B::•()
       ;
-    forwarding-stub method foo(covariant-by-class dart.core::int* t) → dynamic
+    forwarding-stub method foo(covariant-by-class dart.core::int t) → dynamic
       return super.{lib1::B::foo}(t);
   }
   static method main() → dynamic {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml
index 202a3e0..8bd1eb7 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         class Foo1 extends Bar {
           noSuchMethod(Invocation msg) {
@@ -24,12 +23,11 @@
           }
         }
       lib1.dart: |
-        // @dart=2.9
         abstract class Bar {
           void method();
           bool get getter;
           void set setter(bool b);
-          bool field;
+          bool field = true;
         }
     expectedLibraryCount: 2
   - entry: main.dart
@@ -40,7 +38,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         class Foo1 extends Bar {
           noSuchMethod(Invocation msg) {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.1.expect
index 6f8c60d..c1df2f5 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.1.expect
@@ -2,23 +2,13 @@
 library from "org-dartlang-test:///lib1.dart" as lib1 {
 
   abstract class Bar extends dart.core::Object {
-    field dart.core::bool* field = null;
-    synthetic constructor •() → lib1::Bar*
+    field dart.core::bool field = true;
+    synthetic constructor •() → lib1::Bar
       : super dart.core::Object::•()
       ;
     abstract method method() → void;
-    abstract get getter() → dart.core::bool*;
-    abstract set setter(dart.core::bool* b) → void;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract get getter() → dart.core::bool;
+    abstract set setter(dart.core::bool b) → void;
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -26,45 +16,36 @@
   import "org-dartlang-test:///lib1.dart";
 
   class Foo1 extends lib1::Bar {
-    synthetic constructor •() → main::Foo1*
+    synthetic constructor •() → main::Foo1
       : super lib1::Bar::•()
       ;
-    method noSuchMethod(dart.core::Invocation* msg) → dynamic {
+    method noSuchMethod(dart.core::Invocation msg) → dynamic {
       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))){(dart.core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dart.core::bool*;
+    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))){(dart.core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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))){(dart.core::Invocation*) →* dynamic};
-    no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
-      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic};
+    no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool b) → void
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic};
   }
   class Foo2 extends dart.core::Object implements lib1::Bar {
-    synthetic constructor •() → main::Foo2*
+    synthetic constructor •() → main::Foo2
       : super dart.core::Object::•()
       ;
-    method noSuchMethod(dart.core::Invocation* msg) → dynamic {
+    method noSuchMethod(dart.core::Invocation msg) → dynamic {
       dart.core::print("noSouchMethod!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    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))){(dart.core::Invocation*) →* dynamic} 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))){(dart.core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dart.core::bool*;
+    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))){(dart.core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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))){(dart.core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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))){(dart.core::Invocation*) →* dynamic};
-    no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
-    no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ field(dart.core::bool* value) → void
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C8, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(value)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic};
+    no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool b) → void
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic};
+    no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ field(dart.core::bool value) → void
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C8, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(value)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic};
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.2.expect
index 546d558..91bbef7 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.2.expect
@@ -2,23 +2,13 @@
 library from "org-dartlang-test:///lib1.dart" as lib1 {
 
   abstract class Bar extends dart.core::Object {
-    field dart.core::bool* field = null;
-    synthetic constructor •() → lib1::Bar*
+    field dart.core::bool field = true;
+    synthetic constructor •() → lib1::Bar
       : super dart.core::Object::•()
       ;
     abstract method method() → void;
-    abstract get getter() → dart.core::bool*;
-    abstract set setter(dart.core::bool* b) → void;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract get getter() → dart.core::bool;
+    abstract set setter(dart.core::bool b) → void;
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -26,45 +16,36 @@
   import "org-dartlang-test:///lib1.dart";
 
   class Foo1 extends lib1::Bar {
-    synthetic constructor •() → main::Foo1*
+    synthetic constructor •() → main::Foo1
       : super lib1::Bar::•()
       ;
-    method noSuchMethod(dart.core::Invocation* msg) → dynamic {
+    method noSuchMethod(dart.core::Invocation msg) → dynamic {
       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))){(dart.core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dart.core::bool*;
+    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))){(dart.core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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))){(dart.core::Invocation*) →* dynamic};
-    no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
-      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic};
+    no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool b) → void
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic};
   }
   class Foo2 extends dart.core::Object implements lib1::Bar {
-    synthetic constructor •() → main::Foo2*
+    synthetic constructor •() → main::Foo2
       : super dart.core::Object::•()
       ;
-    method noSuchMethod(dart.core::Invocation* msg) → dynamic {
+    method noSuchMethod(dart.core::Invocation msg) → dynamic {
       dart.core::print("noSouchMethod!!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    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))){(dart.core::Invocation*) →* dynamic} 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))){(dart.core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dart.core::bool*;
+    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))){(dart.core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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))){(dart.core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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))){(dart.core::Invocation*) →* dynamic};
-    no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
-    no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ field(dart.core::bool* value) → void
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C8, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(value)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic};
+    no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool b) → void
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic};
+    no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ field(dart.core::bool value) → void
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C8, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(value)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic};
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml
index 1648959..c2fe2c1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml
@@ -11,14 +11,12 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart" deferred as foo;
         main() {
           var f = foo.loadLibrary;
           f();
         }
       lib.dart: |
-        // @dart=2.9
         foo() {
           print("foo!");
         }
@@ -31,7 +29,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart" deferred as foo;
         main() {
           var f = foo.loadLibrary;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.1.expect
index 1c3c19c..37ce4f7 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.1.expect
@@ -10,10 +10,10 @@
   import "org-dartlang-test:///lib.dart" deferred as foo;
 
   static method main() → dynamic {
-    () →* dart.async::Future<dynamic>* f = #C1;
-    f(){() →* dart.async::Future<dynamic>*};
+    () → dart.async::Future<dynamic> f = #C1;
+    f(){() → dart.async::Future<dynamic>};
   }
-  static method _#loadLibrary_foo() → dart.async::Future<dynamic>*
+  static method _#loadLibrary_foo() → dart.async::Future<dynamic>
     return LoadLibrary(foo);
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.2.expect
index e3b1ce9..075af3f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.2.expect
@@ -10,11 +10,11 @@
   import "org-dartlang-test:///lib.dart" deferred as foo;
 
   static method main() → dynamic {
-    () →* dart.async::Future<dynamic>* f = #C1;
-    f(){() →* dart.async::Future<dynamic>*};
+    () → dart.async::Future<dynamic> f = #C1;
+    f(){() → dart.async::Future<dynamic>};
     dart.core::print("Done");
   }
-  static method _#loadLibrary_foo() → dart.async::Future<dynamic>*
+  static method _#loadLibrary_foo() → dart.async::Future<dynamic>
     return LoadLibrary(foo);
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml
index ace7dba..dd099b7 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml
@@ -12,19 +12,16 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         export "lib1.dart" show x;
         export "lib2.dart" show x;
         main() {
           print("exports")
         }
       lib1.dart: |
-        // @dart=2.9
         x() {
           print("lib1.x!");
         }
       lib2.dart: |
-        // @dart=2.9
         x() {
           print("lib2.x!");
         }
@@ -38,7 +35,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         export "lib1.dart" show x;
         export "lib2.dart" show x;
         main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect
index 92cbad1..fadf469 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect
@@ -15,11 +15,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// 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;
 // ^
 //
-// org-dartlang-test:///main.dart:5:18: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:4:18: Error: Expected ';' after this.
 //   print("exports")
 //                  ^
 //
@@ -27,7 +27,7 @@
   export "org-dartlang-test:///lib1.dart" show x;
   export "org-dartlang-test:///lib2.dart" show x;
 
-  static const field dynamic _exports# = #C1;
+  static const field dynamic _exports# = #C1 /*isLegacy*/;
   static method main() → dynamic {
     dart.core::print("exports");
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect
index 458ee49..d46bdce 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect
@@ -15,11 +15,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// 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;
 // ^
 //
-// org-dartlang-test:///main.dart:5:19: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:4:19: Error: Expected ';' after this.
 //   print("exports!")
 //                   ^
 //
@@ -27,7 +27,7 @@
   export "org-dartlang-test:///lib1.dart" show x;
   export "org-dartlang-test:///lib2.dart" show x;
 
-  static const field dynamic _exports# = #C1;
+  static const field dynamic _exports# = #C1 /*isLegacy*/;
   static method main() → dynamic {
     dart.core::print("exports!");
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_19.yaml b/pkg/front_end/testcases/incremental/no_outline_change_19.yaml
index 8fd792f..d184850 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_19.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_19.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         class A1 {}
 
         extension A2 on A1 {
@@ -21,7 +20,7 @@
           String get getter1 => "42!";
           void set setter1(String s) {}
           static A1 method2() {
-            return null;
+            throw '';
           }
           static String get getter2 => "42!";
           static void set setter2(String s) {}
@@ -37,7 +36,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         class A1 {}
 
         extension A2 on A1 {
@@ -47,7 +45,7 @@
           String get getter1 => "42!";
           void set setter1(String s) {}
           static A1 method2() {
-            return null;
+            throw '';
           }
           static String get getter2 => "42!";
           static void set setter2(String s) {}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_19.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_19.yaml.world.1.expect
index c11a0be..d6e61ce 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_19.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_19.yaml.world.1.expect
@@ -2,21 +2,11 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class A1 extends dart.core::Object {
-    synthetic constructor •() → main::A1*
+    synthetic constructor •() → main::A1
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  extension A2 on main::A1* {
+  extension A2 on main::A1 {
     method method1 = main::A2|method1;
     tearoff method1 = main::A2|get#method1;
     get getter1 = main::A2|get#getter1;
@@ -27,20 +17,20 @@
     set setter1 = main::A2|set#setter1;
     static set setter2 = set main::A2|setter2;
   }
-  static field dart.core::int* A2|staticField = 42;
-  static final field dart.core::int* A2|staticFinalField = 42;
-  static method A2|method1(lowered final main::A1* #this) → main::A1* {
+  static field dart.core::int A2|staticField = 42;
+  static final field dart.core::int A2|staticFinalField = 42;
+  static method A2|method1(lowered final main::A1 #this) → main::A1 {
     return #this;
   }
-  static method A2|get#method1(lowered final main::A1* #this) → () →* main::A1*
-    return () → main::A1* => main::A2|method1(#this);
-  static method A2|get#getter1(lowered final main::A1* #this) → dart.core::String*
+  static method A2|get#method1(lowered final main::A1 #this) → () → main::A1
+    return () → main::A1 => main::A2|method1(#this);
+  static method A2|get#getter1(lowered final main::A1 #this) → dart.core::String
     return "42!";
-  static method A2|set#setter1(lowered final main::A1* #this, dart.core::String* s) → void {}
-  static method A2|method2() → main::A1* {
-    return null;
+  static method A2|set#setter1(lowered final main::A1 #this, dart.core::String s) → void {}
+  static method A2|method2() → main::A1 {
+    throw "";
   }
-  static get A2|getter2() → dart.core::String*
+  static get A2|getter2() → dart.core::String
     return "42!";
-  static set A2|setter2(dart.core::String* s) → void {}
+  static set A2|setter2(dart.core::String s) → void {}
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_19.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_19.yaml.world.2.expect
index c11a0be..d6e61ce 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_19.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_19.yaml.world.2.expect
@@ -2,21 +2,11 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class A1 extends dart.core::Object {
-    synthetic constructor •() → main::A1*
+    synthetic constructor •() → main::A1
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  extension A2 on main::A1* {
+  extension A2 on main::A1 {
     method method1 = main::A2|method1;
     tearoff method1 = main::A2|get#method1;
     get getter1 = main::A2|get#getter1;
@@ -27,20 +17,20 @@
     set setter1 = main::A2|set#setter1;
     static set setter2 = set main::A2|setter2;
   }
-  static field dart.core::int* A2|staticField = 42;
-  static final field dart.core::int* A2|staticFinalField = 42;
-  static method A2|method1(lowered final main::A1* #this) → main::A1* {
+  static field dart.core::int A2|staticField = 42;
+  static final field dart.core::int A2|staticFinalField = 42;
+  static method A2|method1(lowered final main::A1 #this) → main::A1 {
     return #this;
   }
-  static method A2|get#method1(lowered final main::A1* #this) → () →* main::A1*
-    return () → main::A1* => main::A2|method1(#this);
-  static method A2|get#getter1(lowered final main::A1* #this) → dart.core::String*
+  static method A2|get#method1(lowered final main::A1 #this) → () → main::A1
+    return () → main::A1 => main::A2|method1(#this);
+  static method A2|get#getter1(lowered final main::A1 #this) → dart.core::String
     return "42!";
-  static method A2|set#setter1(lowered final main::A1* #this, dart.core::String* s) → void {}
-  static method A2|method2() → main::A1* {
-    return null;
+  static method A2|set#setter1(lowered final main::A1 #this, dart.core::String s) → void {}
+  static method A2|method2() → main::A1 {
+    throw "";
   }
-  static get A2|getter2() → dart.core::String*
+  static get A2|getter2() → dart.core::String
     return "42!";
-  static set A2|setter2(dart.core::String* s) → void {}
+  static set A2|setter2(dart.core::String s) → void {}
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml
index 13340c8..861576b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml
@@ -10,7 +10,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
@@ -29,7 +28,6 @@
 
         enum CompilationStrategy { direct, toKernel, toData, fromData }
       libA.dart: |
-        // @dart=2.9
         import 'main.dart';
         whatever(Foo foo) {
           print(foo);
@@ -43,7 +41,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect
index 7d10cb3..98b6020 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect
@@ -3,7 +3,7 @@
 
   import "org-dartlang-test:///main.dart";
 
-  static method whatever(main::Foo* foo) → dynamic {
+  static method whatever(main::Foo foo) → dynamic {
     dart.core::print(foo);
   }
 }
@@ -13,50 +13,30 @@
 
   class Foo extends dart.core::Object {
     final field dynamic message;
-    constructor •(dynamic message) → main::Foo*
+    constructor •(dynamic message) → main::Foo
       : main::Foo::message = message, super dart.core::Object::•()
       ;
     @#C1
-    method toString() → dart.core::String* {
+    method toString() → dart.core::String {
       return "${this.{main::Foo::message}{dynamic}}";
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
-    static const field dart.core::List<main::CompilationStrategy*>* values = #C14;
-    static const field main::CompilationStrategy* direct = #C4;
-    static const field main::CompilationStrategy* toKernel = #C7;
-    static const field main::CompilationStrategy* toData = #C10;
-    static const field main::CompilationStrategy* fromData = #C13;
-    const constructor •(dart.core::int* #index, dart.core::String* #name) → main::CompilationStrategy*
+    static const field dart.core::List<main::CompilationStrategy> values = #C14;
+    static const field main::CompilationStrategy direct = #C4;
+    static const field main::CompilationStrategy toKernel = #C7;
+    static const field main::CompilationStrategy toData = #C10;
+    static const field main::CompilationStrategy fromData = #C13;
+    const constructor •(dart.core::int #index, dart.core::String #name) → main::CompilationStrategy
       : super dart.core::_Enum::•(#index, #name)
       ;
-    method toString() → dart.core::String*
+    method toString() → dart.core::String
       return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
-    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
-    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic {
-    main::Foo* foo = new main::Foo::•("hello");
+    main::Foo foo = new main::Foo::•("hello");
     libA::whatever(foo);
-    main::CompilationStrategy* compilationStrategy = #C4;
+    main::CompilationStrategy compilationStrategy = #C4;
     dart.core::print(compilationStrategy);
   }
 }
@@ -80,7 +60,7 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- CompilationStrategy. (from org-dartlang-test:///main.dart:18:6)
+- CompilationStrategy. (from org-dartlang-test:///main.dart:17:6)
 - _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect
index 586df3a..62d9697 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect
@@ -3,7 +3,7 @@
 
   import "org-dartlang-test:///main.dart";
 
-  static method whatever(main::Foo* foo) → dynamic {
+  static method whatever(main::Foo foo) → dynamic {
     dart.core::print(foo);
   }
 }
@@ -13,50 +13,30 @@
 
   class Foo extends dart.core::Object {
     final field dynamic message;
-    constructor •(dynamic message) → main::Foo*
+    constructor •(dynamic message) → main::Foo
       : main::Foo::message = message, super dart.core::Object::•()
       ;
     @#C1
-    method toString() → dart.core::String* {
+    method toString() → dart.core::String {
       return "${this.{main::Foo::message}{dynamic}}!";
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
-    static const field dart.core::List<main::CompilationStrategy*>* values = #C14;
-    static const field main::CompilationStrategy* direct = #C4;
-    static const field main::CompilationStrategy* toKernel = #C7;
-    static const field main::CompilationStrategy* toData = #C10;
-    static const field main::CompilationStrategy* fromData = #C13;
-    const constructor •(dart.core::int* #index, dart.core::String* #name) → main::CompilationStrategy*
+    static const field dart.core::List<main::CompilationStrategy> values = #C14;
+    static const field main::CompilationStrategy direct = #C4;
+    static const field main::CompilationStrategy toKernel = #C7;
+    static const field main::CompilationStrategy toData = #C10;
+    static const field main::CompilationStrategy fromData = #C13;
+    const constructor •(dart.core::int #index, dart.core::String #name) → main::CompilationStrategy
       : super dart.core::_Enum::•(#index, #name)
       ;
-    method toString() → dart.core::String*
+    method toString() → dart.core::String
       return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
-    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
-    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic {
-    main::Foo* foo = new main::Foo::•("hello");
+    main::Foo foo = new main::Foo::•("hello");
     libA::whatever(foo);
-    main::CompilationStrategy* compilationStrategy = #C4;
+    main::CompilationStrategy compilationStrategy = #C4;
     dart.core::print(compilationStrategy);
   }
 }
@@ -80,7 +60,7 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- CompilationStrategy. (from org-dartlang-test:///main.dart:18:6)
+- CompilationStrategy. (from org-dartlang-test:///main.dart:17:6)
 - _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_20.yaml b/pkg/front_end/testcases/incremental/no_outline_change_20.yaml
index f94ccd0..7d41b57 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_20.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_20.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         class A1 {}
 
         extension on A1 {
@@ -21,7 +20,7 @@
           String get getter1 => "42!";
           void set setter1(String s) {}
           static A1 method2() {
-            return null;
+            throw '';
           }
           static String get getter2 => "42!";
           static void set setter2(String s) {}
@@ -35,7 +34,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         class A1 {}
 
         extension on A1 {
@@ -45,7 +43,7 @@
           String get getter1 => "42!";
           void set setter1(String s) {}
           static A1 method2() {
-            return null;
+            throw '';
           }
           static String get getter2 => "42!";
           static void set setter2(String s) {}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_20.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_20.yaml.world.1.expect
index c5238dd..46083ff 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_20.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_20.yaml.world.1.expect
@@ -2,21 +2,11 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class A1 extends dart.core::Object {
-    synthetic constructor •() → main::A1*
+    synthetic constructor •() → main::A1
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  extension _extension#0 on main::A1* {
+  extension _extension#0 on main::A1 {
     method method1 = main::_extension#0|method1;
     tearoff method1 = main::_extension#0|get#method1;
     get getter1 = main::_extension#0|get#getter1;
@@ -25,18 +15,18 @@
     set setter1 = main::_extension#0|set#setter1;
     static set setter2 = set main::_extension#0|setter2;
   }
-  static method _extension#0|method1(lowered final main::A1* #this) → main::A1* {
+  static method _extension#0|method1(lowered final main::A1 #this) → main::A1 {
     return #this;
   }
-  static method _extension#0|get#method1(lowered final main::A1* #this) → () →* main::A1*
-    return () → main::A1* => main::_extension#0|method1(#this);
-  static method _extension#0|get#getter1(lowered final main::A1* #this) → dart.core::String*
+  static method _extension#0|get#method1(lowered final main::A1 #this) → () → main::A1
+    return () → main::A1 => main::_extension#0|method1(#this);
+  static method _extension#0|get#getter1(lowered final main::A1 #this) → dart.core::String
     return "42!";
-  static method _extension#0|set#setter1(lowered final main::A1* #this, dart.core::String* s) → void {}
-  static method _extension#0|method2() → main::A1* {
-    return null;
+  static method _extension#0|set#setter1(lowered final main::A1 #this, dart.core::String s) → void {}
+  static method _extension#0|method2() → main::A1 {
+    throw "";
   }
-  static get _extension#0|getter2() → dart.core::String*
+  static get _extension#0|getter2() → dart.core::String
     return "42!";
-  static set _extension#0|setter2(dart.core::String* s) → void {}
+  static set _extension#0|setter2(dart.core::String s) → void {}
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_20.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_20.yaml.world.2.expect
index c5238dd..46083ff 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_20.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_20.yaml.world.2.expect
@@ -2,21 +2,11 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class A1 extends dart.core::Object {
-    synthetic constructor •() → main::A1*
+    synthetic constructor •() → main::A1
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  extension _extension#0 on main::A1* {
+  extension _extension#0 on main::A1 {
     method method1 = main::_extension#0|method1;
     tearoff method1 = main::_extension#0|get#method1;
     get getter1 = main::_extension#0|get#getter1;
@@ -25,18 +15,18 @@
     set setter1 = main::_extension#0|set#setter1;
     static set setter2 = set main::_extension#0|setter2;
   }
-  static method _extension#0|method1(lowered final main::A1* #this) → main::A1* {
+  static method _extension#0|method1(lowered final main::A1 #this) → main::A1 {
     return #this;
   }
-  static method _extension#0|get#method1(lowered final main::A1* #this) → () →* main::A1*
-    return () → main::A1* => main::_extension#0|method1(#this);
-  static method _extension#0|get#getter1(lowered final main::A1* #this) → dart.core::String*
+  static method _extension#0|get#method1(lowered final main::A1 #this) → () → main::A1
+    return () → main::A1 => main::_extension#0|method1(#this);
+  static method _extension#0|get#getter1(lowered final main::A1 #this) → dart.core::String
     return "42!";
-  static method _extension#0|set#setter1(lowered final main::A1* #this, dart.core::String* s) → void {}
-  static method _extension#0|method2() → main::A1* {
-    return null;
+  static method _extension#0|set#setter1(lowered final main::A1 #this, dart.core::String s) → void {}
+  static method _extension#0|method2() → main::A1 {
+    throw "";
   }
-  static get _extension#0|getter2() → dart.core::String*
+  static get _extension#0|getter2() → dart.core::String
     return "42!";
-  static set _extension#0|setter2(dart.core::String* s) → void {}
+  static set _extension#0|setter2(dart.core::String s) → void {}
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml
index e6f6805..23a30cf 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml
@@ -13,7 +13,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         class A1 {
           A1.foo1(){}
           A1.foo1(){}
@@ -32,7 +31,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         class A1 {
           A1.foo1(){}
           A1.foo1(){}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.1.expect
index ae0225e..31c97e3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.1.expect
@@ -3,54 +3,34 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:3: Error: 'A1.foo1' is already declared in this scope.
+// org-dartlang-test:///main.dart:3:3: Error: 'A1.foo1' is already declared in this scope.
 //   A1.foo1(){}
 //   ^^^^^^^
-// org-dartlang-test:///main.dart:3:3: Context: Previous declaration of 'A1.foo1'.
+// org-dartlang-test:///main.dart:2:3: Context: Previous declaration of 'A1.foo1'.
 //   A1.foo1(){}
 //   ^^^^^^^
 //
-// org-dartlang-test:///main.dart:6:7: Error: 'A1' is already declared in this scope.
+// org-dartlang-test:///main.dart:5:7: Error: 'A1' is already declared in this scope.
 // class A1 {
 //       ^^
-// org-dartlang-test:///main.dart:2:7: Context: Previous declaration of 'A1'.
+// org-dartlang-test:///main.dart:1:7: Context: Previous declaration of 'A1'.
 // class A1 {
 //       ^^
 //
-// org-dartlang-test:///main.dart:8:3: Error: 'A1.foo2' is already declared in this scope.
+// org-dartlang-test:///main.dart:7:3: Error: 'A1.foo2' is already declared in this scope.
 //   A1.foo2(){}
 //   ^^^^^^^
-// org-dartlang-test:///main.dart:7:3: Context: Previous declaration of 'A1.foo2'.
+// org-dartlang-test:///main.dart:6:3: Context: Previous declaration of 'A1.foo2'.
 //   A1.foo2(){}
 //   ^^^^^^^
 //
 
   class A1#1 extends dart.core::Object {
-    constructor foo2() → main::A1#1*
+    constructor foo2() → main::A1#1
       : super dart.core::Object::•() {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class A1 extends dart.core::Object {
-    constructor foo1() → main::A1*
+    constructor foo1() → main::A1
       : super dart.core::Object::•() {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.2.expect
index ae0225e..31c97e3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.2.expect
@@ -3,54 +3,34 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:3: Error: 'A1.foo1' is already declared in this scope.
+// org-dartlang-test:///main.dart:3:3: Error: 'A1.foo1' is already declared in this scope.
 //   A1.foo1(){}
 //   ^^^^^^^
-// org-dartlang-test:///main.dart:3:3: Context: Previous declaration of 'A1.foo1'.
+// org-dartlang-test:///main.dart:2:3: Context: Previous declaration of 'A1.foo1'.
 //   A1.foo1(){}
 //   ^^^^^^^
 //
-// org-dartlang-test:///main.dart:6:7: Error: 'A1' is already declared in this scope.
+// org-dartlang-test:///main.dart:5:7: Error: 'A1' is already declared in this scope.
 // class A1 {
 //       ^^
-// org-dartlang-test:///main.dart:2:7: Context: Previous declaration of 'A1'.
+// org-dartlang-test:///main.dart:1:7: Context: Previous declaration of 'A1'.
 // class A1 {
 //       ^^
 //
-// org-dartlang-test:///main.dart:8:3: Error: 'A1.foo2' is already declared in this scope.
+// org-dartlang-test:///main.dart:7:3: Error: 'A1.foo2' is already declared in this scope.
 //   A1.foo2(){}
 //   ^^^^^^^
-// org-dartlang-test:///main.dart:7:3: Context: Previous declaration of 'A1.foo2'.
+// org-dartlang-test:///main.dart:6:3: Context: Previous declaration of 'A1.foo2'.
 //   A1.foo2(){}
 //   ^^^^^^^
 //
 
   class A1#1 extends dart.core::Object {
-    constructor foo2() → main::A1#1*
+    constructor foo2() → main::A1#1
       : super dart.core::Object::•() {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class A1 extends dart.core::Object {
-    constructor foo1() → main::A1*
+    constructor foo1() → main::A1
       : super dart.core::Object::•() {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml
index ff2b2b8..244a23c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import 'dart:collection' show ListMixin;
         class WithListMixin extends Object with ListMixin<int> {
           int length = 2;
@@ -27,7 +26,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'dart:collection' show ListMixin;
         class WithListMixin extends Object with ListMixin<int> {
           int length = 2;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect
index 985ec21..168470b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect
@@ -3,65 +3,61 @@
 
   import "dart:collection" show ListMixin;
 
-  abstract class _WithListMixin&Object&ListMixin extends dart.core::Object implements dart.collection::ListMixin<dart.core::int*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-    const synthetic constructor •() → main::_WithListMixin&Object&ListMixin*
+  abstract class _WithListMixin&Object&ListMixin extends dart.core::Object implements dart.collection::ListMixin<dart.core::int> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+    const synthetic constructor •() → main::_WithListMixin&Object&ListMixin
       : super dart.core::Object::•()
       ;
-    abstract member-signature get length() → dart.core::int*; -> dart.core::List::length
-    abstract member-signature set length(dart.core::int* newLength) → void; -> dart.core::List::length
-    abstract member-signature operator [](dart.core::int* index) → dart.core::int*; -> dart.core::List::[]
-    abstract member-signature operator []=(dart.core::int* index, covariant-by-class dart.core::int* value) → void; -> dart.core::List::[]=
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first() → dart.core::int* {
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first() → dart.core::int {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
+      return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int};
     }
-    set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first(covariant-by-class dart.core::int* value) → void {
+    set /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first(covariant-by-class dart.core::int value) → void {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      this.{dart.core::List::[]=}(0, value){(dart.core::int, dart.core::int*) → void};
+      this.{dart.core::List::[]=}(0, value){(dart.core::int, dart.core::int) → void};
     }
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last() → dart.core::int* {
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last() → dart.core::int {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      return this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*};
+      return this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int};
     }
-    set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last(covariant-by-class dart.core::int* value) → void {
+    set /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last(covariant-by-class dart.core::int value) → void {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      this.{dart.core::List::[]=}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}, value){(dart.core::int, dart.core::int*) → void};
+      this.{dart.core::List::[]=}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}, value){(dart.core::int, dart.core::int) → void};
     }
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ iterator() → dart.core::Iterator<dart.core::int*>
-      return new dart._internal::ListIterator::•<dart.core::int*>(this);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ elementAt(dart.core::int index) → dart.core::int*
-      return this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int*};
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(covariant-by-class dart.core::Iterable<dart.core::int*> other) → dart.core::Iterable<dart.core::int*>
-      return dart._internal::FollowedByIterable::firstEfficient<dart.core::int*>(this, other);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ forEach((dart.core::int*) → void action) → void {
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ iterator() → dart.core::Iterator<dart.core::int>
+      return new dart._internal::ListIterator::•<dart.core::int>(this);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ elementAt(dart.core::int index) → dart.core::int
+      return this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int};
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(covariant-by-class dart.core::Iterable<dart.core::int> other) → dart.core::Iterable<dart.core::int>
+      return dart._internal::FollowedByIterable::firstEfficient<dart.core::int>(this, other);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ forEach((dart.core::int) → void action) → void {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        action(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → void};
+        action(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int) → void};
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
     }
     @#C3
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isEmpty() → dart.core::bool
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isEmpty() → dart.core::bool
       return this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0;
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isNotEmpty() → dart.core::bool
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isNotEmpty() → dart.core::bool
       return !this.{dart.collection::ListMixin::isEmpty}{dart.core::bool};
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ single() → dart.core::int* {
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ single() → dart.core::int {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
       if(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::>}(1){(dart.core::num) → dart.core::bool})
         throw dart._internal::IterableElementError::tooMany();
-      return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
+      return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ contains(dart.core::Object? element) → dart.core::bool {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ contains(dart.core::Object? element) → dart.core::bool {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
           return true;
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
@@ -69,10 +65,10 @@
       }
       return false;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ every((dart.core::int*) → dart.core::bool test) → dart.core::bool {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ every((dart.core::int) → dart.core::bool test) → dart.core::bool {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        if(!test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
+        if(!test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int) → dart.core::bool})
           return false;
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
@@ -80,10 +76,10 @@
       }
       return true;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ any((dart.core::int*) → dart.core::bool test) → dart.core::bool {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ any((dart.core::int) → dart.core::bool test) → dart.core::bool {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
+        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int) → dart.core::bool})
           return true;
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
@@ -91,41 +87,41 @@
       }
       return false;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ firstWhere((dart.core::int*) → dart.core::bool test, {covariant-by-class () →? dart.core::int* orElse = #C2}) → dart.core::int* {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ firstWhere((dart.core::int) → dart.core::bool test, {covariant-by-class () →? dart.core::int orElse = #C2}) → dart.core::int {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
-        if(test(element){(dart.core::int*) → dart.core::bool})
+        dart.core::int element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int};
+        if(test(element){(dart.core::int) → dart.core::bool})
           return element;
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       if(!(orElse == null))
-        return orElse{() → dart.core::int*}(){() → dart.core::int*};
+        return orElse{() → dart.core::int}(){() → dart.core::int};
       throw dart._internal::IterableElementError::noElement();
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastWhere((dart.core::int*) → dart.core::bool test, {covariant-by-class () →? dart.core::int* orElse = #C2}) → dart.core::int* {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastWhere((dart.core::int) → dart.core::bool test, {covariant-by-class () →? dart.core::int orElse = #C2}) → dart.core::int {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
-        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
-        if(test(element){(dart.core::int*) → dart.core::bool})
+        dart.core::int element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int};
+        if(test(element){(dart.core::int) → dart.core::bool})
           return element;
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       if(!(orElse == null))
-        return orElse{() → dart.core::int*}(){() → dart.core::int*};
+        return orElse{() → dart.core::int}(){() → dart.core::int};
       throw dart._internal::IterableElementError::noElement();
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ singleWhere((dart.core::int*) → dart.core::bool test, {covariant-by-class () →? dart.core::int* orElse = #C2}) → dart.core::int* {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ singleWhere((dart.core::int) → dart.core::bool test, {covariant-by-class () →? dart.core::int orElse = #C2}) → dart.core::int {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
-      late dart.core::int* match;
+      late dart.core::int match;
       dart.core::bool matchFound = false;
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
-        if(test(element){(dart.core::int*) → dart.core::bool}) {
+        dart.core::int element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int};
+        if(test(element){(dart.core::int) → dart.core::bool}) {
           if(matchFound) {
             throw dart._internal::IterableElementError::tooMany();
           }
@@ -139,10 +135,10 @@
       if(matchFound)
         return match;
       if(!(orElse == null))
-        return orElse{() → dart.core::int*}(){() → dart.core::int*};
+        return orElse{() → dart.core::int}(){() → dart.core::int};
       throw dart._internal::IterableElementError::noElement();
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ join([dart.core::String separator = #C4]) → dart.core::String {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ join([dart.core::String separator = #C4]) → dart.core::String {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         return "";
       dart.core::StringBuffer buffer = let final dart.core::StringBuffer #t1 = new dart.core::StringBuffer::•() in block {
@@ -150,142 +146,142 @@
       } =>#t1;
       return buffer.{dart.core::StringBuffer::toString}(){() → dart.core::String};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ where((dart.core::int*) → dart.core::bool test) → dart.core::Iterable<dart.core::int*>
-      return new dart._internal::WhereIterable::•<dart.core::int*>(this, test);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ whereType<T extends dart.core::Object? = dynamic>() → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::whereType::T%>
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ where((dart.core::int) → dart.core::bool test) → dart.core::Iterable<dart.core::int>
+      return new dart._internal::WhereIterable::•<dart.core::int>(this, test);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ whereType<T extends dart.core::Object? = dynamic>() → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::whereType::T%>
       return new dart._internal::WhereTypeIterable::•<main::_WithListMixin&Object&ListMixin::whereType::T%>(this);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ map<T extends dart.core::Object? = dynamic>((dart.core::int*) → main::_WithListMixin&Object&ListMixin::map::T% f) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::map::T%>
-      return new dart._internal::MappedListIterable::•<dart.core::int*, main::_WithListMixin&Object&ListMixin::map::T%>(this, f);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ expand<T extends dart.core::Object? = dynamic>((dart.core::int*) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%> f) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%>
-      return new dart._internal::ExpandIterable::•<dart.core::int*, main::_WithListMixin&Object&ListMixin::expand::T%>(this, f);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reduce(covariant-by-class (dart.core::int*, dart.core::int*) → dart.core::int* combine) → dart.core::int* {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ map<T extends dart.core::Object? = dynamic>((dart.core::int) → main::_WithListMixin&Object&ListMixin::map::T% f) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::map::T%>
+      return new dart._internal::MappedListIterable::•<dart.core::int, main::_WithListMixin&Object&ListMixin::map::T%>(this, f);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ expand<T extends dart.core::Object? = dynamic>((dart.core::int) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%> f) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%>
+      return new dart._internal::ExpandIterable::•<dart.core::int, main::_WithListMixin&Object&ListMixin::expand::T%>(this, f);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reduce(covariant-by-class (dart.core::int, dart.core::int) → dart.core::int combine) → dart.core::int {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       if(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      dart.core::int* value = this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
+      dart.core::int value = this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int};
       for (dart.core::int i = 1; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        value = combine(value, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*, dart.core::int*) → dart.core::int*};
+        value = combine(value, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int, dart.core::int) → dart.core::int};
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       return value;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fold<T extends dart.core::Object? = dynamic>(main::_WithListMixin&Object&ListMixin::fold::T% initialValue, (main::_WithListMixin&Object&ListMixin::fold::T%, dart.core::int*) → main::_WithListMixin&Object&ListMixin::fold::T% combine) → main::_WithListMixin&Object&ListMixin::fold::T% {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fold<T extends dart.core::Object? = dynamic>(main::_WithListMixin&Object&ListMixin::fold::T% initialValue, (main::_WithListMixin&Object&ListMixin::fold::T%, dart.core::int) → main::_WithListMixin&Object&ListMixin::fold::T% combine) → main::_WithListMixin&Object&ListMixin::fold::T% {
       main::_WithListMixin&Object&ListMixin::fold::T% value = initialValue;
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        value = combine(value, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(main::_WithListMixin&Object&ListMixin::fold::T%, dart.core::int*) → main::_WithListMixin&Object&ListMixin::fold::T%};
+        value = combine(value, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(main::_WithListMixin&Object&ListMixin::fold::T%, dart.core::int) → main::_WithListMixin&Object&ListMixin::fold::T%};
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       return value;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ skip(dart.core::int count) → dart.core::Iterable<dart.core::int*>
-      return new dart._internal::SubListIterable::•<dart.core::int*>(this, count, null);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ skipWhile((dart.core::int*) → dart.core::bool test) → dart.core::Iterable<dart.core::int*> {
-      return new dart._internal::SkipWhileIterable::•<dart.core::int*>(this, test);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ skip(dart.core::int count) → dart.core::Iterable<dart.core::int>
+      return new dart._internal::SubListIterable::•<dart.core::int>(this, count, null);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ skipWhile((dart.core::int) → dart.core::bool test) → dart.core::Iterable<dart.core::int> {
+      return new dart._internal::SkipWhileIterable::•<dart.core::int>(this, test);
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ take(dart.core::int count) → dart.core::Iterable<dart.core::int*>
-      return new dart._internal::SubListIterable::•<dart.core::int*>(this, 0, dart._internal::checkNotNullable<dart.core::int>(count, "count"));
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ takeWhile((dart.core::int*) → dart.core::bool test) → dart.core::Iterable<dart.core::int*> {
-      return new dart._internal::TakeWhileIterable::•<dart.core::int*>(this, test);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ take(dart.core::int count) → dart.core::Iterable<dart.core::int>
+      return new dart._internal::SubListIterable::•<dart.core::int>(this, 0, dart._internal::checkNotNullable<dart.core::int>(count, "count"));
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ takeWhile((dart.core::int) → dart.core::bool test) → dart.core::Iterable<dart.core::int> {
+      return new dart._internal::TakeWhileIterable::•<dart.core::int>(this, test);
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toList({dart.core::bool growable = #C5}) → dart.core::List<dart.core::int*> {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toList({dart.core::bool growable = #C5}) → dart.core::List<dart.core::int> {
       if(this.{dart.collection::ListMixin::isEmpty}{dart.core::bool})
-        return dart.core::List::empty<dart.core::int*>(growable: growable);
-      dart.core::int* first = this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
-      dart.core::List<dart.core::int*> result = dart.core::List::filled<dart.core::int*>(this.{dart.core::List::length}{dart.core::int}, first, growable: growable);
+        return dart.core::List::empty<dart.core::int>(growable: growable);
+      dart.core::int first = this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int};
+      dart.core::List<dart.core::int> result = dart.core::List::filled<dart.core::int>(this.{dart.core::List::length}{dart.core::int}, first, growable: growable);
       for (dart.core::int i = 1; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        result.{dart.core::List::[]=}(i, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
+        result.{dart.core::List::[]=}(i, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int, dart.core::int) → void};
       }
       return result;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toSet() → dart.core::Set<dart.core::int*> {
-      dart.core::Set<dart.core::int*> result = new dart.collection::_CompactLinkedHashSet::•<dart.core::int*>();
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toSet() → dart.core::Set<dart.core::int> {
+      dart.core::Set<dart.core::int> result = new dart.collection::_CompactLinkedHashSet::•<dart.core::int>();
       for (dart.core::int i = 0; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        result.{dart.core::Set::add}(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool};
+        result.{dart.core::Set::add}(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int) → dart.core::bool};
       }
       return result;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ add(covariant-by-class dart.core::int* element) → void {
-      this.{dart.core::List::[]=}(let final dart.core::int #t2 = this.{dart.core::List::length}{dart.core::int} in let final dart.core::int #t3 = this.{dart.core::List::length} = #t2.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t2, element){(dart.core::int, dart.core::int*) → void};
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ add(covariant-by-class dart.core::int element) → void {
+      this.{dart.core::List::[]=}(let final dart.core::int #t2 = this.{dart.core::List::length}{dart.core::int} in let final dart.core::int #t3 = this.{dart.core::List::length} = #t2.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t2, element){(dart.core::int, dart.core::int) → void};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ addAll(covariant-by-class dart.core::Iterable<dart.core::int*> iterable) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ addAll(covariant-by-class dart.core::Iterable<dart.core::int> iterable) → void {
       dart.core::int i = this.{dart.core::List::length}{dart.core::int};
       {
-        dart.core::Iterator<dart.core::int*> :sync-for-iterator = iterable.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int*>};
+        dart.core::Iterator<dart.core::int> :sync-for-iterator = iterable.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int>};
         for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(){() → dart.core::bool}; ) {
-          dart.core::int* element = :sync-for-iterator.{dart.core::Iterator::current}{dart.core::int*};
+          dart.core::int element = :sync-for-iterator.{dart.core::Iterator::current}{dart.core::int};
           {
             assert(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} i || (throw new dart.core::ConcurrentModificationError::•(this)));
-            this.{dart.collection::ListMixin::add}(element){(dart.core::int*) → void};
+            this.{dart.collection::ListMixin::add}(element){(dart.core::int) → void};
             i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int};
           }
         }
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ remove(dart.core::Object? element) → dart.core::bool {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ remove(dart.core::Object? element) → dart.core::bool {
       for (dart.core::int i = 0; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element) {
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element) {
           this.{dart.collection::ListMixin::_closeGap}(i, i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}){(dart.core::int, dart.core::int) → void};
           return true;
         }
       }
       return false;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _closeGap(dart.core::int start, dart.core::int end) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _closeGap(dart.core::int start, dart.core::int end) → void {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       assert(0.{dart.core::num::<=}(start){(dart.core::num) → dart.core::bool});
       assert(start.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool});
       assert(end.{dart.core::num::<=}(length){(dart.core::num) → dart.core::bool});
       dart.core::int size = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
       for (dart.core::int i = end; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        this.{dart.core::List::[]=}(i.{dart.core::num::-}(size){(dart.core::num) → dart.core::int}, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
+        this.{dart.core::List::[]=}(i.{dart.core::num::-}(size){(dart.core::num) → dart.core::int}, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int, dart.core::int) → void};
       }
       this.{dart.core::List::length} = length.{dart.core::num::-}(size){(dart.core::num) → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeWhere((dart.core::int*) → dart.core::bool test) → void {
-      this.{dart.collection::ListMixin::_filter}(test, false){((dart.core::int*) → dart.core::bool, dart.core::bool) → void};
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeWhere((dart.core::int) → dart.core::bool test) → void {
+      this.{dart.collection::ListMixin::_filter}(test, false){((dart.core::int) → dart.core::bool, dart.core::bool) → void};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ retainWhere((dart.core::int*) → dart.core::bool test) → void {
-      this.{dart.collection::ListMixin::_filter}(test, true){((dart.core::int*) → dart.core::bool, dart.core::bool) → void};
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ retainWhere((dart.core::int) → dart.core::bool test) → void {
+      this.{dart.collection::ListMixin::_filter}(test, true){((dart.core::int) → dart.core::bool, dart.core::bool) → void};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _filter((dart.core::int*) → dart.core::bool test, dart.core::bool retainMatching) → void {
-      dart.core::List<dart.core::int*> retained = dart.core::_GrowableList::•<dart.core::int*>(0);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _filter((dart.core::int) → dart.core::bool test, dart.core::bool retainMatching) → void {
+      dart.core::List<dart.core::int> retained = dart.core::_GrowableList::•<dart.core::int>(0);
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
-        if(test(element){(dart.core::int*) → dart.core::bool} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} retainMatching) {
-          retained.{dart.core::List::add}(element){(dart.core::int*) → void};
+        dart.core::int element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int};
+        if(test(element){(dart.core::int) → dart.core::bool} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} retainMatching) {
+          retained.{dart.core::List::add}(element){(dart.core::int) → void};
         }
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       if(!(retained.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
-        this.{dart.collection::ListMixin::setRange}(0, retained.{dart.core::List::length}{dart.core::int}, retained){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        this.{dart.collection::ListMixin::setRange}(0, retained.{dart.core::List::length}{dart.core::int}, retained){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
         this.{dart.core::List::length} = retained.{dart.core::List::length}{dart.core::int};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ clear() → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ clear() → void {
       this.{dart.core::List::length} = 0;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ cast<R extends dart.core::Object? = dynamic>() → dart.core::List<main::_WithListMixin&Object&ListMixin::cast::R%>
-      return dart.core::List::castFrom<dart.core::int*, main::_WithListMixin&Object&ListMixin::cast::R%>(this);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeLast() → dart.core::int* {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ cast<R extends dart.core::Object? = dynamic>() → dart.core::List<main::_WithListMixin&Object&ListMixin::cast::R%>
+      return dart.core::List::castFrom<dart.core::int, main::_WithListMixin&Object&ListMixin::cast::R%>(this);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeLast() → dart.core::int {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0) {
         throw dart._internal::IterableElementError::noElement();
       }
-      dart.core::int* result = this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*};
+      dart.core::int result = this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int};
       this.{dart.core::List::length} = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
       return result;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sort([(dart.core::int*, dart.core::int*) →? dart.core::int compare = #C2]) → void {
-      dart._internal::Sort::sort<dart.core::int*>(this, let final (dart.core::int*, dart.core::int*) →? dart.core::int #t4 = compare in #t4 == null ?{(dart.core::int*, dart.core::int*) → dart.core::int} #C6 : #t4{(dart.core::int*, dart.core::int*) → dart.core::int});
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sort([(dart.core::int, dart.core::int) →? dart.core::int compare = #C2]) → void {
+      dart._internal::Sort::sort<dart.core::int>(this, let final (dart.core::int, dart.core::int) →? dart.core::int #t4 = compare in #t4 == null ?{(dart.core::int, dart.core::int) → dart.core::int} #C6 : #t4{(dart.core::int, dart.core::int) → dart.core::int});
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random? random = #C2]) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random? random = #C2]) → void {
       random == null ?{dart.math::Random} random = dart.math::Random::•() : null;
       if(random{dart.math::Random} == null)
         throw "!";
@@ -293,58 +289,58 @@
       while (length.{dart.core::num::>}(1){(dart.core::num) → dart.core::bool}) {
         dart.core::int pos = random{dart.math::Random}.{dart.math::Random::nextInt}(length){(dart.core::int) → dart.core::int};
         length = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
-        dart.core::int* tmp = this.{dart.core::List::[]}(length){(dart.core::int) → dart.core::int*};
-        this.{dart.core::List::[]=}(length, this.{dart.core::List::[]}(pos){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
-        this.{dart.core::List::[]=}(pos, tmp){(dart.core::int, dart.core::int*) → void};
+        dart.core::int tmp = this.{dart.core::List::[]}(length){(dart.core::int) → dart.core::int};
+        this.{dart.core::List::[]=}(length, this.{dart.core::List::[]}(pos){(dart.core::int) → dart.core::int}){(dart.core::int, dart.core::int) → void};
+        this.{dart.core::List::[]=}(pos, tmp){(dart.core::int, dart.core::int) → void};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ asMap() → dart.core::Map<dart.core::int, dart.core::int*> {
-      return new dart._internal::ListMapView::•<dart.core::int*>(this);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ asMap() → dart.core::Map<dart.core::int, dart.core::int> {
+      return new dart._internal::ListMapView::•<dart.core::int>(this);
     }
-    operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(covariant-by-class dart.core::List<dart.core::int*> other) → dart.core::List<dart.core::int*>
+    operator /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(covariant-by-class dart.core::List<dart.core::int> other) → dart.core::List<dart.core::int>
       return block {
-        final dart.core::List<dart.core::int*> #t5 = dart.core::List::of<dart.core::int*>(this);
-        #t5.{dart.core::List::addAll}{Invariant}(other){(dart.core::Iterable<dart.core::int*>) → void};
+        final dart.core::List<dart.core::int> #t5 = dart.core::List::of<dart.core::int>(this);
+        #t5.{dart.core::List::addAll}{Invariant}(other){(dart.core::Iterable<dart.core::int>) → void};
       } =>#t5;
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(dart.core::int start, [dart.core::int? end = #C2]) → dart.core::List<dart.core::int*> {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(dart.core::int start, [dart.core::int? end = #C2]) → dart.core::List<dart.core::int> {
       dart.core::int listLength = this.{dart.core::List::length}{dart.core::int};
       end == null ?{dart.core::int} end = listLength : null;
       if(end{dart.core::int} == null)
         throw "!";
       dart.core::RangeError::checkValidRange(start, end{dart.core::int}, listLength);
-      return dart.core::List::from<dart.core::int*>(this.{dart.collection::ListMixin::getRange}(start, end{dart.core::int}){(dart.core::int, dart.core::int) → dart.core::Iterable<dart.core::int*>});
+      return dart.core::List::from<dart.core::int>(this.{dart.collection::ListMixin::getRange}(start, end{dart.core::int}){(dart.core::int, dart.core::int) → dart.core::Iterable<dart.core::int>});
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ getRange(dart.core::int start, dart.core::int end) → dart.core::Iterable<dart.core::int*> {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ getRange(dart.core::int start, dart.core::int end) → dart.core::Iterable<dart.core::int> {
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
-      return new dart._internal::SubListIterable::•<dart.core::int*>(this, start, end);
+      return new dart._internal::SubListIterable::•<dart.core::int>(this, start, end);
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeRange(dart.core::int start, dart.core::int end) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeRange(dart.core::int start, dart.core::int end) → void {
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       if(end.{dart.core::num::>}(start){(dart.core::num) → dart.core::bool}) {
         this.{dart.collection::ListMixin::_closeGap}(start, end){(dart.core::int, dart.core::int) → void};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fillRange(dart.core::int start, dart.core::int end, [covariant-by-class dart.core::int? fill = #C2]) → void {
-      dart.core::int* value = let dart.core::int? #t6 = fill in #t6 == null ?{dart.core::int*} #t6 : #t6{dart.core::int*};
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fillRange(dart.core::int start, dart.core::int end, [covariant-by-class dart.core::int? fill = #C2]) → void {
+      dart.core::int value = let dart.core::int? #t6 = fill in #t6 == null ?{dart.core::int} #t6 : #t6{dart.core::int};
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       for (dart.core::int i = start; i.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        this.{dart.core::List::[]=}(i, value){(dart.core::int, dart.core::int*) → void};
+        this.{dart.core::List::[]=}(i, value){(dart.core::int, dart.core::int) → void};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setRange(dart.core::int start, dart.core::int end, covariant-by-class dart.core::Iterable<dart.core::int*> iterable, [dart.core::int skipCount = #C7]) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setRange(dart.core::int start, dart.core::int end, covariant-by-class dart.core::Iterable<dart.core::int> iterable, [dart.core::int skipCount = #C7]) → void {
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       dart.core::int length = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
       if(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         return;
       dart.core::RangeError::checkNotNegative(skipCount, "skipCount");
-      dart.core::List<dart.core::int*> otherList;
+      dart.core::List<dart.core::int> otherList;
       dart.core::int otherStart;
-      if(iterable is{ForNonNullableByDefault} dart.core::List<dart.core::int*>) {
-        otherList = iterable{dart.core::List<dart.core::int*>};
+      if(iterable is{ForNonNullableByDefault} dart.core::List<dart.core::int>) {
+        otherList = iterable{dart.core::List<dart.core::int>};
         otherStart = skipCount;
       }
       else {
-        otherList = iterable.{dart.core::Iterable::skip}(skipCount){(dart.core::int) → dart.core::Iterable<dart.core::int*>}.{dart.core::Iterable::toList}(growable: false){({growable: dart.core::bool}) → dart.core::List<dart.core::int*>};
+        otherList = iterable.{dart.core::Iterable::skip}(skipCount){(dart.core::int) → dart.core::Iterable<dart.core::int>}.{dart.core::Iterable::toList}(growable: false){({growable: dart.core::bool}) → dart.core::List<dart.core::int>};
         otherStart = 0;
       }
       if(otherStart.{dart.core::num::+}(length){(dart.core::num) → dart.core::int}.{dart.core::num::>}(otherList.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}) {
@@ -352,29 +348,29 @@
       }
       if(otherStart.{dart.core::num::<}(start){(dart.core::num) → dart.core::bool}) {
         for (dart.core::int i = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
-          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}, otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
+          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}, otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int}){(dart.core::int, dart.core::int) → void};
         }
       }
       else {
         for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}, otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
+          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}, otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int}){(dart.core::int, dart.core::int) → void};
         }
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ replaceRange(dart.core::int start, dart.core::int end, covariant-by-class dart.core::Iterable<dart.core::int*> newContents) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ replaceRange(dart.core::int start, dart.core::int end, covariant-by-class dart.core::Iterable<dart.core::int> newContents) → void {
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       if(start =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
-        this.{dart.collection::ListMixin::addAll}(newContents){(dart.core::Iterable<dart.core::int*>) → void};
+        this.{dart.collection::ListMixin::addAll}(newContents){(dart.core::Iterable<dart.core::int>) → void};
         return;
       }
       if(!(newContents is{ForNonNullableByDefault} dart._internal::EfficientLengthIterable<dynamic>)) {
-        newContents = newContents.{dart.core::Iterable::toList}(){({growable: dart.core::bool}) → dart.core::List<dart.core::int*>};
+        newContents = newContents.{dart.core::Iterable::toList}(){({growable: dart.core::bool}) → dart.core::List<dart.core::int>};
       }
       dart.core::int removeLength = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
       dart.core::int insertLength = newContents.{dart.core::Iterable::length}{dart.core::int};
       if(removeLength.{dart.core::num::>=}(insertLength){(dart.core::num) → dart.core::bool}) {
         dart.core::int insertEnd = start.{dart.core::num::+}(insertLength){(dart.core::num) → dart.core::int};
-        this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
         if(removeLength.{dart.core::num::>}(insertLength){(dart.core::num) → dart.core::bool}) {
           this.{dart.collection::ListMixin::_closeGap}(insertEnd, end){(dart.core::int, dart.core::int) → void};
         }
@@ -383,15 +379,15 @@
         if(end =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
           dart.core::int i = start;
           {
-            dart.core::Iterator<dart.core::int*> :sync-for-iterator = newContents.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int*>};
+            dart.core::Iterator<dart.core::int> :sync-for-iterator = newContents.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int>};
             for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(){() → dart.core::bool}; ) {
-              dart.core::int* element = :sync-for-iterator.{dart.core::Iterator::current}{dart.core::int*};
+              dart.core::int element = :sync-for-iterator.{dart.core::Iterator::current}{dart.core::int};
               {
                 if(i.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool}) {
-                  this.{dart.core::List::[]=}(i, element){(dart.core::int, dart.core::int*) → void};
+                  this.{dart.core::List::[]=}(i, element){(dart.core::int, dart.core::int) → void};
                 }
                 else {
-                  this.{dart.collection::ListMixin::add}(element){(dart.core::int*) → void};
+                  this.{dart.collection::ListMixin::add}(element){(dart.core::int) → void};
                 }
                 i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int};
               }
@@ -403,77 +399,77 @@
           dart.core::int oldLength = this.{dart.core::List::length}{dart.core::int};
           dart.core::int insertEnd = start.{dart.core::num::+}(insertLength){(dart.core::num) → dart.core::int};
           for (dart.core::int i = oldLength.{dart.core::num::-}(delta){(dart.core::num) → dart.core::int}; i.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-            this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool} ?{dart.core::int} i : 0){(dart.core::int) → dart.core::int*}){(dart.core::int*) → void};
+            this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool} ?{dart.core::int} i : 0){(dart.core::int) → dart.core::int}){(dart.core::int) → void};
           }
           if(insertEnd.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}) {
-            this.{dart.collection::ListMixin::setRange}(insertEnd, oldLength, this, end){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+            this.{dart.collection::ListMixin::setRange}(insertEnd, oldLength, this, end){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
           }
-          this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+          this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
         }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexOf(covariant-by-class dart.core::Object? element, [dart.core::int start = #C7]) → dart.core::int {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexOf(covariant-by-class dart.core::Object? element, [dart.core::int start = #C7]) → dart.core::int {
       if(start.{dart.core::num::<}(0){(dart.core::num) → dart.core::bool})
         start = 0;
       for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
           return i;
       }
       return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexWhere((dart.core::int*) → dart.core::bool test, [dart.core::int start = #C7]) → dart.core::int {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexWhere((dart.core::int) → dart.core::bool test, [dart.core::int start = #C7]) → dart.core::int {
       if(start.{dart.core::num::<}(0){(dart.core::num) → dart.core::bool})
         start = 0;
       for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
+        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int) → dart.core::bool})
           return i;
       }
       return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexOf(covariant-by-class dart.core::Object? element, [dart.core::int? start = #C2]) → dart.core::int {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexOf(covariant-by-class dart.core::Object? element, [dart.core::int? start = #C2]) → dart.core::int {
       if(start == null || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool})
         start = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
       if(start{dart.core::int} == null)
         throw "!";
       for (dart.core::int i = start{dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
-        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
           return i;
       }
       return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexWhere((dart.core::int*) → dart.core::bool test, [dart.core::int? start = #C2]) → dart.core::int {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexWhere((dart.core::int) → dart.core::bool test, [dart.core::int? start = #C2]) → dart.core::int {
       if(start == null || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool})
         start = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
       if(start{dart.core::int} == null)
         throw "!";
       for (dart.core::int i = start{dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
-        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
+        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int) → dart.core::bool})
           return i;
       }
       return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insert(dart.core::int index, covariant-by-class dart.core::int* element) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insert(dart.core::int index, covariant-by-class dart.core::int element) → void {
       dart._internal::checkNotNullable<dart.core::int>(index, "index");
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       dart.core::RangeError::checkValueInInterval(index, 0, length, "index");
-      this.{dart.collection::ListMixin::add}(element){(dart.core::int*) → void};
+      this.{dart.collection::ListMixin::add}(element){(dart.core::int) → void};
       if(!(index =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} length)) {
-        this.{dart.collection::ListMixin::setRange}(index.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}, length.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}, this, index){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
-        this.{dart.core::List::[]=}(index, element){(dart.core::int, dart.core::int*) → void};
+        this.{dart.collection::ListMixin::setRange}(index.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}, length.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}, this, index){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
+        this.{dart.core::List::[]=}(index, element){(dart.core::int, dart.core::int) → void};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeAt(dart.core::int index) → dart.core::int* {
-      dart.core::int* result = this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int*};
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeAt(dart.core::int index) → dart.core::int {
+      dart.core::int result = this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int};
       this.{dart.collection::ListMixin::_closeGap}(index, index.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}){(dart.core::int, dart.core::int) → void};
       return result;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insertAll(dart.core::int index, covariant-by-class dart.core::Iterable<dart.core::int*> iterable) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insertAll(dart.core::int index, covariant-by-class dart.core::Iterable<dart.core::int> iterable) → void {
       dart.core::RangeError::checkValueInInterval(index, 0, this.{dart.core::List::length}{dart.core::int}, "index");
       if(index =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
-        this.{dart.collection::ListMixin::addAll}(iterable){(dart.core::Iterable<dart.core::int*>) → void};
+        this.{dart.collection::ListMixin::addAll}(iterable){(dart.core::Iterable<dart.core::int>) → void};
         return;
       }
       if(!(iterable is{ForNonNullableByDefault} dart._internal::EfficientLengthIterable<dynamic>) || dart.core::identical(iterable, this)) {
-        iterable = iterable.{dart.core::Iterable::toList}(){({growable: dart.core::bool}) → dart.core::List<dart.core::int*>};
+        iterable = iterable.{dart.core::Iterable::toList}(){({growable: dart.core::bool}) → dart.core::List<dart.core::int>};
       }
       dart.core::int insertionLength = iterable.{dart.core::Iterable::length}{dart.core::int};
       if(insertionLength =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0) {
@@ -481,7 +477,7 @@
       }
       dart.core::int oldLength = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = oldLength.{dart.core::num::-}(insertionLength){(dart.core::num) → dart.core::int}; i.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool} ?{dart.core::int} i : 0){(dart.core::int) → dart.core::int*}){(dart.core::int*) → void};
+        this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool} ?{dart.core::int} i : 0){(dart.core::int) → dart.core::int}){(dart.core::int) → void};
       }
       if(!(iterable.{dart.core::Iterable::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} insertionLength)) {
         this.{dart.core::List::length} = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(insertionLength){(dart.core::num) → dart.core::int};
@@ -489,51 +485,42 @@
       }
       dart.core::int oldCopyStart = index.{dart.core::num::+}(insertionLength){(dart.core::num) → dart.core::int};
       if(oldCopyStart.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}) {
-        this.{dart.collection::ListMixin::setRange}(oldCopyStart, oldLength, this, index){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        this.{dart.collection::ListMixin::setRange}(oldCopyStart, oldLength, this, index){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
       }
-      this.{dart.collection::ListMixin::setAll}(index, iterable){(dart.core::int, dart.core::Iterable<dart.core::int*>) → void};
+      this.{dart.collection::ListMixin::setAll}(index, iterable){(dart.core::int, dart.core::Iterable<dart.core::int>) → void};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setAll(dart.core::int index, covariant-by-class dart.core::Iterable<dart.core::int*> iterable) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setAll(dart.core::int index, covariant-by-class dart.core::Iterable<dart.core::int> iterable) → void {
       if(iterable is{ForNonNullableByDefault} dart.core::List<dynamic>) {
-        this.{dart.collection::ListMixin::setRange}(index, index.{dart.core::num::+}(iterable.{dart.core::Iterable::length}{dart.core::int}){(dart.core::num) → dart.core::int}, iterable){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        this.{dart.collection::ListMixin::setRange}(index, index.{dart.core::num::+}(iterable.{dart.core::Iterable::length}{dart.core::int}){(dart.core::num) → dart.core::int}, iterable){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
       }
       else {
         {
-          dart.core::Iterator<dart.core::int*> :sync-for-iterator = iterable.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int*>};
+          dart.core::Iterator<dart.core::int> :sync-for-iterator = iterable.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int>};
           for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(){() → dart.core::bool}; ) {
-            dart.core::int* element = :sync-for-iterator.{dart.core::Iterator::current}{dart.core::int*};
+            dart.core::int element = :sync-for-iterator.{dart.core::Iterator::current}{dart.core::int};
             {
-              this.{dart.core::List::[]=}(let final dart.core::int #t7 = index in let final dart.core::int #t8 = index = #t7.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t7, element){(dart.core::int, dart.core::int*) → void};
+              this.{dart.core::List::[]=}(let final dart.core::int #t7 = index in let final dart.core::int #t8 = index = #t7.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t7, element){(dart.core::int, dart.core::int) → void};
             }
           }
         }
       }
     }
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reversed() → dart.core::Iterable<dart.core::int*>
-      return new dart._internal::ReversedListIterable::•<dart.core::int*>(this);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toString() → dart.core::String
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reversed() → dart.core::Iterable<dart.core::int>
+      return new dart._internal::ReversedListIterable::•<dart.core::int>(this);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toString() → dart.core::String
       return dart.collection::IterableBase::iterableToFullString(this, "[", "]");
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    static method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _compareAny(dynamic a, dynamic b) → dart.core::int {
+    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{ForNonNullableByDefault} dart.core::Comparable<dynamic>, b as{ForNonNullableByDefault} dart.core::Comparable<dynamic>);
     }
   }
   class WithListMixin extends main::_WithListMixin&Object&ListMixin {
-    field dart.core::int* length = 2;
-    synthetic constructor •() → main::WithListMixin*
+    field dart.core::int length = 2;
+    synthetic constructor •() → main::WithListMixin
       : super main::_WithListMixin&Object&ListMixin::•()
       ;
-    operator [](dart.core::int* index) → dart.core::int*
+    operator [](dart.core::int index) → dart.core::int
       return index;
-    operator []=(dart.core::int* index, covariant-by-class dart.core::int* value) → void
+    operator []=(dart.core::int index, covariant-by-class dart.core::int value) → void
       return null;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect
index 985ec21..168470b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect
@@ -3,65 +3,61 @@
 
   import "dart:collection" show ListMixin;
 
-  abstract class _WithListMixin&Object&ListMixin extends dart.core::Object implements dart.collection::ListMixin<dart.core::int*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-    const synthetic constructor •() → main::_WithListMixin&Object&ListMixin*
+  abstract class _WithListMixin&Object&ListMixin extends dart.core::Object implements dart.collection::ListMixin<dart.core::int> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+    const synthetic constructor •() → main::_WithListMixin&Object&ListMixin
       : super dart.core::Object::•()
       ;
-    abstract member-signature get length() → dart.core::int*; -> dart.core::List::length
-    abstract member-signature set length(dart.core::int* newLength) → void; -> dart.core::List::length
-    abstract member-signature operator [](dart.core::int* index) → dart.core::int*; -> dart.core::List::[]
-    abstract member-signature operator []=(dart.core::int* index, covariant-by-class dart.core::int* value) → void; -> dart.core::List::[]=
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first() → dart.core::int* {
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first() → dart.core::int {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
+      return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int};
     }
-    set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first(covariant-by-class dart.core::int* value) → void {
+    set /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first(covariant-by-class dart.core::int value) → void {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      this.{dart.core::List::[]=}(0, value){(dart.core::int, dart.core::int*) → void};
+      this.{dart.core::List::[]=}(0, value){(dart.core::int, dart.core::int) → void};
     }
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last() → dart.core::int* {
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last() → dart.core::int {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      return this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*};
+      return this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int};
     }
-    set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last(covariant-by-class dart.core::int* value) → void {
+    set /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last(covariant-by-class dart.core::int value) → void {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      this.{dart.core::List::[]=}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}, value){(dart.core::int, dart.core::int*) → void};
+      this.{dart.core::List::[]=}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}, value){(dart.core::int, dart.core::int) → void};
     }
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ iterator() → dart.core::Iterator<dart.core::int*>
-      return new dart._internal::ListIterator::•<dart.core::int*>(this);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ elementAt(dart.core::int index) → dart.core::int*
-      return this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int*};
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(covariant-by-class dart.core::Iterable<dart.core::int*> other) → dart.core::Iterable<dart.core::int*>
-      return dart._internal::FollowedByIterable::firstEfficient<dart.core::int*>(this, other);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ forEach((dart.core::int*) → void action) → void {
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ iterator() → dart.core::Iterator<dart.core::int>
+      return new dart._internal::ListIterator::•<dart.core::int>(this);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ elementAt(dart.core::int index) → dart.core::int
+      return this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int};
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(covariant-by-class dart.core::Iterable<dart.core::int> other) → dart.core::Iterable<dart.core::int>
+      return dart._internal::FollowedByIterable::firstEfficient<dart.core::int>(this, other);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ forEach((dart.core::int) → void action) → void {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        action(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → void};
+        action(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int) → void};
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
     }
     @#C3
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isEmpty() → dart.core::bool
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isEmpty() → dart.core::bool
       return this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0;
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isNotEmpty() → dart.core::bool
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isNotEmpty() → dart.core::bool
       return !this.{dart.collection::ListMixin::isEmpty}{dart.core::bool};
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ single() → dart.core::int* {
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ single() → dart.core::int {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
       if(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::>}(1){(dart.core::num) → dart.core::bool})
         throw dart._internal::IterableElementError::tooMany();
-      return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
+      return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ contains(dart.core::Object? element) → dart.core::bool {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ contains(dart.core::Object? element) → dart.core::bool {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
           return true;
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
@@ -69,10 +65,10 @@
       }
       return false;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ every((dart.core::int*) → dart.core::bool test) → dart.core::bool {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ every((dart.core::int) → dart.core::bool test) → dart.core::bool {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        if(!test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
+        if(!test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int) → dart.core::bool})
           return false;
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
@@ -80,10 +76,10 @@
       }
       return true;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ any((dart.core::int*) → dart.core::bool test) → dart.core::bool {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ any((dart.core::int) → dart.core::bool test) → dart.core::bool {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
+        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int) → dart.core::bool})
           return true;
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
@@ -91,41 +87,41 @@
       }
       return false;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ firstWhere((dart.core::int*) → dart.core::bool test, {covariant-by-class () →? dart.core::int* orElse = #C2}) → dart.core::int* {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ firstWhere((dart.core::int) → dart.core::bool test, {covariant-by-class () →? dart.core::int orElse = #C2}) → dart.core::int {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
-        if(test(element){(dart.core::int*) → dart.core::bool})
+        dart.core::int element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int};
+        if(test(element){(dart.core::int) → dart.core::bool})
           return element;
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       if(!(orElse == null))
-        return orElse{() → dart.core::int*}(){() → dart.core::int*};
+        return orElse{() → dart.core::int}(){() → dart.core::int};
       throw dart._internal::IterableElementError::noElement();
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastWhere((dart.core::int*) → dart.core::bool test, {covariant-by-class () →? dart.core::int* orElse = #C2}) → dart.core::int* {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastWhere((dart.core::int) → dart.core::bool test, {covariant-by-class () →? dart.core::int orElse = #C2}) → dart.core::int {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
-        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
-        if(test(element){(dart.core::int*) → dart.core::bool})
+        dart.core::int element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int};
+        if(test(element){(dart.core::int) → dart.core::bool})
           return element;
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       if(!(orElse == null))
-        return orElse{() → dart.core::int*}(){() → dart.core::int*};
+        return orElse{() → dart.core::int}(){() → dart.core::int};
       throw dart._internal::IterableElementError::noElement();
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ singleWhere((dart.core::int*) → dart.core::bool test, {covariant-by-class () →? dart.core::int* orElse = #C2}) → dart.core::int* {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ singleWhere((dart.core::int) → dart.core::bool test, {covariant-by-class () →? dart.core::int orElse = #C2}) → dart.core::int {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
-      late dart.core::int* match;
+      late dart.core::int match;
       dart.core::bool matchFound = false;
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
-        if(test(element){(dart.core::int*) → dart.core::bool}) {
+        dart.core::int element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int};
+        if(test(element){(dart.core::int) → dart.core::bool}) {
           if(matchFound) {
             throw dart._internal::IterableElementError::tooMany();
           }
@@ -139,10 +135,10 @@
       if(matchFound)
         return match;
       if(!(orElse == null))
-        return orElse{() → dart.core::int*}(){() → dart.core::int*};
+        return orElse{() → dart.core::int}(){() → dart.core::int};
       throw dart._internal::IterableElementError::noElement();
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ join([dart.core::String separator = #C4]) → dart.core::String {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ join([dart.core::String separator = #C4]) → dart.core::String {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         return "";
       dart.core::StringBuffer buffer = let final dart.core::StringBuffer #t1 = new dart.core::StringBuffer::•() in block {
@@ -150,142 +146,142 @@
       } =>#t1;
       return buffer.{dart.core::StringBuffer::toString}(){() → dart.core::String};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ where((dart.core::int*) → dart.core::bool test) → dart.core::Iterable<dart.core::int*>
-      return new dart._internal::WhereIterable::•<dart.core::int*>(this, test);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ whereType<T extends dart.core::Object? = dynamic>() → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::whereType::T%>
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ where((dart.core::int) → dart.core::bool test) → dart.core::Iterable<dart.core::int>
+      return new dart._internal::WhereIterable::•<dart.core::int>(this, test);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ whereType<T extends dart.core::Object? = dynamic>() → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::whereType::T%>
       return new dart._internal::WhereTypeIterable::•<main::_WithListMixin&Object&ListMixin::whereType::T%>(this);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ map<T extends dart.core::Object? = dynamic>((dart.core::int*) → main::_WithListMixin&Object&ListMixin::map::T% f) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::map::T%>
-      return new dart._internal::MappedListIterable::•<dart.core::int*, main::_WithListMixin&Object&ListMixin::map::T%>(this, f);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ expand<T extends dart.core::Object? = dynamic>((dart.core::int*) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%> f) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%>
-      return new dart._internal::ExpandIterable::•<dart.core::int*, main::_WithListMixin&Object&ListMixin::expand::T%>(this, f);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reduce(covariant-by-class (dart.core::int*, dart.core::int*) → dart.core::int* combine) → dart.core::int* {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ map<T extends dart.core::Object? = dynamic>((dart.core::int) → main::_WithListMixin&Object&ListMixin::map::T% f) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::map::T%>
+      return new dart._internal::MappedListIterable::•<dart.core::int, main::_WithListMixin&Object&ListMixin::map::T%>(this, f);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ expand<T extends dart.core::Object? = dynamic>((dart.core::int) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%> f) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%>
+      return new dart._internal::ExpandIterable::•<dart.core::int, main::_WithListMixin&Object&ListMixin::expand::T%>(this, f);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reduce(covariant-by-class (dart.core::int, dart.core::int) → dart.core::int combine) → dart.core::int {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       if(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      dart.core::int* value = this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
+      dart.core::int value = this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int};
       for (dart.core::int i = 1; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        value = combine(value, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*, dart.core::int*) → dart.core::int*};
+        value = combine(value, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int, dart.core::int) → dart.core::int};
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       return value;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fold<T extends dart.core::Object? = dynamic>(main::_WithListMixin&Object&ListMixin::fold::T% initialValue, (main::_WithListMixin&Object&ListMixin::fold::T%, dart.core::int*) → main::_WithListMixin&Object&ListMixin::fold::T% combine) → main::_WithListMixin&Object&ListMixin::fold::T% {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fold<T extends dart.core::Object? = dynamic>(main::_WithListMixin&Object&ListMixin::fold::T% initialValue, (main::_WithListMixin&Object&ListMixin::fold::T%, dart.core::int) → main::_WithListMixin&Object&ListMixin::fold::T% combine) → main::_WithListMixin&Object&ListMixin::fold::T% {
       main::_WithListMixin&Object&ListMixin::fold::T% value = initialValue;
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        value = combine(value, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(main::_WithListMixin&Object&ListMixin::fold::T%, dart.core::int*) → main::_WithListMixin&Object&ListMixin::fold::T%};
+        value = combine(value, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(main::_WithListMixin&Object&ListMixin::fold::T%, dart.core::int) → main::_WithListMixin&Object&ListMixin::fold::T%};
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       return value;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ skip(dart.core::int count) → dart.core::Iterable<dart.core::int*>
-      return new dart._internal::SubListIterable::•<dart.core::int*>(this, count, null);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ skipWhile((dart.core::int*) → dart.core::bool test) → dart.core::Iterable<dart.core::int*> {
-      return new dart._internal::SkipWhileIterable::•<dart.core::int*>(this, test);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ skip(dart.core::int count) → dart.core::Iterable<dart.core::int>
+      return new dart._internal::SubListIterable::•<dart.core::int>(this, count, null);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ skipWhile((dart.core::int) → dart.core::bool test) → dart.core::Iterable<dart.core::int> {
+      return new dart._internal::SkipWhileIterable::•<dart.core::int>(this, test);
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ take(dart.core::int count) → dart.core::Iterable<dart.core::int*>
-      return new dart._internal::SubListIterable::•<dart.core::int*>(this, 0, dart._internal::checkNotNullable<dart.core::int>(count, "count"));
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ takeWhile((dart.core::int*) → dart.core::bool test) → dart.core::Iterable<dart.core::int*> {
-      return new dart._internal::TakeWhileIterable::•<dart.core::int*>(this, test);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ take(dart.core::int count) → dart.core::Iterable<dart.core::int>
+      return new dart._internal::SubListIterable::•<dart.core::int>(this, 0, dart._internal::checkNotNullable<dart.core::int>(count, "count"));
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ takeWhile((dart.core::int) → dart.core::bool test) → dart.core::Iterable<dart.core::int> {
+      return new dart._internal::TakeWhileIterable::•<dart.core::int>(this, test);
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toList({dart.core::bool growable = #C5}) → dart.core::List<dart.core::int*> {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toList({dart.core::bool growable = #C5}) → dart.core::List<dart.core::int> {
       if(this.{dart.collection::ListMixin::isEmpty}{dart.core::bool})
-        return dart.core::List::empty<dart.core::int*>(growable: growable);
-      dart.core::int* first = this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
-      dart.core::List<dart.core::int*> result = dart.core::List::filled<dart.core::int*>(this.{dart.core::List::length}{dart.core::int}, first, growable: growable);
+        return dart.core::List::empty<dart.core::int>(growable: growable);
+      dart.core::int first = this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int};
+      dart.core::List<dart.core::int> result = dart.core::List::filled<dart.core::int>(this.{dart.core::List::length}{dart.core::int}, first, growable: growable);
       for (dart.core::int i = 1; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        result.{dart.core::List::[]=}(i, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
+        result.{dart.core::List::[]=}(i, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int, dart.core::int) → void};
       }
       return result;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toSet() → dart.core::Set<dart.core::int*> {
-      dart.core::Set<dart.core::int*> result = new dart.collection::_CompactLinkedHashSet::•<dart.core::int*>();
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toSet() → dart.core::Set<dart.core::int> {
+      dart.core::Set<dart.core::int> result = new dart.collection::_CompactLinkedHashSet::•<dart.core::int>();
       for (dart.core::int i = 0; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        result.{dart.core::Set::add}(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool};
+        result.{dart.core::Set::add}(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int) → dart.core::bool};
       }
       return result;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ add(covariant-by-class dart.core::int* element) → void {
-      this.{dart.core::List::[]=}(let final dart.core::int #t2 = this.{dart.core::List::length}{dart.core::int} in let final dart.core::int #t3 = this.{dart.core::List::length} = #t2.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t2, element){(dart.core::int, dart.core::int*) → void};
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ add(covariant-by-class dart.core::int element) → void {
+      this.{dart.core::List::[]=}(let final dart.core::int #t2 = this.{dart.core::List::length}{dart.core::int} in let final dart.core::int #t3 = this.{dart.core::List::length} = #t2.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t2, element){(dart.core::int, dart.core::int) → void};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ addAll(covariant-by-class dart.core::Iterable<dart.core::int*> iterable) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ addAll(covariant-by-class dart.core::Iterable<dart.core::int> iterable) → void {
       dart.core::int i = this.{dart.core::List::length}{dart.core::int};
       {
-        dart.core::Iterator<dart.core::int*> :sync-for-iterator = iterable.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int*>};
+        dart.core::Iterator<dart.core::int> :sync-for-iterator = iterable.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int>};
         for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(){() → dart.core::bool}; ) {
-          dart.core::int* element = :sync-for-iterator.{dart.core::Iterator::current}{dart.core::int*};
+          dart.core::int element = :sync-for-iterator.{dart.core::Iterator::current}{dart.core::int};
           {
             assert(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} i || (throw new dart.core::ConcurrentModificationError::•(this)));
-            this.{dart.collection::ListMixin::add}(element){(dart.core::int*) → void};
+            this.{dart.collection::ListMixin::add}(element){(dart.core::int) → void};
             i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int};
           }
         }
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ remove(dart.core::Object? element) → dart.core::bool {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ remove(dart.core::Object? element) → dart.core::bool {
       for (dart.core::int i = 0; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element) {
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element) {
           this.{dart.collection::ListMixin::_closeGap}(i, i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}){(dart.core::int, dart.core::int) → void};
           return true;
         }
       }
       return false;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _closeGap(dart.core::int start, dart.core::int end) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _closeGap(dart.core::int start, dart.core::int end) → void {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       assert(0.{dart.core::num::<=}(start){(dart.core::num) → dart.core::bool});
       assert(start.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool});
       assert(end.{dart.core::num::<=}(length){(dart.core::num) → dart.core::bool});
       dart.core::int size = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
       for (dart.core::int i = end; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        this.{dart.core::List::[]=}(i.{dart.core::num::-}(size){(dart.core::num) → dart.core::int}, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
+        this.{dart.core::List::[]=}(i.{dart.core::num::-}(size){(dart.core::num) → dart.core::int}, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int, dart.core::int) → void};
       }
       this.{dart.core::List::length} = length.{dart.core::num::-}(size){(dart.core::num) → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeWhere((dart.core::int*) → dart.core::bool test) → void {
-      this.{dart.collection::ListMixin::_filter}(test, false){((dart.core::int*) → dart.core::bool, dart.core::bool) → void};
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeWhere((dart.core::int) → dart.core::bool test) → void {
+      this.{dart.collection::ListMixin::_filter}(test, false){((dart.core::int) → dart.core::bool, dart.core::bool) → void};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ retainWhere((dart.core::int*) → dart.core::bool test) → void {
-      this.{dart.collection::ListMixin::_filter}(test, true){((dart.core::int*) → dart.core::bool, dart.core::bool) → void};
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ retainWhere((dart.core::int) → dart.core::bool test) → void {
+      this.{dart.collection::ListMixin::_filter}(test, true){((dart.core::int) → dart.core::bool, dart.core::bool) → void};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _filter((dart.core::int*) → dart.core::bool test, dart.core::bool retainMatching) → void {
-      dart.core::List<dart.core::int*> retained = dart.core::_GrowableList::•<dart.core::int*>(0);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _filter((dart.core::int) → dart.core::bool test, dart.core::bool retainMatching) → void {
+      dart.core::List<dart.core::int> retained = dart.core::_GrowableList::•<dart.core::int>(0);
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
-        if(test(element){(dart.core::int*) → dart.core::bool} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} retainMatching) {
-          retained.{dart.core::List::add}(element){(dart.core::int*) → void};
+        dart.core::int element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int};
+        if(test(element){(dart.core::int) → dart.core::bool} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} retainMatching) {
+          retained.{dart.core::List::add}(element){(dart.core::int) → void};
         }
         if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       if(!(retained.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
-        this.{dart.collection::ListMixin::setRange}(0, retained.{dart.core::List::length}{dart.core::int}, retained){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        this.{dart.collection::ListMixin::setRange}(0, retained.{dart.core::List::length}{dart.core::int}, retained){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
         this.{dart.core::List::length} = retained.{dart.core::List::length}{dart.core::int};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ clear() → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ clear() → void {
       this.{dart.core::List::length} = 0;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ cast<R extends dart.core::Object? = dynamic>() → dart.core::List<main::_WithListMixin&Object&ListMixin::cast::R%>
-      return dart.core::List::castFrom<dart.core::int*, main::_WithListMixin&Object&ListMixin::cast::R%>(this);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeLast() → dart.core::int* {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ cast<R extends dart.core::Object? = dynamic>() → dart.core::List<main::_WithListMixin&Object&ListMixin::cast::R%>
+      return dart.core::List::castFrom<dart.core::int, main::_WithListMixin&Object&ListMixin::cast::R%>(this);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeLast() → dart.core::int {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0) {
         throw dart._internal::IterableElementError::noElement();
       }
-      dart.core::int* result = this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*};
+      dart.core::int result = this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int};
       this.{dart.core::List::length} = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
       return result;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sort([(dart.core::int*, dart.core::int*) →? dart.core::int compare = #C2]) → void {
-      dart._internal::Sort::sort<dart.core::int*>(this, let final (dart.core::int*, dart.core::int*) →? dart.core::int #t4 = compare in #t4 == null ?{(dart.core::int*, dart.core::int*) → dart.core::int} #C6 : #t4{(dart.core::int*, dart.core::int*) → dart.core::int});
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sort([(dart.core::int, dart.core::int) →? dart.core::int compare = #C2]) → void {
+      dart._internal::Sort::sort<dart.core::int>(this, let final (dart.core::int, dart.core::int) →? dart.core::int #t4 = compare in #t4 == null ?{(dart.core::int, dart.core::int) → dart.core::int} #C6 : #t4{(dart.core::int, dart.core::int) → dart.core::int});
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random? random = #C2]) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random? random = #C2]) → void {
       random == null ?{dart.math::Random} random = dart.math::Random::•() : null;
       if(random{dart.math::Random} == null)
         throw "!";
@@ -293,58 +289,58 @@
       while (length.{dart.core::num::>}(1){(dart.core::num) → dart.core::bool}) {
         dart.core::int pos = random{dart.math::Random}.{dart.math::Random::nextInt}(length){(dart.core::int) → dart.core::int};
         length = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
-        dart.core::int* tmp = this.{dart.core::List::[]}(length){(dart.core::int) → dart.core::int*};
-        this.{dart.core::List::[]=}(length, this.{dart.core::List::[]}(pos){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
-        this.{dart.core::List::[]=}(pos, tmp){(dart.core::int, dart.core::int*) → void};
+        dart.core::int tmp = this.{dart.core::List::[]}(length){(dart.core::int) → dart.core::int};
+        this.{dart.core::List::[]=}(length, this.{dart.core::List::[]}(pos){(dart.core::int) → dart.core::int}){(dart.core::int, dart.core::int) → void};
+        this.{dart.core::List::[]=}(pos, tmp){(dart.core::int, dart.core::int) → void};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ asMap() → dart.core::Map<dart.core::int, dart.core::int*> {
-      return new dart._internal::ListMapView::•<dart.core::int*>(this);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ asMap() → dart.core::Map<dart.core::int, dart.core::int> {
+      return new dart._internal::ListMapView::•<dart.core::int>(this);
     }
-    operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(covariant-by-class dart.core::List<dart.core::int*> other) → dart.core::List<dart.core::int*>
+    operator /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(covariant-by-class dart.core::List<dart.core::int> other) → dart.core::List<dart.core::int>
       return block {
-        final dart.core::List<dart.core::int*> #t5 = dart.core::List::of<dart.core::int*>(this);
-        #t5.{dart.core::List::addAll}{Invariant}(other){(dart.core::Iterable<dart.core::int*>) → void};
+        final dart.core::List<dart.core::int> #t5 = dart.core::List::of<dart.core::int>(this);
+        #t5.{dart.core::List::addAll}{Invariant}(other){(dart.core::Iterable<dart.core::int>) → void};
       } =>#t5;
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(dart.core::int start, [dart.core::int? end = #C2]) → dart.core::List<dart.core::int*> {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(dart.core::int start, [dart.core::int? end = #C2]) → dart.core::List<dart.core::int> {
       dart.core::int listLength = this.{dart.core::List::length}{dart.core::int};
       end == null ?{dart.core::int} end = listLength : null;
       if(end{dart.core::int} == null)
         throw "!";
       dart.core::RangeError::checkValidRange(start, end{dart.core::int}, listLength);
-      return dart.core::List::from<dart.core::int*>(this.{dart.collection::ListMixin::getRange}(start, end{dart.core::int}){(dart.core::int, dart.core::int) → dart.core::Iterable<dart.core::int*>});
+      return dart.core::List::from<dart.core::int>(this.{dart.collection::ListMixin::getRange}(start, end{dart.core::int}){(dart.core::int, dart.core::int) → dart.core::Iterable<dart.core::int>});
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ getRange(dart.core::int start, dart.core::int end) → dart.core::Iterable<dart.core::int*> {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ getRange(dart.core::int start, dart.core::int end) → dart.core::Iterable<dart.core::int> {
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
-      return new dart._internal::SubListIterable::•<dart.core::int*>(this, start, end);
+      return new dart._internal::SubListIterable::•<dart.core::int>(this, start, end);
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeRange(dart.core::int start, dart.core::int end) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeRange(dart.core::int start, dart.core::int end) → void {
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       if(end.{dart.core::num::>}(start){(dart.core::num) → dart.core::bool}) {
         this.{dart.collection::ListMixin::_closeGap}(start, end){(dart.core::int, dart.core::int) → void};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fillRange(dart.core::int start, dart.core::int end, [covariant-by-class dart.core::int? fill = #C2]) → void {
-      dart.core::int* value = let dart.core::int? #t6 = fill in #t6 == null ?{dart.core::int*} #t6 : #t6{dart.core::int*};
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fillRange(dart.core::int start, dart.core::int end, [covariant-by-class dart.core::int? fill = #C2]) → void {
+      dart.core::int value = let dart.core::int? #t6 = fill in #t6 == null ?{dart.core::int} #t6 : #t6{dart.core::int};
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       for (dart.core::int i = start; i.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        this.{dart.core::List::[]=}(i, value){(dart.core::int, dart.core::int*) → void};
+        this.{dart.core::List::[]=}(i, value){(dart.core::int, dart.core::int) → void};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setRange(dart.core::int start, dart.core::int end, covariant-by-class dart.core::Iterable<dart.core::int*> iterable, [dart.core::int skipCount = #C7]) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setRange(dart.core::int start, dart.core::int end, covariant-by-class dart.core::Iterable<dart.core::int> iterable, [dart.core::int skipCount = #C7]) → void {
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       dart.core::int length = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
       if(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         return;
       dart.core::RangeError::checkNotNegative(skipCount, "skipCount");
-      dart.core::List<dart.core::int*> otherList;
+      dart.core::List<dart.core::int> otherList;
       dart.core::int otherStart;
-      if(iterable is{ForNonNullableByDefault} dart.core::List<dart.core::int*>) {
-        otherList = iterable{dart.core::List<dart.core::int*>};
+      if(iterable is{ForNonNullableByDefault} dart.core::List<dart.core::int>) {
+        otherList = iterable{dart.core::List<dart.core::int>};
         otherStart = skipCount;
       }
       else {
-        otherList = iterable.{dart.core::Iterable::skip}(skipCount){(dart.core::int) → dart.core::Iterable<dart.core::int*>}.{dart.core::Iterable::toList}(growable: false){({growable: dart.core::bool}) → dart.core::List<dart.core::int*>};
+        otherList = iterable.{dart.core::Iterable::skip}(skipCount){(dart.core::int) → dart.core::Iterable<dart.core::int>}.{dart.core::Iterable::toList}(growable: false){({growable: dart.core::bool}) → dart.core::List<dart.core::int>};
         otherStart = 0;
       }
       if(otherStart.{dart.core::num::+}(length){(dart.core::num) → dart.core::int}.{dart.core::num::>}(otherList.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}) {
@@ -352,29 +348,29 @@
       }
       if(otherStart.{dart.core::num::<}(start){(dart.core::num) → dart.core::bool}) {
         for (dart.core::int i = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
-          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}, otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
+          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}, otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int}){(dart.core::int, dart.core::int) → void};
         }
       }
       else {
         for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}, otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
+          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}, otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int}){(dart.core::int, dart.core::int) → void};
         }
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ replaceRange(dart.core::int start, dart.core::int end, covariant-by-class dart.core::Iterable<dart.core::int*> newContents) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ replaceRange(dart.core::int start, dart.core::int end, covariant-by-class dart.core::Iterable<dart.core::int> newContents) → void {
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       if(start =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
-        this.{dart.collection::ListMixin::addAll}(newContents){(dart.core::Iterable<dart.core::int*>) → void};
+        this.{dart.collection::ListMixin::addAll}(newContents){(dart.core::Iterable<dart.core::int>) → void};
         return;
       }
       if(!(newContents is{ForNonNullableByDefault} dart._internal::EfficientLengthIterable<dynamic>)) {
-        newContents = newContents.{dart.core::Iterable::toList}(){({growable: dart.core::bool}) → dart.core::List<dart.core::int*>};
+        newContents = newContents.{dart.core::Iterable::toList}(){({growable: dart.core::bool}) → dart.core::List<dart.core::int>};
       }
       dart.core::int removeLength = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
       dart.core::int insertLength = newContents.{dart.core::Iterable::length}{dart.core::int};
       if(removeLength.{dart.core::num::>=}(insertLength){(dart.core::num) → dart.core::bool}) {
         dart.core::int insertEnd = start.{dart.core::num::+}(insertLength){(dart.core::num) → dart.core::int};
-        this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
         if(removeLength.{dart.core::num::>}(insertLength){(dart.core::num) → dart.core::bool}) {
           this.{dart.collection::ListMixin::_closeGap}(insertEnd, end){(dart.core::int, dart.core::int) → void};
         }
@@ -383,15 +379,15 @@
         if(end =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
           dart.core::int i = start;
           {
-            dart.core::Iterator<dart.core::int*> :sync-for-iterator = newContents.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int*>};
+            dart.core::Iterator<dart.core::int> :sync-for-iterator = newContents.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int>};
             for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(){() → dart.core::bool}; ) {
-              dart.core::int* element = :sync-for-iterator.{dart.core::Iterator::current}{dart.core::int*};
+              dart.core::int element = :sync-for-iterator.{dart.core::Iterator::current}{dart.core::int};
               {
                 if(i.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool}) {
-                  this.{dart.core::List::[]=}(i, element){(dart.core::int, dart.core::int*) → void};
+                  this.{dart.core::List::[]=}(i, element){(dart.core::int, dart.core::int) → void};
                 }
                 else {
-                  this.{dart.collection::ListMixin::add}(element){(dart.core::int*) → void};
+                  this.{dart.collection::ListMixin::add}(element){(dart.core::int) → void};
                 }
                 i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int};
               }
@@ -403,77 +399,77 @@
           dart.core::int oldLength = this.{dart.core::List::length}{dart.core::int};
           dart.core::int insertEnd = start.{dart.core::num::+}(insertLength){(dart.core::num) → dart.core::int};
           for (dart.core::int i = oldLength.{dart.core::num::-}(delta){(dart.core::num) → dart.core::int}; i.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-            this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool} ?{dart.core::int} i : 0){(dart.core::int) → dart.core::int*}){(dart.core::int*) → void};
+            this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool} ?{dart.core::int} i : 0){(dart.core::int) → dart.core::int}){(dart.core::int) → void};
           }
           if(insertEnd.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}) {
-            this.{dart.collection::ListMixin::setRange}(insertEnd, oldLength, this, end){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+            this.{dart.collection::ListMixin::setRange}(insertEnd, oldLength, this, end){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
           }
-          this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+          this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
         }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexOf(covariant-by-class dart.core::Object? element, [dart.core::int start = #C7]) → dart.core::int {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexOf(covariant-by-class dart.core::Object? element, [dart.core::int start = #C7]) → dart.core::int {
       if(start.{dart.core::num::<}(0){(dart.core::num) → dart.core::bool})
         start = 0;
       for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
           return i;
       }
       return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexWhere((dart.core::int*) → dart.core::bool test, [dart.core::int start = #C7]) → dart.core::int {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexWhere((dart.core::int) → dart.core::bool test, [dart.core::int start = #C7]) → dart.core::int {
       if(start.{dart.core::num::<}(0){(dart.core::num) → dart.core::bool})
         start = 0;
       for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
+        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int) → dart.core::bool})
           return i;
       }
       return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexOf(covariant-by-class dart.core::Object? element, [dart.core::int? start = #C2]) → dart.core::int {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexOf(covariant-by-class dart.core::Object? element, [dart.core::int? start = #C2]) → dart.core::int {
       if(start == null || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool})
         start = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
       if(start{dart.core::int} == null)
         throw "!";
       for (dart.core::int i = start{dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
-        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
           return i;
       }
       return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexWhere((dart.core::int*) → dart.core::bool test, [dart.core::int? start = #C2]) → dart.core::int {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexWhere((dart.core::int) → dart.core::bool test, [dart.core::int? start = #C2]) → dart.core::int {
       if(start == null || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool})
         start = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
       if(start{dart.core::int} == null)
         throw "!";
       for (dart.core::int i = start{dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
-        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
+        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int}){(dart.core::int) → dart.core::bool})
           return i;
       }
       return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insert(dart.core::int index, covariant-by-class dart.core::int* element) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insert(dart.core::int index, covariant-by-class dart.core::int element) → void {
       dart._internal::checkNotNullable<dart.core::int>(index, "index");
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       dart.core::RangeError::checkValueInInterval(index, 0, length, "index");
-      this.{dart.collection::ListMixin::add}(element){(dart.core::int*) → void};
+      this.{dart.collection::ListMixin::add}(element){(dart.core::int) → void};
       if(!(index =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} length)) {
-        this.{dart.collection::ListMixin::setRange}(index.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}, length.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}, this, index){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
-        this.{dart.core::List::[]=}(index, element){(dart.core::int, dart.core::int*) → void};
+        this.{dart.collection::ListMixin::setRange}(index.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}, length.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}, this, index){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
+        this.{dart.core::List::[]=}(index, element){(dart.core::int, dart.core::int) → void};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeAt(dart.core::int index) → dart.core::int* {
-      dart.core::int* result = this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int*};
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeAt(dart.core::int index) → dart.core::int {
+      dart.core::int result = this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int};
       this.{dart.collection::ListMixin::_closeGap}(index, index.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}){(dart.core::int, dart.core::int) → void};
       return result;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insertAll(dart.core::int index, covariant-by-class dart.core::Iterable<dart.core::int*> iterable) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insertAll(dart.core::int index, covariant-by-class dart.core::Iterable<dart.core::int> iterable) → void {
       dart.core::RangeError::checkValueInInterval(index, 0, this.{dart.core::List::length}{dart.core::int}, "index");
       if(index =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
-        this.{dart.collection::ListMixin::addAll}(iterable){(dart.core::Iterable<dart.core::int*>) → void};
+        this.{dart.collection::ListMixin::addAll}(iterable){(dart.core::Iterable<dart.core::int>) → void};
         return;
       }
       if(!(iterable is{ForNonNullableByDefault} dart._internal::EfficientLengthIterable<dynamic>) || dart.core::identical(iterable, this)) {
-        iterable = iterable.{dart.core::Iterable::toList}(){({growable: dart.core::bool}) → dart.core::List<dart.core::int*>};
+        iterable = iterable.{dart.core::Iterable::toList}(){({growable: dart.core::bool}) → dart.core::List<dart.core::int>};
       }
       dart.core::int insertionLength = iterable.{dart.core::Iterable::length}{dart.core::int};
       if(insertionLength =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0) {
@@ -481,7 +477,7 @@
       }
       dart.core::int oldLength = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = oldLength.{dart.core::num::-}(insertionLength){(dart.core::num) → dart.core::int}; i.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
-        this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool} ?{dart.core::int} i : 0){(dart.core::int) → dart.core::int*}){(dart.core::int*) → void};
+        this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool} ?{dart.core::int} i : 0){(dart.core::int) → dart.core::int}){(dart.core::int) → void};
       }
       if(!(iterable.{dart.core::Iterable::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} insertionLength)) {
         this.{dart.core::List::length} = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(insertionLength){(dart.core::num) → dart.core::int};
@@ -489,51 +485,42 @@
       }
       dart.core::int oldCopyStart = index.{dart.core::num::+}(insertionLength){(dart.core::num) → dart.core::int};
       if(oldCopyStart.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}) {
-        this.{dart.collection::ListMixin::setRange}(oldCopyStart, oldLength, this, index){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        this.{dart.collection::ListMixin::setRange}(oldCopyStart, oldLength, this, index){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
       }
-      this.{dart.collection::ListMixin::setAll}(index, iterable){(dart.core::int, dart.core::Iterable<dart.core::int*>) → void};
+      this.{dart.collection::ListMixin::setAll}(index, iterable){(dart.core::int, dart.core::Iterable<dart.core::int>) → void};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setAll(dart.core::int index, covariant-by-class dart.core::Iterable<dart.core::int*> iterable) → void {
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setAll(dart.core::int index, covariant-by-class dart.core::Iterable<dart.core::int> iterable) → void {
       if(iterable is{ForNonNullableByDefault} dart.core::List<dynamic>) {
-        this.{dart.collection::ListMixin::setRange}(index, index.{dart.core::num::+}(iterable.{dart.core::Iterable::length}{dart.core::int}){(dart.core::num) → dart.core::int}, iterable){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        this.{dart.collection::ListMixin::setRange}(index, index.{dart.core::num::+}(iterable.{dart.core::Iterable::length}{dart.core::int}){(dart.core::num) → dart.core::int}, iterable){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int>, [dart.core::int]) → void};
       }
       else {
         {
-          dart.core::Iterator<dart.core::int*> :sync-for-iterator = iterable.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int*>};
+          dart.core::Iterator<dart.core::int> :sync-for-iterator = iterable.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int>};
           for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(){() → dart.core::bool}; ) {
-            dart.core::int* element = :sync-for-iterator.{dart.core::Iterator::current}{dart.core::int*};
+            dart.core::int element = :sync-for-iterator.{dart.core::Iterator::current}{dart.core::int};
             {
-              this.{dart.core::List::[]=}(let final dart.core::int #t7 = index in let final dart.core::int #t8 = index = #t7.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t7, element){(dart.core::int, dart.core::int*) → void};
+              this.{dart.core::List::[]=}(let final dart.core::int #t7 = index in let final dart.core::int #t8 = index = #t7.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t7, element){(dart.core::int, dart.core::int) → void};
             }
           }
         }
       }
     }
-    get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reversed() → dart.core::Iterable<dart.core::int*>
-      return new dart._internal::ReversedListIterable::•<dart.core::int*>(this);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toString() → dart.core::String
+    get /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reversed() → dart.core::Iterable<dart.core::int>
+      return new dart._internal::ReversedListIterable::•<dart.core::int>(this);
+    method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toString() → dart.core::String
       return dart.collection::IterableBase::iterableToFullString(this, "[", "]");
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
-    static method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _compareAny(dynamic a, dynamic b) → dart.core::int {
+    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{ForNonNullableByDefault} dart.core::Comparable<dynamic>, b as{ForNonNullableByDefault} dart.core::Comparable<dynamic>);
     }
   }
   class WithListMixin extends main::_WithListMixin&Object&ListMixin {
-    field dart.core::int* length = 2;
-    synthetic constructor •() → main::WithListMixin*
+    field dart.core::int length = 2;
+    synthetic constructor •() → main::WithListMixin
       : super main::_WithListMixin&Object&ListMixin::•()
       ;
-    operator [](dart.core::int* index) → dart.core::int*
+    operator [](dart.core::int index) → dart.core::int
       return index;
-    operator []=(dart.core::int* index, covariant-by-class dart.core::int* value) → void
+    operator []=(dart.core::int index, covariant-by-class dart.core::int value) → void
       return null;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_23.yaml b/pkg/front_end/testcases/incremental/no_outline_change_23.yaml
index 17f8538..30b121e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_23.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_23.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         class A extends Object with B {
           foo() {}
         }
@@ -27,7 +26,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         class A extends Object with B {
           foo() {}
         }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_23.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_23.yaml.world.1.expect
index 5d03f68..b7af66b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_23.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_23.yaml.world.1.expect
@@ -2,41 +2,21 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   abstract class _A&Object&B extends dart.core::Object implements main::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-    const synthetic constructor •() → main::_A&Object&B*
+    const synthetic constructor •() → main::_A&Object&B
       : super dart.core::Object::•()
       ;
     method bar() → dynamic {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class A extends main::_A&Object&B {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super main::_A&Object&B::•()
       ;
     method foo() → dynamic {}
   }
   class B extends dart.core::Object {
-    synthetic constructor •() → main::B*
+    synthetic constructor •() → main::B
       : super dart.core::Object::•()
       ;
     method bar() → dynamic {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_23.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_23.yaml.world.2.expect
index 5d03f68..b7af66b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_23.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_23.yaml.world.2.expect
@@ -2,41 +2,21 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   abstract class _A&Object&B extends dart.core::Object implements main::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-    const synthetic constructor •() → main::_A&Object&B*
+    const synthetic constructor •() → main::_A&Object&B
       : super dart.core::Object::•()
       ;
     method bar() → dynamic {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class A extends main::_A&Object&B {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super main::_A&Object&B::•()
       ;
     method foo() → dynamic {}
   }
   class B extends dart.core::Object {
-    synthetic constructor •() → main::B*
+    synthetic constructor •() → main::B
       : super dart.core::Object::•()
       ;
     method bar() → dynamic {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml
index 3ddee3f..a68ba95 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml
@@ -13,7 +13,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         void foo() {}
         void foo() {}
     expectedLibraryCount: 1
@@ -26,7 +25,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         void foo() {}
         void foo() {}
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.1.expect
index 69cda08..c62e3af 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.1.expect
@@ -3,10 +3,10 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:6: Error: 'foo' is already declared in this scope.
+// org-dartlang-test:///main.dart:2:6: Error: 'foo' is already declared in this scope.
 // void foo() {}
 //      ^^^
-// org-dartlang-test:///main.dart:2:6: Context: Previous declaration of 'foo'.
+// org-dartlang-test:///main.dart:1:6: Context: Previous declaration of 'foo'.
 // void foo() {}
 //      ^^^
 //
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.2.expect
index 69cda08..c62e3af 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.2.expect
@@ -3,10 +3,10 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:3:6: Error: 'foo' is already declared in this scope.
+// org-dartlang-test:///main.dart:2:6: Error: 'foo' is already declared in this scope.
 // void foo() {}
 //      ^^^
-// org-dartlang-test:///main.dart:2:6: Context: Previous declaration of 'foo'.
+// org-dartlang-test:///main.dart:1:6: Context: Previous declaration of 'foo'.
 // void foo() {}
 //      ^^^
 //
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml
index 8db1940..e364005 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml
@@ -15,7 +15,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         class Foo {
           void bar() {
             print("bar 1");
@@ -37,7 +36,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         class Foo {
           void bar() {
             print("bar 1");
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect
index 3d25246..b454911 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect
@@ -3,37 +3,27 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:10:5: Error: Can't use 'bar' because it is declared more than once.
+// org-dartlang-test:///main.dart:5:8: Error: 'bar' is already declared in this scope.
+//   void bar() {
+//        ^^^
+// org-dartlang-test:///main.dart:2:8: Context: Previous declaration of 'bar'.
+//   void bar() {
+//        ^^^
+//
+// org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.
 //     bar();
 //     ^
 //
-// org-dartlang-test:///main.dart:6:8: Error: 'bar' is already declared in this scope.
-//   void bar() {
-//        ^^^
-// org-dartlang-test:///main.dart:3:8: Context: Previous declaration of 'bar'.
-//   void bar() {
-//        ^^^
-//
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
     method bar() → void {
       dart.core::print("bar 1");
     }
     method callBar() → void {
-      invalid-expression "org-dartlang-test:///main.dart:10:5: Error: Can't use 'bar' because it is declared more than once.\n    bar();\n    ^"{dynamic}.call();
+      invalid-expression "org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.\n    bar();\n    ^"{dynamic}.call();
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect
index 3d25246..b454911 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect
@@ -3,37 +3,27 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:10:5: Error: Can't use 'bar' because it is declared more than once.
+// org-dartlang-test:///main.dart:5:8: Error: 'bar' is already declared in this scope.
+//   void bar() {
+//        ^^^
+// org-dartlang-test:///main.dart:2:8: Context: Previous declaration of 'bar'.
+//   void bar() {
+//        ^^^
+//
+// org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.
 //     bar();
 //     ^
 //
-// org-dartlang-test:///main.dart:6:8: Error: 'bar' is already declared in this scope.
-//   void bar() {
-//        ^^^
-// org-dartlang-test:///main.dart:3:8: Context: Previous declaration of 'bar'.
-//   void bar() {
-//        ^^^
-//
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
     method bar() → void {
       dart.core::print("bar 1");
     }
     method callBar() → void {
-      invalid-expression "org-dartlang-test:///main.dart:10:5: Error: Can't use 'bar' because it is declared more than once.\n    bar();\n    ^"{dynamic}.call();
+      invalid-expression "org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.\n    bar();\n    ^"{dynamic}.call();
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml
index cbfff15..6fe95fa 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml
@@ -15,7 +15,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         class A1 {
           A1.foo(){}
           A1.foo(){}
@@ -33,7 +32,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         class A1 {
           A1.foo(){}
           A1.foo(){}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.1.expect
index df38521..f527185 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.1.expect
@@ -3,33 +3,23 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:3: Error: 'A1.foo' is already declared in this scope.
+// org-dartlang-test:///main.dart:3:3: Error: 'A1.foo' is already declared in this scope.
 //   A1.foo(){}
 //   ^^^^^^
-// org-dartlang-test:///main.dart:3:3: Context: Previous declaration of 'A1.foo'.
+// org-dartlang-test:///main.dart:2:3: Context: Previous declaration of 'A1.foo'.
 //   A1.foo(){}
 //   ^^^^^^
 //
-// org-dartlang-test:///main.dart:7:7: Error: Can't use 'foo' because it is declared more than once.
+// org-dartlang-test:///main.dart:6:7: Error: Can't use 'foo' because it is declared more than once.
 //   new A1.foo();
 //       ^
 //
 
   class A1 extends dart.core::Object {
-    constructor foo() → main::A1*
+    constructor foo() → main::A1
       : super dart.core::Object::•() {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic {
-    invalid-expression "org-dartlang-test:///main.dart:7:7: Error: Can't use 'foo' because it is declared more than once.\n  new A1.foo();\n      ^";
+    invalid-expression "org-dartlang-test:///main.dart:6:7: Error: Can't use 'foo' because it is declared more than once.\n  new A1.foo();\n      ^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.2.expect
index df38521..f527185 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.2.expect
@@ -3,33 +3,23 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:3: Error: 'A1.foo' is already declared in this scope.
+// org-dartlang-test:///main.dart:3:3: Error: 'A1.foo' is already declared in this scope.
 //   A1.foo(){}
 //   ^^^^^^
-// org-dartlang-test:///main.dart:3:3: Context: Previous declaration of 'A1.foo'.
+// org-dartlang-test:///main.dart:2:3: Context: Previous declaration of 'A1.foo'.
 //   A1.foo(){}
 //   ^^^^^^
 //
-// org-dartlang-test:///main.dart:7:7: Error: Can't use 'foo' because it is declared more than once.
+// org-dartlang-test:///main.dart:6:7: Error: Can't use 'foo' because it is declared more than once.
 //   new A1.foo();
 //       ^
 //
 
   class A1 extends dart.core::Object {
-    constructor foo() → main::A1*
+    constructor foo() → main::A1
       : super dart.core::Object::•() {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic {
-    invalid-expression "org-dartlang-test:///main.dart:7:7: Error: Can't use 'foo' because it is declared more than once.\n  new A1.foo();\n      ^";
+    invalid-expression "org-dartlang-test:///main.dart:6:7: Error: Can't use 'foo' because it is declared more than once.\n  new A1.foo();\n      ^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_27.yaml b/pkg/front_end/testcases/incremental/no_outline_change_27.yaml
index 380c552..2b679d0 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_27.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_27.yaml
@@ -12,13 +12,11 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart";
         main() {
           libMethod();
         }
       lib.dart: |
-        // @dart=2.9
         libMethod() {
           print("Hello from lib!");
         }
@@ -42,7 +40,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart";
         main() {
           libMethod();
@@ -59,7 +56,6 @@
       - lib.dart
     sources:
       lib.dart: |
-        // @dart=2.9
         libMethod() {
           print("Hello from lib!!");
         }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_28.yaml b/pkg/front_end/testcases/incremental/no_outline_change_28.yaml
index ead8930..091f7c5 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_28.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_28.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         abstract class A {
           a() {
             print("Class A method a");
@@ -53,7 +52,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         abstract class A {
           a() {
             print("Class A method a!");
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_28.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_28.yaml.world.1.expect
index ce393c8..a4f41ea 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_28.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_28.yaml.world.1.expect
@@ -2,22 +2,12 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   abstract class A extends dart.core::Object {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super dart.core::Object::•()
       ;
     method a() → dynamic {
       dart.core::print("Class A method a");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class B extends main::A /*isMixinDeclaration*/  {
     method b() → dynamic {
@@ -25,19 +15,9 @@
     }
   }
   abstract class _C&A&B extends dart.core::Object implements main::A, main::B /*isAnonymousMixin*/  {
-    synthetic constructor •() → main::_C&A&B*
+    synthetic constructor •() → main::_C&A&B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class C extends main::_C&A&B /*isMixinDeclaration*/  {
     method c() → dynamic {
@@ -45,7 +25,7 @@
     }
   }
   abstract class _D&A&B extends main::A implements main::B /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor •() → main::_D&A&B*
+    synthetic constructor •() → main::_D&A&B
       : super main::A::•()
       ;
     method b() → dynamic {
@@ -53,7 +33,7 @@
     }
   }
   abstract class _D&A&B&C extends main::_D&A&B implements main::C /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor •() → main::_D&A&B&C*
+    synthetic constructor •() → main::_D&A&B&C
       : super main::_D&A&B::•()
       ;
     method c() → dynamic {
@@ -61,7 +41,7 @@
     }
   }
   class D extends main::_D&A&B&C {
-    synthetic constructor •() → main::D*
+    synthetic constructor •() → main::D
       : super main::_D&A&B&C::•()
       ;
     method d() → dynamic {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_28.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_28.yaml.world.2.expect
index b0d2f22..eaed6d4 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_28.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_28.yaml.world.2.expect
@@ -2,22 +2,12 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   abstract class A extends dart.core::Object {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super dart.core::Object::•()
       ;
     method a() → dynamic {
       dart.core::print("Class A method a!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class B extends main::A /*isMixinDeclaration*/  {
     method b() → dynamic {
@@ -25,19 +15,9 @@
     }
   }
   abstract class _C&A&B extends dart.core::Object implements main::A, main::B /*isAnonymousMixin*/  {
-    synthetic constructor •() → main::_C&A&B*
+    synthetic constructor •() → main::_C&A&B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class C extends main::_C&A&B /*isMixinDeclaration*/  {
     method c() → dynamic {
@@ -45,7 +25,7 @@
     }
   }
   abstract class _D&A&B extends main::A implements main::B /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor •() → main::_D&A&B*
+    synthetic constructor •() → main::_D&A&B
       : super main::A::•()
       ;
     method b() → dynamic {
@@ -53,7 +33,7 @@
     }
   }
   abstract class _D&A&B&C extends main::_D&A&B implements main::C /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor •() → main::_D&A&B&C*
+    synthetic constructor •() → main::_D&A&B&C
       : super main::_D&A&B::•()
       ;
     method c() → dynamic {
@@ -61,7 +41,7 @@
     }
   }
   class D extends main::_D&A&B&C {
-    synthetic constructor •() → main::D*
+    synthetic constructor •() → main::D
       : super main::_D&A&B&C::•()
       ;
     method d() → dynamic {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml
index 7e1bfa9..278e445 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml
@@ -10,7 +10,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
@@ -24,7 +23,6 @@
           print(const Foo());
         }
       libA.dart: |
-        // @dart=2.9
         whatever() async {
           await null;
           return "hello";
@@ -38,7 +36,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
index fa9019c..b512f86 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
@@ -11,21 +11,12 @@
   import "org-dartlang-test:///libA.dart";
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •() → main::Foo*
+    const constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
     @#C1
-    method toString() → dart.core::String*
+    method toString() → dart.core::String
       return "Foo!";
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic async /* futureValueType= dynamic */ {
     await libA::whatever();
@@ -40,6 +31,6 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- Foo. (from org-dartlang-test:///main.dart:5:9)
+- Foo. (from org-dartlang-test:///main.dart:4:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
index e0d18ed..7d4f754 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
@@ -11,21 +11,12 @@
   import "org-dartlang-test:///libA.dart";
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •() → main::Foo*
+    const constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
     @#C1
-    method toString() → dart.core::String*
+    method toString() → dart.core::String
       return "Foo!";
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic async /* futureValueType= dynamic */ {
     await libA::whatever();
@@ -41,6 +32,6 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- Foo. (from org-dartlang-test:///main.dart:5:9)
+- Foo. (from org-dartlang-test:///main.dart:4:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml
index 1f532f7..c8fa4c6 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib2.dart" show getter, setter, method, Bar;
         import "lib1.dart" show getter, setter, method, Bar;
         main() {
@@ -21,7 +20,6 @@
           setter = 42;
         }
       lib1.dart: |
-        // @dart=2.9
         export "lib2.dart";
         class Foo {
           Foo() {
@@ -29,7 +27,6 @@
           }
         }
       lib2.dart: |
-        // @dart=2.9
         String get getter => "hello";
         void set setter(int i) {}
         void method() {}
@@ -47,7 +44,6 @@
       - lib1.dart
     sources:
       lib1.dart: |
-        // @dart=2.9
         export "lib2.dart";
         class Foo {
           Foo() {
@@ -64,7 +60,6 @@
       - lib2.dart
     sources:
       lib2.dart: |
-        // @dart=2.9
         String get getter => "hello";
         void set setter(int i) {}
         void method() {}
@@ -83,7 +78,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib2.dart" show getter, setter, method, Bar;
         import "lib1.dart" show getter, setter, method, Bar;
         main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.1.expect
index d1a27b8..dd25ba4 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.1.expect
@@ -8,39 +8,19 @@
   export "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    constructor •() → lib1::Foo*
+    constructor •() → lib1::Foo
       : super dart.core::Object::•() {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   class Bar extends dart.core::Object {
-    constructor •() → lib2::Bar*
+    constructor •() → lib2::Bar
       : super dart.core::Object::•() {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static get getter() → dart.core::String*
+  static get getter() → dart.core::String
     return "hello";
-  static set setter(dart.core::int* i) → void {}
+  static set setter(dart.core::int i) → void {}
   static method method() → void {}
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -49,7 +29,7 @@
   import "org-dartlang-test:///lib1.dart" show getter, setter, method, Bar;
 
   static method main() → dynamic {
-    lib2::Bar* bar = new lib2::Bar::•();
+    lib2::Bar bar = new lib2::Bar::•();
     lib2::method();
     lib2::getter;
     lib2::setter = 42;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.2.expect
index c983226..605792f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.2.expect
@@ -8,41 +8,21 @@
   export "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    constructor •() → lib1::Foo*
+    constructor •() → lib1::Foo
       : super dart.core::Object::•() {
       dart.core::print("Foo!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   class Bar extends dart.core::Object {
-    constructor •() → lib2::Bar*
+    constructor •() → lib2::Bar
       : super dart.core::Object::•() {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static get getter() → dart.core::String*
+  static get getter() → dart.core::String
     return "hello";
-  static set setter(dart.core::int* i) → void {}
+  static set setter(dart.core::int i) → void {}
   static method method() → void {}
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -51,7 +31,7 @@
   import "org-dartlang-test:///lib1.dart" show getter, setter, method, Bar;
 
   static method main() → dynamic {
-    lib2::Bar* bar = new lib2::Bar::•();
+    lib2::Bar bar = new lib2::Bar::•();
     lib2::method();
     lib2::getter;
     lib2::setter = 42;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.3.expect
index d408f4d..3d2b62b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.3.expect
@@ -8,43 +8,23 @@
   export "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    constructor •() → lib1::Foo*
+    constructor •() → lib1::Foo
       : super dart.core::Object::•() {
       dart.core::print("Foo!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   class Bar extends dart.core::Object {
-    constructor •() → lib2::Bar*
+    constructor •() → lib2::Bar
       : super dart.core::Object::•() {
       dart.core::print("hello!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static get getter() → dart.core::String*
+  static get getter() → dart.core::String
     return "hello";
-  static set setter(dart.core::int* i) → void {}
+  static set setter(dart.core::int i) → void {}
   static method method() → void {}
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -53,7 +33,7 @@
   import "org-dartlang-test:///lib1.dart" show getter, setter, method, Bar;
 
   static method main() → dynamic {
-    lib2::Bar* bar = new lib2::Bar::•();
+    lib2::Bar bar = new lib2::Bar::•();
     lib2::method();
     lib2::getter;
     lib2::setter = 42;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.4.expect b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.4.expect
index 49eb8f41..d74683f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml.world.4.expect
@@ -8,43 +8,23 @@
   export "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    constructor •() → lib1::Foo*
+    constructor •() → lib1::Foo
       : super dart.core::Object::•() {
       dart.core::print("Foo!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
 
   class Bar extends dart.core::Object {
-    constructor •() → lib2::Bar*
+    constructor •() → lib2::Bar
       : super dart.core::Object::•() {
       dart.core::print("hello!");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static get getter() → dart.core::String*
+  static get getter() → dart.core::String
     return "hello";
-  static set setter(dart.core::int* i) → void {}
+  static set setter(dart.core::int i) → void {}
   static method method() → void {}
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -53,7 +33,7 @@
   import "org-dartlang-test:///lib1.dart" show getter, setter, method, Bar;
 
   static method main() → dynamic {
-    lib2::Bar* bar = new lib2::Bar::•();
+    lib2::Bar bar = new lib2::Bar::•();
     lib2::method();
     lib2::getter;
     lib2::setter = 42;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml
index 7bca389..2f11a3e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         import "lib1.dart" as l1;
         import "lib2.dart";
@@ -27,7 +26,6 @@
           lib1();
         }
       lib1.dart: |
-        // @dart=2.9
         export "main.dart";
         import "main.dart";
         import "main.dart" as m;
@@ -40,7 +38,6 @@
           a.method2();
         }
       lib2.dart: |
-        // @dart=2.9
         import "lib1.dart";
         import "lib1.dart" as l1;
         extension Extension3 on Class {
@@ -60,7 +57,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib1.dart";
         import "lib1.dart" as l1;
         import "lib2.dart";
@@ -86,7 +82,6 @@
       - lib2.dart
     sources:
       lib2.dart: |
-        // @dart=2.9
         import "lib1.dart";
         import "lib1.dart" as l1;
         extension Extension3 on Class {
@@ -108,7 +103,6 @@
       - lib1.dart
     sources:
       lib1.dart: |
-        // @dart=2.9
         export "main.dart";
         import "main.dart";
         import "main.dart" as m;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.1.expect
index c1889db..fe03bc9 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.1.expect
@@ -8,15 +8,15 @@
   import "org-dartlang-test:///main.dart";
   import "org-dartlang-test:///main.dart" as m;
 
-  extension Extension2 on main::Class* {
+  extension Extension2 on main::Class {
     method method2 = lib1::Extension2|method2;
     tearoff method2 = lib1::Extension2|get#method2;
   }
-  static method Extension2|method2(lowered final main::Class* #this) → void {}
-  static method Extension2|get#method2(lowered final main::Class* #this) → () →* void
+  static method Extension2|method2(lowered final main::Class #this) → void {}
+  static method Extension2|get#method2(lowered final main::Class #this) → () → void
     return () → void => lib1::Extension2|method2(#this);
   static method lib1() → dynamic {
-    main::Class* a = new main::Class::•();
+    main::Class a = new main::Class::•();
     main::Extension|method(a);
     lib1::Extension2|method2(a);
   }
@@ -26,15 +26,15 @@
   import "org-dartlang-test:///lib1.dart";
   import "org-dartlang-test:///lib1.dart" as l1;
 
-  extension Extension3 on main::Class* {
+  extension Extension3 on main::Class {
     method method3 = lib2::Extension3|method3;
     tearoff method3 = lib2::Extension3|get#method3;
   }
-  static method Extension3|method3(lowered final main::Class* #this) → void {}
-  static method Extension3|get#method3(lowered final main::Class* #this) → () →* void
+  static method Extension3|method3(lowered final main::Class #this) → void {}
+  static method Extension3|get#method3(lowered final main::Class #this) → () → void
     return () → void => lib2::Extension3|method3(#this);
   static method lib2() → dynamic {
-    main::Class* a = new main::Class::•();
+    main::Class a = new main::Class::•();
     main::Extension|method(a);
     lib1::Extension2|method2(a);
   }
@@ -47,29 +47,19 @@
   import "org-dartlang-test:///lib2.dart" as l2;
 
   class Class extends dart.core::Object {
-    synthetic constructor •() → main::Class*
+    synthetic constructor •() → main::Class
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  extension Extension on main::Class* {
+  extension Extension on main::Class {
     method method = main::Extension|method;
     tearoff method = main::Extension|get#method;
   }
-  static method Extension|method(lowered final main::Class* #this) → void {}
-  static method Extension|get#method(lowered final main::Class* #this) → () →* void
+  static method Extension|method(lowered final main::Class #this) → void {}
+  static method Extension|get#method(lowered final main::Class #this) → () → void
     return () → void => main::Extension|method(#this);
   static method main() → dynamic {
-    main::Class* a = new main::Class::•();
+    main::Class a = new main::Class::•();
     main::Extension|method(a);
     lib1::Extension2|method2(a);
     lib1::lib1();
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.2.expect
index 7d35940..530efd6 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.2.expect
@@ -8,15 +8,15 @@
   import "org-dartlang-test:///main.dart";
   import "org-dartlang-test:///main.dart" as m;
 
-  extension Extension2 on main::Class* {
+  extension Extension2 on main::Class {
     method method2 = lib1::Extension2|method2;
     tearoff method2 = lib1::Extension2|get#method2;
   }
-  static method Extension2|method2(lowered final main::Class* #this) → void {}
-  static method Extension2|get#method2(lowered final main::Class* #this) → () →* void
+  static method Extension2|method2(lowered final main::Class #this) → void {}
+  static method Extension2|get#method2(lowered final main::Class #this) → () → void
     return () → void => lib1::Extension2|method2(#this);
   static method lib1() → dynamic {
-    main::Class* a = new main::Class::•();
+    main::Class a = new main::Class::•();
     main::Extension|method(a);
     lib1::Extension2|method2(a);
   }
@@ -26,15 +26,15 @@
   import "org-dartlang-test:///lib1.dart";
   import "org-dartlang-test:///lib1.dart" as l1;
 
-  extension Extension3 on main::Class* {
+  extension Extension3 on main::Class {
     method method3 = lib2::Extension3|method3;
     tearoff method3 = lib2::Extension3|get#method3;
   }
-  static method Extension3|method3(lowered final main::Class* #this) → void {}
-  static method Extension3|get#method3(lowered final main::Class* #this) → () →* void
+  static method Extension3|method3(lowered final main::Class #this) → void {}
+  static method Extension3|get#method3(lowered final main::Class #this) → () → void
     return () → void => lib2::Extension3|method3(#this);
   static method lib2() → dynamic {
-    main::Class* a = new main::Class::•();
+    main::Class a = new main::Class::•();
     main::Extension|method(a);
     lib1::Extension2|method2(a);
   }
@@ -47,29 +47,19 @@
   import "org-dartlang-test:///lib2.dart" as l2;
 
   class Class extends dart.core::Object {
-    synthetic constructor •() → main::Class*
+    synthetic constructor •() → main::Class
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  extension Extension on main::Class* {
+  extension Extension on main::Class {
     method method = main::Extension|method;
     tearoff method = main::Extension|get#method;
   }
-  static method Extension|method(lowered final main::Class* #this) → void {}
-  static method Extension|get#method(lowered final main::Class* #this) → () →* void
+  static method Extension|method(lowered final main::Class #this) → void {}
+  static method Extension|get#method(lowered final main::Class #this) → () → void
     return () → void => main::Extension|method(#this);
   static method main() → dynamic {
-    main::Class* a = new main::Class::•();
+    main::Class a = new main::Class::•();
     main::Extension|method(a);
     lib1::Extension2|method2(a);
     lib1::lib1();
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.3.expect
index f07ce1c..ad21410 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.3.expect
@@ -8,15 +8,15 @@
   import "org-dartlang-test:///main.dart";
   import "org-dartlang-test:///main.dart" as m;
 
-  extension Extension2 on main::Class* {
+  extension Extension2 on main::Class {
     method method2 = lib1::Extension2|method2;
     tearoff method2 = lib1::Extension2|get#method2;
   }
-  static method Extension2|method2(lowered final main::Class* #this) → void {}
-  static method Extension2|get#method2(lowered final main::Class* #this) → () →* void
+  static method Extension2|method2(lowered final main::Class #this) → void {}
+  static method Extension2|get#method2(lowered final main::Class #this) → () → void
     return () → void => lib1::Extension2|method2(#this);
   static method lib1() → dynamic {
-    main::Class* a = new main::Class::•();
+    main::Class a = new main::Class::•();
     main::Extension|method(a);
     lib1::Extension2|method2(a);
   }
@@ -26,15 +26,15 @@
   import "org-dartlang-test:///lib1.dart";
   import "org-dartlang-test:///lib1.dart" as l1;
 
-  extension Extension3 on main::Class* {
+  extension Extension3 on main::Class {
     method method3 = lib2::Extension3|method3;
     tearoff method3 = lib2::Extension3|get#method3;
   }
-  static method Extension3|method3(lowered final main::Class* #this) → void {}
-  static method Extension3|get#method3(lowered final main::Class* #this) → () →* void
+  static method Extension3|method3(lowered final main::Class #this) → void {}
+  static method Extension3|get#method3(lowered final main::Class #this) → () → void
     return () → void => lib2::Extension3|method3(#this);
   static method lib2() → dynamic {
-    main::Class* a = new main::Class::•();
+    main::Class a = new main::Class::•();
     main::Extension|method(a);
     lib1::Extension2|method2(a);
     dart.core::print("done");
@@ -48,29 +48,19 @@
   import "org-dartlang-test:///lib2.dart" as l2;
 
   class Class extends dart.core::Object {
-    synthetic constructor •() → main::Class*
+    synthetic constructor •() → main::Class
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  extension Extension on main::Class* {
+  extension Extension on main::Class {
     method method = main::Extension|method;
     tearoff method = main::Extension|get#method;
   }
-  static method Extension|method(lowered final main::Class* #this) → void {}
-  static method Extension|get#method(lowered final main::Class* #this) → () →* void
+  static method Extension|method(lowered final main::Class #this) → void {}
+  static method Extension|get#method(lowered final main::Class #this) → () → void
     return () → void => main::Extension|method(#this);
   static method main() → dynamic {
-    main::Class* a = new main::Class::•();
+    main::Class a = new main::Class::•();
     main::Extension|method(a);
     lib1::Extension2|method2(a);
     lib1::lib1();
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.4.expect b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.4.expect
index 72bb927..908cbff 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml.world.4.expect
@@ -8,15 +8,15 @@
   import "org-dartlang-test:///main.dart";
   import "org-dartlang-test:///main.dart" as m;
 
-  extension Extension2 on main::Class* {
+  extension Extension2 on main::Class {
     method method2 = lib1::Extension2|method2;
     tearoff method2 = lib1::Extension2|get#method2;
   }
-  static method Extension2|method2(lowered final main::Class* #this) → void {}
-  static method Extension2|get#method2(lowered final main::Class* #this) → () →* void
+  static method Extension2|method2(lowered final main::Class #this) → void {}
+  static method Extension2|get#method2(lowered final main::Class #this) → () → void
     return () → void => lib1::Extension2|method2(#this);
   static method lib1() → dynamic {
-    main::Class* a = new main::Class::•();
+    main::Class a = new main::Class::•();
     main::Extension|method(a);
     lib1::Extension2|method2(a);
     dart.core::print("done");
@@ -27,15 +27,15 @@
   import "org-dartlang-test:///lib1.dart";
   import "org-dartlang-test:///lib1.dart" as l1;
 
-  extension Extension3 on main::Class* {
+  extension Extension3 on main::Class {
     method method3 = lib2::Extension3|method3;
     tearoff method3 = lib2::Extension3|get#method3;
   }
-  static method Extension3|method3(lowered final main::Class* #this) → void {}
-  static method Extension3|get#method3(lowered final main::Class* #this) → () →* void
+  static method Extension3|method3(lowered final main::Class #this) → void {}
+  static method Extension3|get#method3(lowered final main::Class #this) → () → void
     return () → void => lib2::Extension3|method3(#this);
   static method lib2() → dynamic {
-    main::Class* a = new main::Class::•();
+    main::Class a = new main::Class::•();
     main::Extension|method(a);
     lib1::Extension2|method2(a);
     dart.core::print("done");
@@ -49,29 +49,19 @@
   import "org-dartlang-test:///lib2.dart" as l2;
 
   class Class extends dart.core::Object {
-    synthetic constructor •() → main::Class*
+    synthetic constructor •() → main::Class
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  extension Extension on main::Class* {
+  extension Extension on main::Class {
     method method = main::Extension|method;
     tearoff method = main::Extension|get#method;
   }
-  static method Extension|method(lowered final main::Class* #this) → void {}
-  static method Extension|get#method(lowered final main::Class* #this) → () →* void
+  static method Extension|method(lowered final main::Class #this) → void {}
+  static method Extension|get#method(lowered final main::Class #this) → () → void
     return () → void => main::Extension|method(#this);
   static method main() → dynamic {
-    main::Class* a = new main::Class::•();
+    main::Class a = new main::Class::•();
     main::Extension|method(a);
     lib1::Extension2|method2(a);
     lib1::lib1();
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml
index 41c5896..d481b5f7 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml
@@ -12,7 +12,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
 
         main() {
@@ -22,19 +21,18 @@
           print(coordinate.next);
         }
       lib.dart: |
-        // @dart=2.9
         import 'dart:ffi';
         class Coordinate extends Struct {
           @Double()
-          double x;
+          external double x;
 
           @Double()
-          double y;
+          external double y;
 
-          Pointer<Coordinate> next;
+          Pointer<Coordinate>? next;
 
-          factory Coordinate.allocate(double x, double y, Pointer<Coordinate> next) {
-            return null;
+          factory Coordinate.allocate(double x, double y, Pointer<Coordinate>? next) {
+            throw '';
           }
         }
     expectedLibraryCount: 2
@@ -46,7 +44,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
 
         main() {
@@ -66,20 +63,19 @@
       - lib.dart
     sources:
       lib.dart: |
-        // @dart=2.9
         import 'dart:ffi';
         class Coordinate extends Struct {
           @Double()
-          double x;
+          external double x;
 
           @Double()
-          double y;
+          external double y;
 
-          Pointer<Coordinate> next;
+          Pointer<Coordinate>? next;
 
-          factory Coordinate.allocate(double x, double y, Pointer<Coordinate> next) {
+          factory Coordinate.allocate(double x, double y, Pointer<Coordinate>? next) {
             print("hello");
-            return null;
+            throw '';
           }
         }
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
index b7e1762..1cde8e9 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
@@ -8,36 +8,27 @@
     constructor #fromTypedDataBase(dart.core::Object #typedDataBase) → lib::Coordinate
       : super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
       ;
-    static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
-      return null;
-    }
-    abstract member-signature get _typedDataBase() → dart.core::Object*; -> dart.ffi::_Compound::_typedDataBase
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
     @#C8
-    get x() → dart.core::double*
+    get x() → dart.core::double
       return dart.ffi::_loadDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*});
-    set x(dart.core::double* #v) → void
-      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
     @#C8
-    get y() → dart.core::double*
+    set x(dart.core::double #externalFieldValue) → void
+      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue);
+    @#C8
+    get y() → dart.core::double
       return dart.ffi::_loadDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*});
-    set y(dart.core::double* #v) → void
-      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
-    get next() → dart.ffi::Pointer<lib::Coordinate*>*
-      return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
-    set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
+    @#C8
+    set y(dart.core::double #externalFieldValue) → void
+      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue);
+    static factory allocate(dart.core::double x, dart.core::double y, dart.ffi::Pointer<lib::Coordinate>? next) → lib::Coordinate {
+      throw "";
+    }
+    get next() → dart.ffi::Pointer<lib::Coordinate>?
+      return dart.ffi::_fromAddress<lib::Coordinate>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+    set next(dart.ffi::Pointer<lib::Coordinate>? #v) → void
       return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
     @#C16
-    static get /*isNonNullableByDefault*/ #sizeOf() → dart.core::int*
+    static get #sizeOf() → dart.core::int*
       return #C19.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
   }
 }
@@ -46,10 +37,10 @@
   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::double*});
-    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double*});
-    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate*>*});
+    lib::Coordinate coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
+    dart.core::print(coordinate.{lib::Coordinate::x}{dart.core::double});
+    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double});
+    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate>?});
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
index ff06ff1..7d35a3d 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
@@ -8,36 +8,27 @@
     constructor #fromTypedDataBase(dart.core::Object #typedDataBase) → lib::Coordinate
       : super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
       ;
-    static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
-      return null;
-    }
-    abstract member-signature get _typedDataBase() → dart.core::Object*; -> dart.ffi::_Compound::_typedDataBase
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
     @#C8
-    get x() → dart.core::double*
+    get x() → dart.core::double
       return dart.ffi::_loadDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*});
-    set x(dart.core::double* #v) → void
-      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
     @#C8
-    get y() → dart.core::double*
+    set x(dart.core::double #externalFieldValue) → void
+      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue);
+    @#C8
+    get y() → dart.core::double
       return dart.ffi::_loadDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*});
-    set y(dart.core::double* #v) → void
-      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
-    get next() → dart.ffi::Pointer<lib::Coordinate*>*
-      return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
-    set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
+    @#C8
+    set y(dart.core::double #externalFieldValue) → void
+      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue);
+    static factory allocate(dart.core::double x, dart.core::double y, dart.ffi::Pointer<lib::Coordinate>? next) → lib::Coordinate {
+      throw "";
+    }
+    get next() → dart.ffi::Pointer<lib::Coordinate>?
+      return dart.ffi::_fromAddress<lib::Coordinate>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+    set next(dart.ffi::Pointer<lib::Coordinate>? #v) → void
       return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
     @#C16
-    static get /*isNonNullableByDefault*/ #sizeOf() → dart.core::int*
+    static get #sizeOf() → dart.core::int*
       return #C19.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
   }
 }
@@ -46,10 +37,10 @@
   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::double*});
-    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double*});
-    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate*>*});
+    lib::Coordinate coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
+    dart.core::print(coordinate.{lib::Coordinate::x}{dart.core::double});
+    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double});
+    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate>?});
     dart.core::print("Done!");
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
index 9f42aec..41ed258 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
@@ -8,37 +8,28 @@
     constructor #fromTypedDataBase(dart.core::Object #typedDataBase) → lib::Coordinate
       : super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
       ;
-    static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
-      dart.core::print("hello");
-      return null;
-    }
-    abstract member-signature get _typedDataBase() → dart.core::Object*; -> dart.ffi::_Compound::_typedDataBase
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
     @#C8
-    get x() → dart.core::double*
+    get x() → dart.core::double
       return dart.ffi::_loadDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*});
-    set x(dart.core::double* #v) → void
-      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
     @#C8
-    get y() → dart.core::double*
+    set x(dart.core::double #externalFieldValue) → void
+      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C10.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue);
+    @#C8
+    get y() → dart.core::double
       return dart.ffi::_loadDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*});
-    set y(dart.core::double* #v) → void
-      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
-    get next() → dart.ffi::Pointer<lib::Coordinate*>*
-      return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
-    set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
+    @#C8
+    set y(dart.core::double #externalFieldValue) → void
+      return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue);
+    static factory allocate(dart.core::double x, dart.core::double y, dart.ffi::Pointer<lib::Coordinate>? next) → lib::Coordinate {
+      dart.core::print("hello");
+      throw "";
+    }
+    get next() → dart.ffi::Pointer<lib::Coordinate>?
+      return dart.ffi::_fromAddress<lib::Coordinate>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+    set next(dart.ffi::Pointer<lib::Coordinate>? #v) → void
       return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
     @#C16
-    static get /*isNonNullableByDefault*/ #sizeOf() → dart.core::int*
+    static get #sizeOf() → dart.core::int*
       return #C19.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
   }
 }
@@ -47,10 +38,10 @@
   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::double*});
-    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double*});
-    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate*>*});
+    lib::Coordinate coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
+    dart.core::print(coordinate.{lib::Coordinate::x}{dart.core::double});
+    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double});
+    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate>?});
     dart.core::print("Done!");
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml
index 3b6cb72..dcb057e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml
@@ -10,21 +10,18 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import 'file1.dart';
 
         class Class1 extends Class2 {}
       file1.dart: |
-        // @dart=2.9
         import 'file2.dart';
 
         class Class2 extends Class3 {
-          Class3 foo;
+          Class3? foo;
         }
       file2.dart: |
-        // @dart=2.9
         abstract class Class3 {
-          Class3 foo;
+          Class3? foo;
         }
     expectedLibraryCount: 3
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.1.expect
index f6d778ea..fd58749 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.1.expect
@@ -4,8 +4,8 @@
   import "org-dartlang-test:///file2.dart";
 
   class Class2 extends fil2::Class3 {
-    field fil2::Class3* foo = null;
-    synthetic constructor •() → fil::Class2*
+    field fil2::Class3? foo = null;
+    synthetic constructor •() → fil::Class2
       : super fil2::Class3::•()
       ;
   }
@@ -13,20 +13,10 @@
 library from "org-dartlang-test:///file2.dart" as fil2 {
 
   abstract class Class3 extends dart.core::Object {
-    field fil2::Class3* foo = null;
-    synthetic constructor •() → fil2::Class3*
+    field fil2::Class3? foo = null;
+    synthetic constructor •() → fil2::Class3
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -34,7 +24,7 @@
   import "org-dartlang-test:///file1.dart";
 
   class Class1 extends fil::Class2 {
-    synthetic constructor •() → main::Class1*
+    synthetic constructor •() → main::Class1
       : super fil::Class2::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.2.expect
index f6d778ea..fd58749 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.2.expect
@@ -4,8 +4,8 @@
   import "org-dartlang-test:///file2.dart";
 
   class Class2 extends fil2::Class3 {
-    field fil2::Class3* foo = null;
-    synthetic constructor •() → fil::Class2*
+    field fil2::Class3? foo = null;
+    synthetic constructor •() → fil::Class2
       : super fil2::Class3::•()
       ;
   }
@@ -13,20 +13,10 @@
 library from "org-dartlang-test:///file2.dart" as fil2 {
 
   abstract class Class3 extends dart.core::Object {
-    field fil2::Class3* foo = null;
-    synthetic constructor •() → fil2::Class3*
+    field fil2::Class3? foo = null;
+    synthetic constructor •() → fil2::Class3
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -34,7 +24,7 @@
   import "org-dartlang-test:///file1.dart";
 
   class Class1 extends fil::Class2 {
-    synthetic constructor •() → main::Class1*
+    synthetic constructor •() → main::Class1
       : super fil::Class2::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.3.expect
index f6d778ea..fd58749 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.3.expect
@@ -4,8 +4,8 @@
   import "org-dartlang-test:///file2.dart";
 
   class Class2 extends fil2::Class3 {
-    field fil2::Class3* foo = null;
-    synthetic constructor •() → fil::Class2*
+    field fil2::Class3? foo = null;
+    synthetic constructor •() → fil::Class2
       : super fil2::Class3::•()
       ;
   }
@@ -13,20 +13,10 @@
 library from "org-dartlang-test:///file2.dart" as fil2 {
 
   abstract class Class3 extends dart.core::Object {
-    field fil2::Class3* foo = null;
-    synthetic constructor •() → fil2::Class3*
+    field fil2::Class3? foo = null;
+    synthetic constructor •() → fil2::Class3
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -34,7 +24,7 @@
   import "org-dartlang-test:///file1.dart";
 
   class Class1 extends fil::Class2 {
-    synthetic constructor •() → main::Class1*
+    synthetic constructor •() → main::Class1
       : super fil::Class2::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.4.expect b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.4.expect
index f6d778ea..fd58749 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml.world.4.expect
@@ -4,8 +4,8 @@
   import "org-dartlang-test:///file2.dart";
 
   class Class2 extends fil2::Class3 {
-    field fil2::Class3* foo = null;
-    synthetic constructor •() → fil::Class2*
+    field fil2::Class3? foo = null;
+    synthetic constructor •() → fil::Class2
       : super fil2::Class3::•()
       ;
   }
@@ -13,20 +13,10 @@
 library from "org-dartlang-test:///file2.dart" as fil2 {
 
   abstract class Class3 extends dart.core::Object {
-    field fil2::Class3* foo = null;
-    synthetic constructor •() → fil2::Class3*
+    field fil2::Class3? foo = null;
+    synthetic constructor •() → fil2::Class3
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -34,7 +24,7 @@
   import "org-dartlang-test:///file1.dart";
 
   class Class1 extends fil::Class2 {
-    synthetic constructor •() → main::Class1*
+    synthetic constructor •() → main::Class1
       : super fil::Class2::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml
index 359626d..a156137 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml
@@ -10,20 +10,17 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import 'file2.dart';
         class A extends B implements C {}
       file1.dart: |
-        // @dart=2.9
         class D {
-          D parent;
+          D? parent;
         }
       file2.dart: |
-        // @dart=2.9
         import 'file1.dart';
         abstract class C implements D {}
         class B extends D {
-          D parent;
+          D? parent;
         }
     expectedLibraryCount: 3
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.1.expect
index 91ec42a..9e155b6 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.1.expect
@@ -2,20 +2,10 @@
 library from "org-dartlang-test:///file1.dart" as fil {
 
   class D extends dart.core::Object {
-    field fil::D* parent = null;
-    synthetic constructor •() → fil::D*
+    field fil::D? parent = null;
+    synthetic constructor •() → fil::D
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///file2.dart" as fil2 {
@@ -23,23 +13,13 @@
   import "org-dartlang-test:///file1.dart";
 
   abstract class C extends dart.core::Object implements fil::D {
-    synthetic constructor •() → fil2::C*
+    synthetic constructor •() → fil2::C
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class B extends fil::D {
-    field fil::D* parent = null;
-    synthetic constructor •() → fil2::B*
+    field fil::D? parent = null;
+    synthetic constructor •() → fil2::B
       : super fil::D::•()
       ;
   }
@@ -49,7 +29,7 @@
   import "org-dartlang-test:///file2.dart";
 
   class A extends fil2::B implements fil2::C {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super fil2::B::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.2.expect
index 91ec42a..9e155b6 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.2.expect
@@ -2,20 +2,10 @@
 library from "org-dartlang-test:///file1.dart" as fil {
 
   class D extends dart.core::Object {
-    field fil::D* parent = null;
-    synthetic constructor •() → fil::D*
+    field fil::D? parent = null;
+    synthetic constructor •() → fil::D
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///file2.dart" as fil2 {
@@ -23,23 +13,13 @@
   import "org-dartlang-test:///file1.dart";
 
   abstract class C extends dart.core::Object implements fil::D {
-    synthetic constructor •() → fil2::C*
+    synthetic constructor •() → fil2::C
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class B extends fil::D {
-    field fil::D* parent = null;
-    synthetic constructor •() → fil2::B*
+    field fil::D? parent = null;
+    synthetic constructor •() → fil2::B
       : super fil::D::•()
       ;
   }
@@ -49,7 +29,7 @@
   import "org-dartlang-test:///file2.dart";
 
   class A extends fil2::B implements fil2::C {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super fil2::B::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.3.expect
index 91ec42a..9e155b6 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.3.expect
@@ -2,20 +2,10 @@
 library from "org-dartlang-test:///file1.dart" as fil {
 
   class D extends dart.core::Object {
-    field fil::D* parent = null;
-    synthetic constructor •() → fil::D*
+    field fil::D? parent = null;
+    synthetic constructor •() → fil::D
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///file2.dart" as fil2 {
@@ -23,23 +13,13 @@
   import "org-dartlang-test:///file1.dart";
 
   abstract class C extends dart.core::Object implements fil::D {
-    synthetic constructor •() → fil2::C*
+    synthetic constructor •() → fil2::C
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class B extends fil::D {
-    field fil::D* parent = null;
-    synthetic constructor •() → fil2::B*
+    field fil::D? parent = null;
+    synthetic constructor •() → fil2::B
       : super fil::D::•()
       ;
   }
@@ -49,7 +29,7 @@
   import "org-dartlang-test:///file2.dart";
 
   class A extends fil2::B implements fil2::C {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super fil2::B::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.4.expect b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.4.expect
index 91ec42a..9e155b6 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml.world.4.expect
@@ -2,20 +2,10 @@
 library from "org-dartlang-test:///file1.dart" as fil {
 
   class D extends dart.core::Object {
-    field fil::D* parent = null;
-    synthetic constructor •() → fil::D*
+    field fil::D? parent = null;
+    synthetic constructor •() → fil::D
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///file2.dart" as fil2 {
@@ -23,23 +13,13 @@
   import "org-dartlang-test:///file1.dart";
 
   abstract class C extends dart.core::Object implements fil::D {
-    synthetic constructor •() → fil2::C*
+    synthetic constructor •() → fil2::C
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class B extends fil::D {
-    field fil::D* parent = null;
-    synthetic constructor •() → fil2::B*
+    field fil::D? parent = null;
+    synthetic constructor •() → fil2::B
       : super fil::D::•()
       ;
   }
@@ -49,7 +29,7 @@
   import "org-dartlang-test:///file2.dart";
 
   class A extends fil2::B implements fil2::C {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super fil2::B::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml
index 4c85485..f586e5f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml
@@ -10,14 +10,12 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class X {}
-        int foo(X x) {
+        int? foo(X x) {
           return x is Y ? x.foo : null;
         }
       lib.dart: |
-        // @dart=2.9
         import 'main.dart';
         class Y implements X {
           int get foo => 42;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.1.expect
index f8fa7652b..16a7d27 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.1.expect
@@ -4,21 +4,11 @@
   import "org-dartlang-test:///main.dart";
 
   class Y extends dart.core::Object implements main::X {
-    synthetic constructor •() → lib::Y*
+    synthetic constructor •() → lib::Y
       : super dart.core::Object::•()
       ;
-    get foo() → dart.core::int*
+    get foo() → dart.core::int
       return 42;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -26,21 +16,11 @@
   import "org-dartlang-test:///lib.dart";
 
   class X extends dart.core::Object {
-    synthetic constructor •() → main::X*
+    synthetic constructor •() → main::X
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method foo(main::X* x) → dart.core::int* {
-    return x is lib::Y* ?{dart.core::int*} x{lib::Y*}.{lib::Y::foo}{dart.core::int*} : null;
+  static method foo(main::X x) → dart.core::int? {
+    return x is{ForNonNullableByDefault} lib::Y ?{dart.core::int?} x{lib::Y}.{lib::Y::foo}{dart.core::int} : null;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.2.expect
index f8fa7652b..16a7d27 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.2.expect
@@ -4,21 +4,11 @@
   import "org-dartlang-test:///main.dart";
 
   class Y extends dart.core::Object implements main::X {
-    synthetic constructor •() → lib::Y*
+    synthetic constructor •() → lib::Y
       : super dart.core::Object::•()
       ;
-    get foo() → dart.core::int*
+    get foo() → dart.core::int
       return 42;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -26,21 +16,11 @@
   import "org-dartlang-test:///lib.dart";
 
   class X extends dart.core::Object {
-    synthetic constructor •() → main::X*
+    synthetic constructor •() → main::X
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method foo(main::X* x) → dart.core::int* {
-    return x is lib::Y* ?{dart.core::int*} x{lib::Y*}.{lib::Y::foo}{dart.core::int*} : null;
+  static method foo(main::X x) → dart.core::int? {
+    return x is{ForNonNullableByDefault} lib::Y ?{dart.core::int?} x{lib::Y}.{lib::Y::foo}{dart.core::int} : null;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.3.expect
index f8fa7652b..16a7d27 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.3.expect
@@ -4,21 +4,11 @@
   import "org-dartlang-test:///main.dart";
 
   class Y extends dart.core::Object implements main::X {
-    synthetic constructor •() → lib::Y*
+    synthetic constructor •() → lib::Y
       : super dart.core::Object::•()
       ;
-    get foo() → dart.core::int*
+    get foo() → dart.core::int
       return 42;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -26,21 +16,11 @@
   import "org-dartlang-test:///lib.dart";
 
   class X extends dart.core::Object {
-    synthetic constructor •() → main::X*
+    synthetic constructor •() → main::X
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method foo(main::X* x) → dart.core::int* {
-    return x is lib::Y* ?{dart.core::int*} x{lib::Y*}.{lib::Y::foo}{dart.core::int*} : null;
+  static method foo(main::X x) → dart.core::int? {
+    return x is{ForNonNullableByDefault} lib::Y ?{dart.core::int?} x{lib::Y}.{lib::Y::foo}{dart.core::int} : null;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_39.yaml b/pkg/front_end/testcases/incremental/no_outline_change_39.yaml
index ebaefa2..0a99343 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_39.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_39.yaml
@@ -10,7 +10,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class A {
           int a() {
@@ -21,7 +20,6 @@
           }
         }
       lib.dart: |
-        // @dart=2.9
         class B {
           int a() {
             return 42;
@@ -48,7 +46,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class A {
           int b() {
@@ -69,7 +66,6 @@
       - lib.dart
     sources:
       lib.dart: |
-        // @dart=2.9
         class C {
           int b() {
             return 1;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_39.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_39.yaml.world.1.expect
index 1a0bc10..a35a2ef 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_39.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_39.yaml.world.1.expect
@@ -2,46 +2,26 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class B extends dart.core::Object {
-    synthetic constructor •() → lib::B*
+    synthetic constructor •() → lib::B
       : super dart.core::Object::•()
       ;
-    method a() → dart.core::int* {
+    method a() → dart.core::int {
       return 42;
     }
-    method b() → dart.core::int* {
+    method b() → dart.core::int {
       return 2;
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class C extends dart.core::Object {
-    synthetic constructor •() → lib::C*
+    synthetic constructor •() → lib::C
       : super dart.core::Object::•()
       ;
-    method a() → dart.core::int* {
+    method a() → dart.core::int {
       return 42;
     }
-    method b() → dart.core::int* {
+    method b() → dart.core::int {
       return 2;
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -49,24 +29,14 @@
   import "org-dartlang-test:///lib.dart";
 
   class A extends dart.core::Object {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super dart.core::Object::•()
       ;
-    method a() → dart.core::int* {
+    method a() → dart.core::int {
       return 42;
     }
-    method b() → dart.core::int* {
+    method b() → dart.core::int {
       return 2;
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_39.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_39.yaml.world.2.expect
index 89512bc..e7f91c7 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_39.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_39.yaml.world.2.expect
@@ -2,46 +2,26 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class B extends dart.core::Object {
-    synthetic constructor •() → lib::B*
+    synthetic constructor •() → lib::B
       : super dart.core::Object::•()
       ;
-    method a() → dart.core::int* {
+    method a() → dart.core::int {
       return 42;
     }
-    method b() → dart.core::int* {
+    method b() → dart.core::int {
       return 2;
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class C extends dart.core::Object {
-    synthetic constructor •() → lib::C*
+    synthetic constructor •() → lib::C
       : super dart.core::Object::•()
       ;
-    method a() → dart.core::int* {
+    method a() → dart.core::int {
       return 42;
     }
-    method b() → dart.core::int* {
+    method b() → dart.core::int {
       return 2;
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -49,24 +29,14 @@
   import "org-dartlang-test:///lib.dart";
 
   class A extends dart.core::Object {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super dart.core::Object::•()
       ;
-    method b() → dart.core::int* {
+    method b() → dart.core::int {
       return 42;
     }
-    method a() → dart.core::int* {
+    method a() → dart.core::int {
       return 2;
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_39.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_39.yaml.world.3.expect
index fb95995..280d6fb 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_39.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_39.yaml.world.3.expect
@@ -2,46 +2,26 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class C extends dart.core::Object {
-    synthetic constructor •() → lib::C*
+    synthetic constructor •() → lib::C
       : super dart.core::Object::•()
       ;
-    method b() → dart.core::int* {
+    method b() → dart.core::int {
       return 1;
     }
-    method a() → dart.core::int* {
+    method a() → dart.core::int {
       return 2;
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class B extends dart.core::Object {
-    synthetic constructor •() → lib::B*
+    synthetic constructor •() → lib::B
       : super dart.core::Object::•()
       ;
-    method b() → dart.core::int* {
+    method b() → dart.core::int {
       return 3;
     }
-    method a() → dart.core::int* {
+    method a() → dart.core::int {
       return 4;
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -49,24 +29,14 @@
   import "org-dartlang-test:///lib.dart";
 
   class A extends dart.core::Object {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super dart.core::Object::•()
       ;
-    method b() → dart.core::int* {
+    method b() → dart.core::int {
       return 42;
     }
-    method a() → dart.core::int* {
+    method a() → dart.core::int {
       return 2;
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml
index 5aaff13..fbab308 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
@@ -20,7 +19,6 @@
           }
         }
       libA.dart: |
-        // @dart=2.9
         import 'main.dart';
 
         class Bar extends Object with Foo {
@@ -37,7 +35,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.1.expect
index a91314f..39a5dbb 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.1.expect
@@ -4,29 +4,19 @@
   import "org-dartlang-test:///main.dart";
 
   abstract class _Bar&Object&Foo extends dart.core::Object implements main::Foo /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-    const synthetic constructor •() → libA::_Bar&Object&Foo*
+    const synthetic constructor •() → libA::_Bar&Object&Foo
       : super dart.core::Object::•()
       ;
     method /* from org-dartlang-test:///main.dart */ method() → dynamic {
       dart.core::print("A");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class Bar extends libA::_Bar&Object&Foo {
-    synthetic constructor •() → libA::Bar*
+    synthetic constructor •() → libA::Bar
       : super libA::_Bar&Object&Foo::•()
       ;
     method method2() → dynamic {
-      this.{libA::_Bar&Object&Foo::method}(){() →* dynamic};
+      this.{libA::_Bar&Object&Foo::method}(){() → dynamic};
     }
   }
 }
@@ -35,21 +25,11 @@
   import "org-dartlang-test:///libA.dart";
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
     method method() → dynamic {
       dart.core::print("A");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.2.expect
index 82880e2..d7d471a 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.2.expect
@@ -4,29 +4,19 @@
   import "org-dartlang-test:///main.dart";
 
   abstract class _Bar&Object&Foo extends dart.core::Object implements main::Foo /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-    const synthetic constructor •() → libA::_Bar&Object&Foo*
+    const synthetic constructor •() → libA::_Bar&Object&Foo
       : super dart.core::Object::•()
       ;
     method /* from org-dartlang-test:///main.dart */ method() → dynamic {
       dart.core::print("B");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class Bar extends libA::_Bar&Object&Foo {
-    synthetic constructor •() → libA::Bar*
+    synthetic constructor •() → libA::Bar
       : super libA::_Bar&Object&Foo::•()
       ;
     method method2() → dynamic {
-      this.{libA::_Bar&Object&Foo::method}(){() →* dynamic};
+      this.{libA::_Bar&Object&Foo::method}(){() → dynamic};
     }
   }
 }
@@ -35,21 +25,11 @@
   import "org-dartlang-test:///libA.dart";
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
     method method() → dynamic {
       dart.core::print("B");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_40.yaml b/pkg/front_end/testcases/incremental/no_outline_change_40.yaml
index 6033b0e..3d630a8 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_40.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_40.yaml
@@ -11,13 +11,11 @@
     experiments: alternative-invalidation-strategy
     sources:
       lib1.dart: |
-        // @dart=2.9
         import 'main.dart';
         extension Extension1 on A {
           baz() => 42;
         }
       lib2.dart: |
-        // @dart=2.9
         import 'main.dart';
         import 'lib1.dart';
         export 'main.dart';
@@ -27,7 +25,6 @@
           a.boz();
         }
       main.dart: |
-        // @dart=2.9
         import 'lib1.dart';
         import 'lib2.dart';
         class A {
@@ -48,7 +45,6 @@
       - lib2.dart
     sources:
       lib2.dart: |
-        // @dart=2.9
         import 'main.dart';
         import 'lib1.dart';
         export 'main.dart';
@@ -68,7 +64,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib1.dart';
         import 'lib2.dart';
         class A {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_40.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_40.yaml.world.1.expect
index eae0d04..5b3c74f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_40.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_40.yaml.world.1.expect
@@ -3,13 +3,13 @@
 
   import "org-dartlang-test:///main.dart";
 
-  extension Extension1 on main::A* {
+  extension Extension1 on main::A {
     method baz = lib1::Extension1|baz;
     tearoff baz = lib1::Extension1|get#baz;
   }
-  static method Extension1|baz(lowered final main::A* #this) → dynamic
+  static method Extension1|baz(lowered final main::A #this) → dynamic
     return 42;
-  static method Extension1|get#baz(lowered final main::A* #this) → () →* dynamic
+  static method Extension1|get#baz(lowered final main::A #this) → () → dynamic
     return () → dynamic => lib1::Extension1|baz(#this);
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -23,7 +23,7 @@
   export "org-dartlang-test:///main.dart";
   export "org-dartlang-test:///lib1.dart";
 
-  static method method(main::A* a) → dynamic {
+  static method method(main::A a) → dynamic {
     lib1::Extension1|baz(a);
     main::Extension2|boz(a);
   }
@@ -34,31 +34,21 @@
   import "org-dartlang-test:///lib2.dart";
 
   class A extends dart.core::Object {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super dart.core::Object::•()
       ;
     method foo() → dynamic {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  extension Extension2 on main::A* {
+  extension Extension2 on main::A {
     method boz = main::Extension2|boz;
     tearoff boz = main::Extension2|get#boz;
   }
   static method main() → dynamic {
     lib2::method(new main::A::•());
   }
-  static method Extension2|boz(lowered final main::A* #this) → dynamic {
+  static method Extension2|boz(lowered final main::A #this) → dynamic {
     return 87;
   }
-  static method Extension2|get#boz(lowered final main::A* #this) → () →* dynamic
+  static method Extension2|get#boz(lowered final main::A #this) → () → dynamic
     return () → dynamic => main::Extension2|boz(#this);
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_40.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_40.yaml.world.2.expect
index d4f85de..ce2d9af 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_40.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_40.yaml.world.2.expect
@@ -3,13 +3,13 @@
 
   import "org-dartlang-test:///main.dart";
 
-  extension Extension1 on main::A* {
+  extension Extension1 on main::A {
     method baz = lib1::Extension1|baz;
     tearoff baz = lib1::Extension1|get#baz;
   }
-  static method Extension1|baz(lowered final main::A* #this) → dynamic
+  static method Extension1|baz(lowered final main::A #this) → dynamic
     return 42;
-  static method Extension1|get#baz(lowered final main::A* #this) → () →* dynamic
+  static method Extension1|get#baz(lowered final main::A #this) → () → dynamic
     return () → dynamic => lib1::Extension1|baz(#this);
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -23,7 +23,7 @@
   export "org-dartlang-test:///main.dart";
   export "org-dartlang-test:///lib1.dart";
 
-  static method method(main::A* a) → dynamic {
+  static method method(main::A a) → dynamic {
     lib1::Extension1|baz(a);
     main::Extension2|boz(a);
     lib1::Extension1|baz(a);
@@ -35,31 +35,21 @@
   import "org-dartlang-test:///lib2.dart";
 
   class A extends dart.core::Object {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super dart.core::Object::•()
       ;
     method foo() → dynamic {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  extension Extension2 on main::A* {
+  extension Extension2 on main::A {
     method boz = main::Extension2|boz;
     tearoff boz = main::Extension2|get#boz;
   }
   static method main() → dynamic {
     lib2::method(new main::A::•());
   }
-  static method Extension2|boz(lowered final main::A* #this) → dynamic {
+  static method Extension2|boz(lowered final main::A #this) → dynamic {
     return 87;
   }
-  static method Extension2|get#boz(lowered final main::A* #this) → () →* dynamic
+  static method Extension2|get#boz(lowered final main::A #this) → () → dynamic
     return () → dynamic => main::Extension2|boz(#this);
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_40.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_40.yaml.world.3.expect
index 8108d22..e66dc79 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_40.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_40.yaml.world.3.expect
@@ -3,13 +3,13 @@
 
   import "org-dartlang-test:///main.dart";
 
-  extension Extension1 on main::A* {
+  extension Extension1 on main::A {
     method baz = lib1::Extension1|baz;
     tearoff baz = lib1::Extension1|get#baz;
   }
-  static method Extension1|baz(lowered final main::A* #this) → dynamic
+  static method Extension1|baz(lowered final main::A #this) → dynamic
     return 42;
-  static method Extension1|get#baz(lowered final main::A* #this) → () →* dynamic
+  static method Extension1|get#baz(lowered final main::A #this) → () → dynamic
     return () → dynamic => lib1::Extension1|baz(#this);
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
@@ -23,7 +23,7 @@
   export "org-dartlang-test:///main.dart";
   export "org-dartlang-test:///lib1.dart";
 
-  static method method(main::A* a) → dynamic {
+  static method method(main::A a) → dynamic {
     lib1::Extension1|baz(a);
     main::Extension2|boz(a);
     lib1::Extension1|baz(a);
@@ -35,31 +35,21 @@
   import "org-dartlang-test:///lib2.dart";
 
   class A extends dart.core::Object {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super dart.core::Object::•()
       ;
     method foo() → dynamic {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  extension Extension2 on main::A* {
+  extension Extension2 on main::A {
     method boz = main::Extension2|boz;
     tearoff boz = main::Extension2|get#boz;
   }
   static method main() → dynamic {
     lib2::method(new main::A::•());
   }
-  static method Extension2|boz(lowered final main::A* #this) → dynamic {
+  static method Extension2|boz(lowered final main::A #this) → dynamic {
     return 123;
   }
-  static method Extension2|get#boz(lowered final main::A* #this) → () →* dynamic
+  static method Extension2|get#boz(lowered final main::A #this) → () → dynamic
     return () → dynamic => main::Extension2|boz(#this);
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml
index a8ddc64..8fb3d4f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml
@@ -14,18 +14,15 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libExporter.dart';
         void foo() {
           int value = libField;
           libField = value+1;
         }
       libExporter.dart: |
-        // @dart=2.9
         export "lib.dart";
         String fromLibExporter = "hello";
       lib.dart: |
-        // @dart=2.9
         import "libExporter.dart";
         int libField = 42;
         void requireStuffFromLibExporter() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.1.expect
index 3fa4b88..7aa25b3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.1.expect
@@ -3,7 +3,7 @@
 
   import "org-dartlang-test:///libExporter.dart";
 
-  static field dart.core::int* libField = 42;
+  static field dart.core::int libField = 42;
   static method requireStuffFromLibExporter() → void {
     dart.core::print(lib2::fromLibExporter);
   }
@@ -15,14 +15,14 @@
 
   export "org-dartlang-test:///lib.dart";
 
-  static field dart.core::String* fromLibExporter = "hello";
+  static field dart.core::String fromLibExporter = "hello";
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///libExporter.dart";
 
   static method foo() → void {
-    dart.core::int* value = lib::libField;
-    lib::libField = value.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*};
+    dart.core::int value = lib::libField;
+    lib::libField = value.{dart.core::num::+}(1){(dart.core::num) → dart.core::int};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.2.expect
index 3fa4b88..7aa25b3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.2.expect
@@ -3,7 +3,7 @@
 
   import "org-dartlang-test:///libExporter.dart";
 
-  static field dart.core::int* libField = 42;
+  static field dart.core::int libField = 42;
   static method requireStuffFromLibExporter() → void {
     dart.core::print(lib2::fromLibExporter);
   }
@@ -15,14 +15,14 @@
 
   export "org-dartlang-test:///lib.dart";
 
-  static field dart.core::String* fromLibExporter = "hello";
+  static field dart.core::String fromLibExporter = "hello";
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///libExporter.dart";
 
   static method foo() → void {
-    dart.core::int* value = lib::libField;
-    lib::libField = value.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*};
+    dart.core::int value = lib::libField;
+    lib::libField = value.{dart.core::num::+}(1){(dart.core::num) → dart.core::int};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.3.expect
index 3fa4b88..7aa25b3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.3.expect
@@ -3,7 +3,7 @@
 
   import "org-dartlang-test:///libExporter.dart";
 
-  static field dart.core::int* libField = 42;
+  static field dart.core::int libField = 42;
   static method requireStuffFromLibExporter() → void {
     dart.core::print(lib2::fromLibExporter);
   }
@@ -15,14 +15,14 @@
 
   export "org-dartlang-test:///lib.dart";
 
-  static field dart.core::String* fromLibExporter = "hello";
+  static field dart.core::String fromLibExporter = "hello";
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///libExporter.dart";
 
   static method foo() → void {
-    dart.core::int* value = lib::libField;
-    lib::libField = value.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*};
+    dart.core::int value = lib::libField;
+    lib::libField = value.{dart.core::num::+}(1){(dart.core::num) → dart.core::int};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.4.expect b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.4.expect
index 3fa4b88..7aa25b3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.4.expect
@@ -3,7 +3,7 @@
 
   import "org-dartlang-test:///libExporter.dart";
 
-  static field dart.core::int* libField = 42;
+  static field dart.core::int libField = 42;
   static method requireStuffFromLibExporter() → void {
     dart.core::print(lib2::fromLibExporter);
   }
@@ -15,14 +15,14 @@
 
   export "org-dartlang-test:///lib.dart";
 
-  static field dart.core::String* fromLibExporter = "hello";
+  static field dart.core::String fromLibExporter = "hello";
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///libExporter.dart";
 
   static method foo() → void {
-    dart.core::int* value = lib::libField;
-    lib::libField = value.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*};
+    dart.core::int value = lib::libField;
+    lib::libField = value.{dart.core::num::+}(1){(dart.core::num) → dart.core::int};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml
index d1aab0e..1ce5db6 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml
@@ -12,10 +12,9 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         class Foo {
           factory Foo.bar() {
-            return null;
+            throw '';
           }
           void bar() {}
         }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml.world.1.expect
index 3416529..166d855 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml.world.1.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class Foo extends dart.core::Object {
-    static factory bar() → main::Foo* {
-      return null;
+    static factory bar() → main::Foo {
+      throw "";
     }
     method bar() → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml.world.2.expect
index 3416529..166d855 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml.world.2.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class Foo extends dart.core::Object {
-    static factory bar() → main::Foo* {
-      return null;
+    static factory bar() → main::Foo {
+      throw "";
     }
     method bar() → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml
index 6569ace..8b31333 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml
@@ -12,7 +12,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         class Foo {
           Foo();
           factory Foo.bar() = Baz;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect
index 7aa880b..aafa001 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect
@@ -2,26 +2,16 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class Foo extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[#C1];
-    constructor •() → main::Foo*
+    static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+    constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
-    static factory bar() → main::Foo*
+    static factory bar() → main::Foo
       return new main::Baz::•();
     method bar() → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class Baz extends main::Foo {
-    synthetic constructor •() → main::Baz*
+    synthetic constructor •() → main::Baz
       : super main::Foo::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect
index 7aa880b..aafa001 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect
@@ -2,26 +2,16 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class Foo extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[#C1];
-    constructor •() → main::Foo*
+    static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+    constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
-    static factory bar() → main::Foo*
+    static factory bar() → main::Foo
       return new main::Baz::•();
     method bar() → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class Baz extends main::Foo {
-    synthetic constructor •() → main::Baz*
+    synthetic constructor •() → main::Baz
       : super main::Foo::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml
index b75e11c..d7d7a6a 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         part 'myPart.dart';
 
         class Foo {
@@ -25,7 +24,6 @@
           print(const Foo());
         }
       myPart.dart: |
-        // @dart=2.9
         part of 'main.dart';
         whatever() async {
           await null;
@@ -40,7 +38,6 @@
       - myPart.dart
     sources:
       myPart.dart: |
-        // @dart=2.9
         part of 'main.dart';
         whatever() async {
           await null;
@@ -56,7 +53,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         part 'myPart.dart';
 
         class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
index e65d991..219336f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
@@ -3,21 +3,12 @@
 
   part myPart.dart;
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •() → main::Foo*
+    const constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
     @#C1
-    method toString() → dart.core::String*
+    method toString() → dart.core::String
       return "Foo!";
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic async /* futureValueType= dynamic */ {
     await main::whatever();
@@ -36,6 +27,6 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- Foo. (from org-dartlang-test:///main.dart:5:9)
+- Foo. (from org-dartlang-test:///main.dart:4:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
index 5267571..0b6947c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
@@ -3,21 +3,12 @@
 
   part myPart.dart;
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •() → main::Foo*
+    const constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
     @#C1
-    method toString() → dart.core::String*
+    method toString() → dart.core::String
       return "Foo!";
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic async /* futureValueType= dynamic */ {
     await main::whatever();
@@ -36,6 +27,6 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- Foo. (from org-dartlang-test:///main.dart:5:9)
+- Foo. (from org-dartlang-test:///main.dart:4:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
index e291aa1..dca8b6c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
@@ -3,21 +3,12 @@
 
   part myPart.dart;
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •() → main::Foo*
+    const constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
     @#C1
-    method toString() → dart.core::String*
+    method toString() → dart.core::String
       return "Foo!";
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic async /* futureValueType= dynamic */ {
     await main::whatever();
@@ -37,6 +28,6 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- Foo. (from org-dartlang-test:///main.dart:5:9)
+- Foo. (from org-dartlang-test:///main.dart:4:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml
index b6497de..4e74fed 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml
@@ -11,7 +11,6 @@
     errors: true
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
@@ -30,7 +29,6 @@
 
         enum CompilationStrategy { direct, toKernel, toData, fromData }
       libA.dart: |
-        // @dart=2.9
         import 'main.dart';
         whatever(Foo foo) {
           print(foo);
@@ -45,7 +43,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
@@ -73,7 +70,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
index 2cc160f..c4930d6 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
@@ -3,7 +3,7 @@
 
   import "org-dartlang-test:///main.dart";
 
-  static method whatever(main::Foo* foo) → dynamic {
+  static method whatever(main::Foo foo) → dynamic {
     dart.core::print(foo);
   }
 }
@@ -11,7 +11,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:8:32: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:7:32: Error: Expected ';' after this.
 //   toString() { return '$message' } // missing ;
 //                                ^
 //
@@ -20,50 +20,30 @@
 
   class Foo extends dart.core::Object {
     final field dynamic message;
-    constructor •(dynamic message) → main::Foo*
+    constructor •(dynamic message) → main::Foo
       : main::Foo::message = message, super dart.core::Object::•()
       ;
     @#C1
-    method toString() → dart.core::String* {
+    method toString() → dart.core::String {
       return "${this.{main::Foo::message}{dynamic}}";
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
-    static const field dart.core::List<main::CompilationStrategy*>* values = #C14;
-    static const field main::CompilationStrategy* direct = #C4;
-    static const field main::CompilationStrategy* toKernel = #C7;
-    static const field main::CompilationStrategy* toData = #C10;
-    static const field main::CompilationStrategy* fromData = #C13;
-    const constructor •(dart.core::int* #index, dart.core::String* #name) → main::CompilationStrategy*
+    static const field dart.core::List<main::CompilationStrategy> values = #C14;
+    static const field main::CompilationStrategy direct = #C4;
+    static const field main::CompilationStrategy toKernel = #C7;
+    static const field main::CompilationStrategy toData = #C10;
+    static const field main::CompilationStrategy fromData = #C13;
+    const constructor •(dart.core::int #index, dart.core::String #name) → main::CompilationStrategy
       : super dart.core::_Enum::•(#index, #name)
       ;
-    method toString() → dart.core::String*
+    method toString() → dart.core::String
       return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
-    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
-    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic {
-    main::Foo* foo = new main::Foo::•("hello");
+    main::Foo foo = new main::Foo::•("hello");
     libA::whatever(foo);
-    main::CompilationStrategy* compilationStrategy = #C4;
+    main::CompilationStrategy compilationStrategy = #C4;
     dart.core::print(compilationStrategy);
   }
 }
@@ -87,7 +67,7 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- CompilationStrategy. (from org-dartlang-test:///main.dart:18:6)
+- CompilationStrategy. (from org-dartlang-test:///main.dart:17:6)
 - _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
index f4b7e7b..82b26f6 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
@@ -3,7 +3,7 @@
 
   import "org-dartlang-test:///main.dart";
 
-  static method whatever(main::Foo* foo) → dynamic {
+  static method whatever(main::Foo foo) → dynamic {
     dart.core::print(foo);
   }
 }
@@ -11,7 +11,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:8:32: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:7:32: Error: Expected ';' after this.
 //   toString() { return '$message!!!' } // missing ; still
 //                                ^^^^
 //
@@ -20,50 +20,30 @@
 
   class Foo extends dart.core::Object {
     final field dynamic message;
-    constructor •(dynamic message) → main::Foo*
+    constructor •(dynamic message) → main::Foo
       : main::Foo::message = message, super dart.core::Object::•()
       ;
     @#C1
-    method toString() → dart.core::String* {
+    method toString() → dart.core::String {
       return "${this.{main::Foo::message}{dynamic}}!!!";
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
-    static const field dart.core::List<main::CompilationStrategy*>* values = #C14;
-    static const field main::CompilationStrategy* direct = #C4;
-    static const field main::CompilationStrategy* toKernel = #C7;
-    static const field main::CompilationStrategy* toData = #C10;
-    static const field main::CompilationStrategy* fromData = #C13;
-    const constructor •(dart.core::int* #index, dart.core::String* #name) → main::CompilationStrategy*
+    static const field dart.core::List<main::CompilationStrategy> values = #C14;
+    static const field main::CompilationStrategy direct = #C4;
+    static const field main::CompilationStrategy toKernel = #C7;
+    static const field main::CompilationStrategy toData = #C10;
+    static const field main::CompilationStrategy fromData = #C13;
+    const constructor •(dart.core::int #index, dart.core::String #name) → main::CompilationStrategy
       : super dart.core::_Enum::•(#index, #name)
       ;
-    method toString() → dart.core::String*
+    method toString() → dart.core::String
       return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
-    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
-    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic {
-    main::Foo* foo = new main::Foo::•("hello");
+    main::Foo foo = new main::Foo::•("hello");
     libA::whatever(foo);
-    main::CompilationStrategy* compilationStrategy = #C4;
+    main::CompilationStrategy compilationStrategy = #C4;
     dart.core::print(compilationStrategy);
   }
 }
@@ -87,7 +67,7 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- CompilationStrategy. (from org-dartlang-test:///main.dart:18:6)
+- CompilationStrategy. (from org-dartlang-test:///main.dart:17:6)
 - _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect
index f45163f..0e56202 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect
@@ -3,7 +3,7 @@
 
   import "org-dartlang-test:///main.dart";
 
-  static method whatever(main::Foo* foo) → dynamic {
+  static method whatever(main::Foo foo) → dynamic {
     dart.core::print(foo);
   }
 }
@@ -13,50 +13,30 @@
 
   class Foo extends dart.core::Object {
     final field dynamic message;
-    constructor •(dynamic message) → main::Foo*
+    constructor •(dynamic message) → main::Foo
       : main::Foo::message = message, super dart.core::Object::•()
       ;
     @#C1
-    method toString() → dart.core::String* {
+    method toString() → dart.core::String {
       return "${this.{main::Foo::message}{dynamic}}?!?";
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
-    static const field dart.core::List<main::CompilationStrategy*>* values = #C14;
-    static const field main::CompilationStrategy* direct = #C4;
-    static const field main::CompilationStrategy* toKernel = #C7;
-    static const field main::CompilationStrategy* toData = #C10;
-    static const field main::CompilationStrategy* fromData = #C13;
-    const constructor •(dart.core::int* #index, dart.core::String* #name) → main::CompilationStrategy*
+    static const field dart.core::List<main::CompilationStrategy> values = #C14;
+    static const field main::CompilationStrategy direct = #C4;
+    static const field main::CompilationStrategy toKernel = #C7;
+    static const field main::CompilationStrategy toData = #C10;
+    static const field main::CompilationStrategy fromData = #C13;
+    const constructor •(dart.core::int #index, dart.core::String #name) → main::CompilationStrategy
       : super dart.core::_Enum::•(#index, #name)
       ;
-    method toString() → dart.core::String*
+    method toString() → dart.core::String
       return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
-    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
-    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method main() → dynamic {
-    main::Foo* foo = new main::Foo::•("hello");
+    main::Foo foo = new main::Foo::•("hello");
     libA::whatever(foo);
-    main::CompilationStrategy* compilationStrategy = #C4;
+    main::CompilationStrategy compilationStrategy = #C4;
     dart.core::print(compilationStrategy);
   }
 }
@@ -80,7 +60,7 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- CompilationStrategy. (from org-dartlang-test:///main.dart:18:6)
+- CompilationStrategy. (from org-dartlang-test:///main.dart:17:6)
 - _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml
index 91c67e4..3dd8187 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml
@@ -10,7 +10,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         const String useMeAsAnnotation = "hello";
@@ -44,7 +43,6 @@
         @useMeAsAnnotation
         enum CompilationStrategy { @useMeAsAnnotation direct, @useMeAsAnnotation toKernel, @useMeAsAnnotation toData, @useMeAsAnnotation fromData }
       libA.dart: |
-        // @dart=2.9
         import 'main.dart';
         @useMeAsAnnotation
         whatever(Foo foo) {
@@ -59,7 +57,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'libA.dart';
 
         const String useMeAsAnnotation = "hello";
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect
index 0b471c1..94a4917 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect
@@ -4,7 +4,7 @@
   import "org-dartlang-test:///main.dart";
 
   @#C1
-  static method whatever(main::Foo* foo) → dynamic {
+  static method whatever(main::Foo foo) → dynamic {
     dart.core::print(foo);
   }
 }
@@ -15,66 +15,45 @@
   @#C1
   class Bar extends dart.core::Object {
     @#C1
-    constructor •(@#C1 dart.core::int* x) → main::Bar*
+    constructor •(@#C1 dart.core::int x) → main::Bar
       : super dart.core::Object::•() {}
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   @#C1
   class Foo extends main::Bar {
     @#C1
     final field dynamic message;
     @#C1
-    constructor •(@#C1 dynamic message) → main::Foo*
+    constructor •(@#C1 dynamic message) → main::Foo
       : main::Foo::message = message, super main::Bar::•(42)
       ;
     @#C2
-    method toString() → dart.core::String* {
+    method toString() → dart.core::String {
       return "${this.{main::Foo::message}{dynamic}}";
     }
   }
   @#C1
   class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
-    static const field dart.core::List<main::CompilationStrategy*>* values = #C15;
+    static const field dart.core::List<main::CompilationStrategy> values = #C15;
     @#C1
-    static const field main::CompilationStrategy* direct = #C5;
+    static const field main::CompilationStrategy direct = #C5;
     @#C1
-    static const field main::CompilationStrategy* toKernel = #C8;
+    static const field main::CompilationStrategy toKernel = #C8;
     @#C1
-    static const field main::CompilationStrategy* toData = #C11;
+    static const field main::CompilationStrategy toData = #C11;
     @#C1
-    static const field main::CompilationStrategy* fromData = #C14;
-    const constructor •(dart.core::int* #index, dart.core::String* #name) → main::CompilationStrategy*
+    static const field main::CompilationStrategy fromData = #C14;
+    const constructor •(dart.core::int #index, dart.core::String #name) → main::CompilationStrategy
       : super dart.core::_Enum::•(#index, #name)
       ;
-    method toString() → dart.core::String*
+    method toString() → dart.core::String
       return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
-    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
-    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static const field dart.core::String* useMeAsAnnotation = #C1;
+  static const field dart.core::String useMeAsAnnotation = #C1;
   @#C1
   static method main() → dynamic {
-    @#C1 main::Foo* foo = new main::Foo::•("hello");
+    @#C1 main::Foo foo = new main::Foo::•("hello");
     libA::whatever(foo);
-    @#C1 main::CompilationStrategy* compilationStrategy = #C5;
+    @#C1 main::CompilationStrategy compilationStrategy = #C5;
     dart.core::print(compilationStrategy);
   }
 }
@@ -99,7 +78,7 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- CompilationStrategy. (from org-dartlang-test:///main.dart:33:6)
+- CompilationStrategy. (from org-dartlang-test:///main.dart:32:6)
 - _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect
index 0b471c1..94a4917 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect
@@ -4,7 +4,7 @@
   import "org-dartlang-test:///main.dart";
 
   @#C1
-  static method whatever(main::Foo* foo) → dynamic {
+  static method whatever(main::Foo foo) → dynamic {
     dart.core::print(foo);
   }
 }
@@ -15,66 +15,45 @@
   @#C1
   class Bar extends dart.core::Object {
     @#C1
-    constructor •(@#C1 dart.core::int* x) → main::Bar*
+    constructor •(@#C1 dart.core::int x) → main::Bar
       : super dart.core::Object::•() {}
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   @#C1
   class Foo extends main::Bar {
     @#C1
     final field dynamic message;
     @#C1
-    constructor •(@#C1 dynamic message) → main::Foo*
+    constructor •(@#C1 dynamic message) → main::Foo
       : main::Foo::message = message, super main::Bar::•(42)
       ;
     @#C2
-    method toString() → dart.core::String* {
+    method toString() → dart.core::String {
       return "${this.{main::Foo::message}{dynamic}}";
     }
   }
   @#C1
   class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
-    static const field dart.core::List<main::CompilationStrategy*>* values = #C15;
+    static const field dart.core::List<main::CompilationStrategy> values = #C15;
     @#C1
-    static const field main::CompilationStrategy* direct = #C5;
+    static const field main::CompilationStrategy direct = #C5;
     @#C1
-    static const field main::CompilationStrategy* toKernel = #C8;
+    static const field main::CompilationStrategy toKernel = #C8;
     @#C1
-    static const field main::CompilationStrategy* toData = #C11;
+    static const field main::CompilationStrategy toData = #C11;
     @#C1
-    static const field main::CompilationStrategy* fromData = #C14;
-    const constructor •(dart.core::int* #index, dart.core::String* #name) → main::CompilationStrategy*
+    static const field main::CompilationStrategy fromData = #C14;
+    const constructor •(dart.core::int #index, dart.core::String #name) → main::CompilationStrategy
       : super dart.core::_Enum::•(#index, #name)
       ;
-    method toString() → dart.core::String*
+    method toString() → dart.core::String
       return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
-    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
-    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static const field dart.core::String* useMeAsAnnotation = #C1;
+  static const field dart.core::String useMeAsAnnotation = #C1;
   @#C1
   static method main() → dynamic {
-    @#C1 main::Foo* foo = new main::Foo::•("hello");
+    @#C1 main::Foo foo = new main::Foo::•("hello");
     libA::whatever(foo);
-    @#C1 main::CompilationStrategy* compilationStrategy = #C5;
+    @#C1 main::CompilationStrategy compilationStrategy = #C5;
     dart.core::print(compilationStrategy);
   }
 }
@@ -99,7 +78,7 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///main.dart:
-- CompilationStrategy. (from org-dartlang-test:///main.dart:33:6)
+- CompilationStrategy. (from org-dartlang-test:///main.dart:32:6)
 - _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml
index fc35f07..5cbb862 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         class Foo {
           String get x { return "x #1"; }
           void set x(String x) {}
@@ -31,7 +30,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         class Foo {
           String get x { return "x #2"; }
           void set x(String x) {}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.1.expect
index e12f28a..4dac49f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.1.expect
@@ -2,27 +2,17 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
-    get x() → dart.core::String* {
+    get x() → dart.core::String {
       return "x #1";
     }
-    set x(dart.core::String* x) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    set x(dart.core::String x) → void {}
   }
   static method main() → dynamic {
-    main::Foo* foo = new main::Foo::•();
-    dart.core::print(foo.{main::Foo::x}{dart.core::String*});
+    main::Foo foo = new main::Foo::•();
+    dart.core::print(foo.{main::Foo::x}{dart.core::String});
     foo.{main::Foo::x} = "hello";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.2.expect
index bc1e6cb..aa93cfc 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.2.expect
@@ -2,27 +2,17 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
-    get x() → dart.core::String* {
+    get x() → dart.core::String {
       return "x #2";
     }
-    set x(dart.core::String* x) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    set x(dart.core::String x) → void {}
   }
   static method main() → dynamic {
-    main::Foo* foo = new main::Foo::•();
-    dart.core::print(foo.{main::Foo::x}{dart.core::String*});
+    main::Foo foo = new main::Foo::•();
+    dart.core::print(foo.{main::Foo::x}{dart.core::String});
     foo.{main::Foo::x} = "hello";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_9.yaml b/pkg/front_end/testcases/incremental/no_outline_change_9.yaml
index 37edf3e..7310cd4 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_9.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_9.yaml
@@ -11,7 +11,6 @@
     experiments: alternative-invalidation-strategy
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart";
 
         main() {
@@ -19,14 +18,12 @@
           libPartMethod();
         }
       lib.dart: |
-        // @dart=2.9
         part "libpart.dart";
 
         libMethod() {
           print("libMethod");
         }
       libpart.dart: |
-        // @dart=2.9
         part of "lib.dart";
 
         libPartMethod() {
@@ -41,7 +38,6 @@
       - lib.dart
     sources:
       lib.dart: |
-        // @dart=2.9
         part "libpart.dart";
 
         libMethod() {
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_1.yaml b/pkg/front_end/testcases/incremental/omit_platform_works_1.yaml
index ad799bd..8d884a3 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_1.yaml
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_1.yaml
@@ -10,7 +10,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           print("Hello world");
         }
@@ -21,7 +20,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           print("Hello world!");
         }
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_2.yaml b/pkg/front_end/testcases/incremental/omit_platform_works_2.yaml
index 88e85bd..071eacd 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_2.yaml
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_2.yaml
@@ -10,7 +10,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           print("Hello world");
         }
@@ -21,7 +20,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           print("Hello world!");
         }
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml
index c0f25a0..2a6583b 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml
@@ -12,7 +12,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           print("Hello world");
         }
@@ -26,13 +25,11 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart";
         main() {
           print(lib());
         }
       lib.dart: |
-        // @dart=2.9
         lib() {
           return "hello";
         }
@@ -46,7 +43,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart";
         main() {
           print(lib() + "!");
@@ -61,7 +57,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart";
         main() {
           print(lib());
@@ -75,13 +70,11 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart";
         main() {
           print(lib() + "!!");
         }
       lib.dart: |
-        // @dart=2.9
         lib() {
           return "hello";
         }
diff --git a/pkg/front_end/testcases/incremental/outline_only.yaml b/pkg/front_end/testcases/incremental/outline_only.yaml
index bb3d5af..59a9e45 100644
--- a/pkg/front_end/testcases/incremental/outline_only.yaml
+++ b/pkg/front_end/testcases/incremental/outline_only.yaml
@@ -9,7 +9,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           print("hello");
           b();
diff --git a/pkg/front_end/testcases/incremental/outline_only_2.yaml b/pkg/front_end/testcases/incremental/outline_only_2.yaml
index 2ec0997..94b1a83 100644
--- a/pkg/front_end/testcases/incremental/outline_only_2.yaml
+++ b/pkg/front_end/testcases/incremental/outline_only_2.yaml
@@ -10,7 +10,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         abstract class Foo {
           int get foo;
         }
diff --git a/pkg/front_end/testcases/incremental/outline_only_2.yaml.world.1.expect b/pkg/front_end/testcases/incremental/outline_only_2.yaml.world.1.expect
index 3309ce1..f386ec2 100644
--- a/pkg/front_end/testcases/incremental/outline_only_2.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/outline_only_2.yaml.world.1.expect
@@ -2,34 +2,14 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   abstract class Foo extends dart.core::Object {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       ;
-    abstract get foo() → dart.core::int*;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+    abstract get foo() → dart.core::int;
   }
   class Bar extends dart.core::Object implements main::Foo {
-    static field dart.core::int* _foo;
-    final field dart.core::int* foo;
-    synthetic constructor •() → main::Bar*
+    static field dart.core::int _foo;
+    final field dart.core::int foo;
+    synthetic constructor •() → main::Bar
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/part_as_entry.yaml b/pkg/front_end/testcases/incremental/part_as_entry.yaml
index 266e687..aba97dff 100644
--- a/pkg/front_end/testcases/incremental/part_as_entry.yaml
+++ b/pkg/front_end/testcases/incremental/part_as_entry.yaml
@@ -8,11 +8,9 @@
     checkEntries: false
     sources:
       main.dart: |
-        // @dart=2.9
         part of 'lib.dart';
         partMethod() {}
       lib.dart: |
-        // @dart=2.9
         part 'main.dart';
         main() {}
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/part_as_package_entry.yaml b/pkg/front_end/testcases/incremental/part_as_package_entry.yaml
index 9810036..676254f 100644
--- a/pkg/front_end/testcases/incremental/part_as_package_entry.yaml
+++ b/pkg/front_end/testcases/incremental/part_as_package_entry.yaml
@@ -18,11 +18,9 @@
           ]
         }
       main.dart: |
-        // @dart=2.9
         part of 'lib.dart';
         partMethod() {}
       lib.dart: |
-        // @dart=2.9
         part 'main.dart';
         main() {}
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/part_as_package_entry_2.yaml b/pkg/front_end/testcases/incremental/part_as_package_entry_2.yaml
index 2ac3ec6..35b4737 100644
--- a/pkg/front_end/testcases/incremental/part_as_package_entry_2.yaml
+++ b/pkg/front_end/testcases/incremental/part_as_package_entry_2.yaml
@@ -19,11 +19,9 @@
           ]
         }
       main.dart: |
-        // @dart=2.9
         part of 'lib.dart';
         partMethod() {}
       lib.dart: |
-        // @dart=2.9
         part 'main.dart';
         main() {}
     expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of.yaml b/pkg/front_end/testcases/incremental/part_not_part_of.yaml
index 83a3567..4343977 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of.yaml
+++ b/pkg/front_end/testcases/incremental/part_not_part_of.yaml
@@ -8,11 +8,9 @@
     errors: true
     sources:
       main.dart: |
-        // @dart=2.9
         part 'lib.dart';
         main() {}
       lib.dart: |
-        // @dart=2.9
         methodFromLib() {}
     expectedLibraryCount: 2
 
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.1.expect b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.1.expect
index 63f6134..bf0e799 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.1.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.2.expect b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.2.expect
index 63f6134..bf0e799 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.2.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.3.expect b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.3.expect
index 63f6134..bf0e799 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.3.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml
index a3c62ed..4f7c23b 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml
@@ -18,11 +18,9 @@
           ]
         }
       main.dart: |
-        // @dart=2.9
         part 'lib.dart';
         main() {}
       lib.dart: |
-        // @dart=2.9
         methodFromLib() {}
     expectedLibraryCount: 2
 
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.1.expect b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.1.expect
index 5d581c7..fc6881c 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.1.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.2.expect b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.2.expect
index 5d581c7..fc6881c 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.2.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.3.expect b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.3.expect
index 5d581c7..fc6881c 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.3.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml
index 0a6eab0..a5edd21 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml
@@ -9,11 +9,9 @@
     errors: true
     sources:
       main.dart: |
-        // @dart=2.9
         part 'lib.dart';
         main() {}
       lib.dart: |
-        // @dart=2.9
         methodFromLib() {}
     expectedLibraryCount: 2
 
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.1.expect b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.1.expect
index 63f6134..bf0e799 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.1.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.2.expect b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.2.expect
index 63f6134..bf0e799 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.2.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.3.expect b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.3.expect
index 63f6134..bf0e799 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.3.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml
index e0d7502..e9c5703 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml
@@ -8,11 +8,9 @@
     errors: true
     sources:
       main.dart: |
-        // @dart=2.9
         part 'lib.dart';
         main() {}
       lib.dart: |
-        // @dart=2.9
         methodFromLib() {}
     expectedLibraryCount: 2
 
@@ -22,11 +20,9 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         part 'lib.dart';
         main() {}
       lib.dart: |
-        // @dart=2.9
         methodFromLib() {}
     expectedLibraryCount: 2
 
@@ -36,10 +32,8 @@
       - lib.dart
     sources:
       main.dart: |
-        // @dart=2.9
         part 'lib.dart';
         main() {}
       lib.dart: |
-        // @dart=2.9
         methodFromLib() {}
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.1.expect b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.1.expect
index 63f6134..bf0e799 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.1.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.2.expect b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.2.expect
index 63f6134..bf0e799 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.2.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.3.expect b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.3.expect
index 63f6134..bf0e799 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.3.expect
@@ -7,7 +7,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
 // part 'lib.dart';
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/regress_35215.yaml b/pkg/front_end/testcases/incremental/regress_35215.yaml
index 05e0f1a..92e35f0 100644
--- a/pkg/front_end/testcases/incremental/regress_35215.yaml
+++ b/pkg/front_end/testcases/incremental/regress_35215.yaml
@@ -11,14 +11,12 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
         main() {
           b(42);
         }
       b.dart: |
-        // @dart=2.9
-        b({int named}) {
+        b({int? named}) {
           print("b");
         }
     expectedLibraryCount: 2
@@ -29,18 +27,16 @@
       - b.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
         main() {
           b(42);
         }
       b.dart: |
-        // @dart=2.9
         // lots of comments
         // forcing offsets down
         // and also adding more lines
         // and whatnot
-        b({int named}) {
+        b({int? named}) {
           print("b");
         }
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/regress_35215.yaml.world.1.expect b/pkg/front_end/testcases/incremental/regress_35215.yaml.world.1.expect
index 8e1d7f3..ceb1348 100644
--- a/pkg/front_end/testcases/incremental/regress_35215.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/regress_35215.yaml.world.1.expect
@@ -1,7 +1,7 @@
 main = main::main;
 library from "org-dartlang-test:///b.dart" as b {
 
-  static method b({dart.core::int* named = #C1}) → dynamic {
+  static method b({dart.core::int? named = #C1}) → dynamic {
     dart.core::print("b");
   }
 }
@@ -9,19 +9,19 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+// org-dartlang-test:///main.dart:3:4: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //   b(42);
 //    ^
-// org-dartlang-test:///b.dart:2:1: Context: Found this candidate, but the arguments don't match.
-// b({int named}) {
+// org-dartlang-test:///b.dart:1:1: Context: Found this candidate, but the arguments don't match.
+// b({int? named}) {
 // ^
 //
 
   import "org-dartlang-test:///b.dart";
 
   static method main() → dynamic {
-    invalid-expression "org-dartlang-test:///main.dart:4:4: Error: Too many positional arguments: 0 allowed, but 1 found.\nTry removing the extra positional arguments.\n  b(42);\n   ^";
+    invalid-expression "org-dartlang-test:///main.dart:3:4: Error: Too many positional arguments: 0 allowed, but 1 found.\nTry removing the extra positional arguments.\n  b(42);\n   ^";
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/regress_35215.yaml.world.2.expect b/pkg/front_end/testcases/incremental/regress_35215.yaml.world.2.expect
index 21bd097..7a3401e 100644
--- a/pkg/front_end/testcases/incremental/regress_35215.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/regress_35215.yaml.world.2.expect
@@ -1,7 +1,7 @@
 main = main::main;
 library from "org-dartlang-test:///b.dart" as b {
 
-  static method b({dart.core::int* named = #C1}) → dynamic {
+  static method b({dart.core::int? named = #C1}) → dynamic {
     dart.core::print("b");
   }
 }
@@ -9,19 +9,19 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+// org-dartlang-test:///main.dart:3:4: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //   b(42);
 //    ^
-// org-dartlang-test:///b.dart:6:1: Context: Found this candidate, but the arguments don't match.
-// b({int named}) {
+// org-dartlang-test:///b.dart:5:1: Context: Found this candidate, but the arguments don't match.
+// b({int? named}) {
 // ^
 //
 
   import "org-dartlang-test:///b.dart";
 
   static method main() → dynamic {
-    invalid-expression "org-dartlang-test:///main.dart:4:4: Error: Too many positional arguments: 0 allowed, but 1 found.\nTry removing the extra positional arguments.\n  b(42);\n   ^";
+    invalid-expression "org-dartlang-test:///main.dart:3:4: Error: Too many positional arguments: 0 allowed, but 1 found.\nTry removing the extra positional arguments.\n  b(42);\n   ^";
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml
index 0ab8b96..fb57969 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml
@@ -11,10 +11,8 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
       b.dart: |
-        // @dart=2.9
         asdf
     expectedLibraryCount: 2
     errors: true
@@ -26,10 +24,8 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
       b.dart: |
-        // @dart=2.9
         asdf
     expectedLibraryCount: 2
     errors: true
@@ -46,7 +42,6 @@
       - b.dart
     sources:
       b.dart: |
-        // @dart=2.9
         asdf;
     expectedLibraryCount: 2
   - entry: main.dart
@@ -56,6 +51,5 @@
       - b.dart
     sources:
       b.dart: |
-        // @dart=2.9
         asdf() {}
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.1.expect
index 089797b..0c74f50 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.1.expect
@@ -3,11 +3,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:2:1: Error: Expected ';' after this.
+// org-dartlang-test:///b.dart:1:1: Error: Expected ';' after this.
 // asdf
 // ^^^^
 //
-// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 // Try adding the name of the type of the variable or the keyword 'var'.
 // asdf
 // ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.2.expect
index 089797b..0c74f50 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.2.expect
@@ -3,11 +3,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:2:1: Error: Expected ';' after this.
+// org-dartlang-test:///b.dart:1:1: Error: Expected ';' after this.
 // asdf
 // ^^^^
 //
-// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 // Try adding the name of the type of the variable or the keyword 'var'.
 // asdf
 // ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.3.expect
index 089797b..0c74f50 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.3.expect
@@ -3,11 +3,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:2:1: Error: Expected ';' after this.
+// org-dartlang-test:///b.dart:1:1: Error: Expected ';' after this.
 // asdf
 // ^^^^
 //
-// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 // Try adding the name of the type of the variable or the keyword 'var'.
 // asdf
 // ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.4.expect
index 089797b..0c74f50 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.4.expect
@@ -3,11 +3,11 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:2:1: Error: Expected ';' after this.
+// org-dartlang-test:///b.dart:1:1: Error: Expected ';' after this.
 // asdf
 // ^^^^
 //
-// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 // Try adding the name of the type of the variable or the keyword 'var'.
 // asdf
 // ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.5.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.5.expect
index 1771593..a44b5dc 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.5.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 // Try adding the name of the type of the variable or the keyword 'var'.
 // asdf;
 // ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml
index 7230d12..3a869c5 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml
@@ -14,13 +14,11 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
         }
       lib.dart: |
-        // @dart=2.9
         class Foo {
           const Foo(int i) : assert(i > 0);
         }
@@ -36,7 +34,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         import 'lib2.dart';
         import 'lib3.dart';
@@ -45,11 +42,9 @@
           print(fooField2);
         }
       lib2.dart: |
-        // @dart=2.9
         import 'lib.dart';
         const fooField = const Foo(0);
       lib3.dart: |
-        // @dart=2.9
         import 'lib.dart';
         const fooField2 = const Foo(0);
     expectInitializeFromDill: false
@@ -61,7 +56,6 @@
       - lib2.dart
     sources:
       lib2.dart: |
-        // @dart=2.9
         import 'lib.dart';
         const fooField = const Foo(1);
     expectInitializeFromDill: false
@@ -74,11 +68,9 @@
       - lib3.dart
     sources:
       lib2.dart: |
-        // @dart=2.9
         import 'lib.dart';
         const fooField = const Foo(0);
       lib3.dart: |
-        // @dart=2.9
         import 'lib.dart';
         const fooField2 = const Foo(1);
     expectInitializeFromDill: false
@@ -91,11 +83,9 @@
       - lib3.dart
     sources:
       lib2.dart: |
-        // @dart=2.9
         import 'lib.dart';
         const fooField = const Foo(1);
       lib3.dart: |
-        // @dart=2.9
         import 'lib.dart';
         const fooField2 = const Foo(1);
     expectInitializeFromDill: false
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.1.expect
index a45e928..06dcf28 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.1.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
index 88a3567..17e6fbe 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
@@ -24,39 +14,39 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib2.dart:3:24: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:2:24: Error: Constant evaluation error:
 // const fooField = const Foo(0);
 //                        ^
-// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
-// org-dartlang-test:///lib2.dart:3:7: Context: While analyzing:
+// org-dartlang-test:///lib2.dart:2:7: Context: While analyzing:
 // const fooField = const Foo(0);
 //       ^
 //
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field lib::Foo* fooField = invalid-expression "This assertion failed.";
+  static const field lib::Foo fooField = invalid-expression "This assertion failed.";
 }
 library from "org-dartlang-test:///lib3.dart" as lib3 {
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib3.dart:3:25: Error: Constant evaluation error:
+// org-dartlang-test:///lib3.dart:2:25: Error: Constant evaluation error:
 // const fooField2 = const Foo(0);
 //                         ^
-// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
-// org-dartlang-test:///lib3.dart:3:7: Context: While analyzing:
+// org-dartlang-test:///lib3.dart:2:7: Context: While analyzing:
 // const fooField2 = const Foo(0);
 //       ^
 //
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field lib::Foo* fooField2 = invalid-expression "This assertion failed.";
+  static const field lib::Foo fooField2 = invalid-expression "This assertion failed.";
 }
 library from "org-dartlang-test:///main.dart" as main {
 
@@ -73,8 +63,8 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///lib2.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 
 org-dartlang-test:///lib3.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
index 8f13ae6..633f67f 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
@@ -24,26 +14,26 @@
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field lib::Foo* fooField = #C1;
+  static const field lib::Foo fooField = #C1;
 }
 library from "org-dartlang-test:///lib3.dart" as lib3 {
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib3.dart:3:25: Error: Constant evaluation error:
+// org-dartlang-test:///lib3.dart:2:25: Error: Constant evaluation error:
 // const fooField2 = const Foo(0);
 //                         ^
-// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
-// org-dartlang-test:///lib3.dart:3:7: Context: While analyzing:
+// org-dartlang-test:///lib3.dart:2:7: Context: While analyzing:
 // const fooField2 = const Foo(0);
 //       ^
 //
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field lib::Foo* fooField2 = invalid-expression "This assertion failed.";
+  static const field lib::Foo fooField2 = invalid-expression "This assertion failed.";
 }
 library from "org-dartlang-test:///main.dart" as main {
 
@@ -63,9 +53,9 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///lib3.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 
 org-dartlang-test:///lib2.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
index f0e49e5..5f792dc 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
@@ -24,26 +14,26 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib2.dart:3:24: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:2:24: Error: Constant evaluation error:
 // const fooField = const Foo(0);
 //                        ^
-// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
-// org-dartlang-test:///lib2.dart:3:7: Context: While analyzing:
+// org-dartlang-test:///lib2.dart:2:7: Context: While analyzing:
 // const fooField = const Foo(0);
 //       ^
 //
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field lib::Foo* fooField = invalid-expression "This assertion failed.";
+  static const field lib::Foo fooField = invalid-expression "This assertion failed.";
 }
 library from "org-dartlang-test:///lib3.dart" as lib3 {
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field lib::Foo* fooField2 = #C1;
+  static const field lib::Foo fooField2 = #C1;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
@@ -63,9 +53,9 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///lib2.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 
 org-dartlang-test:///lib3.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.5.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.5.expect
index 2268375..828d380 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.5.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
@@ -24,13 +14,13 @@
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field lib::Foo* fooField = #C1;
+  static const field lib::Foo fooField = #C1;
 }
 library from "org-dartlang-test:///lib3.dart" as lib3 {
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field lib::Foo* fooField2 = #C1;
+  static const field lib::Foo fooField2 = #C1;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
@@ -50,10 +40,10 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///lib2.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
 org-dartlang-test:///lib3.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml
index e481eaa..76e71de 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml
@@ -12,13 +12,11 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
         }
       lib.dart: |
-        // @dart=2.9
         class Foo {
           const Foo(int i) : assert(i > 0);
         }
@@ -34,7 +32,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         import 'lib2.dart';
         main() {
@@ -42,7 +39,6 @@
           bar();
         }
       lib2.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class Bar {
           final Foo x;
@@ -58,7 +54,6 @@
       - lib2.dart
     sources:
       lib2.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class Bar {
           final Foo x;
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.1.expect
index a45e928..06dcf28 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.1.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
index ad41429..89af6473 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
@@ -24,10 +14,10 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib2.dart:5:27: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:4:27: Error: Constant evaluation error:
 //   const Bar() : x = const Foo(0);
 //                           ^
-// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
 //
@@ -35,20 +25,10 @@
   import "org-dartlang-test:///lib.dart";
 
   class Bar extends dart.core::Object /*hasConstConstructor*/  {
-    final field lib::Foo* x;
-    const constructor •() → lib2::Bar*
+    final field lib::Foo x;
+    const constructor •() → lib2::Bar
       : lib2::Bar::x = invalid-expression "This assertion failed.", super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method bar() → dynamic {}
 }
@@ -66,5 +46,5 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///lib2.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.3.expect
index 0c12219..f913229 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.3.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
@@ -25,20 +15,10 @@
   import "org-dartlang-test:///lib.dart";
 
   class Bar extends dart.core::Object /*hasConstConstructor*/  {
-    final field lib::Foo* x;
-    const constructor •() → lib2::Bar*
+    final field lib::Foo x;
+    const constructor •() → lib2::Bar
       : lib2::Bar::x = #C1, super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method bar() → dynamic {}
 }
@@ -59,6 +39,6 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///lib2.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml
index b3e673f..91ce7a3 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml
@@ -11,12 +11,10 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
 
         class A extends B {}
       b.dart: |
-        // @dart=2.9
         import "nonexisting.dart";
 
         class B extends A {}
@@ -30,12 +28,10 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
 
         class A extends B {}
       b.dart: |
-        // @dart=2.9
         import "nonexisting.dart";
 
         class B extends A {}
@@ -54,7 +50,6 @@
       - b.dart
     sources:
       b.dart: |
-        // @dart=2.9
         import "main.dart";
 
         class B extends A {}
@@ -66,6 +61,5 @@
       - b.dart
     sources:
       b.dart: |
-        // @dart=2.9
         class B extends Object {}
     expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.1.expect
index 9137423..9f49272 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.1.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:4:17: Error: Type 'A' not found.
+// org-dartlang-test:///b.dart:3:17: Error: Type 'A' not found.
 // class B extends A {}
 //                 ^
 //
@@ -11,19 +11,9 @@
   import "org-dartlang-test:///nonexisting.dart";
 
   class B extends dart.core::Object {
-    synthetic constructor •() → b::B*
+    synthetic constructor •() → b::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -31,7 +21,7 @@
   import "org-dartlang-test:///b.dart";
 
   class A extends b::B {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super b::B::•()
       ;
   }
@@ -40,7 +30,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.2.expect
index 9137423..9f49272 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.2.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:4:17: Error: Type 'A' not found.
+// org-dartlang-test:///b.dart:3:17: Error: Type 'A' not found.
 // class B extends A {}
 //                 ^
 //
@@ -11,19 +11,9 @@
   import "org-dartlang-test:///nonexisting.dart";
 
   class B extends dart.core::Object {
-    synthetic constructor •() → b::B*
+    synthetic constructor •() → b::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -31,7 +21,7 @@
   import "org-dartlang-test:///b.dart";
 
   class A extends b::B {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super b::B::•()
       ;
   }
@@ -40,7 +30,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.3.expect
index 9137423..9f49272 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.3.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:4:17: Error: Type 'A' not found.
+// org-dartlang-test:///b.dart:3:17: Error: Type 'A' not found.
 // class B extends A {}
 //                 ^
 //
@@ -11,19 +11,9 @@
   import "org-dartlang-test:///nonexisting.dart";
 
   class B extends dart.core::Object {
-    synthetic constructor •() → b::B*
+    synthetic constructor •() → b::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -31,7 +21,7 @@
   import "org-dartlang-test:///b.dart";
 
   class A extends b::B {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super b::B::•()
       ;
   }
@@ -40,7 +30,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.4.expect
index 9137423..9f49272 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.4.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:4:17: Error: Type 'A' not found.
+// org-dartlang-test:///b.dart:3:17: Error: Type 'A' not found.
 // class B extends A {}
 //                 ^
 //
@@ -11,19 +11,9 @@
   import "org-dartlang-test:///nonexisting.dart";
 
   class B extends dart.core::Object {
-    synthetic constructor •() → b::B*
+    synthetic constructor •() → b::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -31,7 +21,7 @@
   import "org-dartlang-test:///b.dart";
 
   class A extends b::B {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super b::B::•()
       ;
   }
@@ -40,7 +30,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.5.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.5.expect
index 0b8a54d..663ba1c 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.5.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:4:7: Error: 'B' is a supertype of itself.
+// org-dartlang-test:///b.dart:3:7: Error: 'B' is a supertype of itself.
 // class B extends A {}
 //       ^
 //
@@ -11,26 +11,16 @@
   import "org-dartlang-test:///main.dart";
 
   class B extends dart.core::Object {
-    synthetic constructor •() → b::B*
+    synthetic constructor •() → b::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:4:7: Error: 'A' is a supertype of itself.
+// org-dartlang-test:///main.dart:3:7: Error: 'A' is a supertype of itself.
 // class A extends B {}
 //       ^
 //
@@ -38,18 +28,8 @@
   import "org-dartlang-test:///b.dart";
 
   class A extends dart.core::Object {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.6.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.6.expect
index bbee82b..969d17c 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.6.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.6.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///b.dart" as b {
 
   class B extends dart.core::Object {
-    synthetic constructor •() → b::B*
+    synthetic constructor •() → b::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -22,7 +12,7 @@
   import "org-dartlang-test:///b.dart";
 
   class A extends b::B {
-    synthetic constructor •() → main::A*
+    synthetic constructor •() → main::A
       : super b::B::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml
index fc0ac60..50ce0fc 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml
@@ -21,16 +21,13 @@
           ]
         }
       main.dart: |
-        // @dart=2.9
         import "package:mypackage/a.dart";
       mypackage/a.dart: |
-        // @dart=2.9
         import "package:mypackage/b.dart";
 
         class Foo<T> {}
         class Bar<T> extends Foo<T> {}
       mypackage/b.dart: |
-        // @dart=2.9
         import "package:mypackage/a.dart";
 
         class Baz extends Bar<int> implements Foo<String> {}
@@ -54,16 +51,13 @@
           ]
         }
       main.dart: |
-        // @dart=2.9
         import "package:mypackage/a.dart";
       mypackage/a.dart: |
-        // @dart=2.9
         import "package:mypackage/b.dart";
 
         class Foo<T> {}
         class Bar<T> extends Foo<T> {}
       mypackage/b.dart: |
-        // @dart=2.9
         import "package:mypackage/a.dart";
 
         class Baz extends Bar<int> implements Foo<String> {}
@@ -82,7 +76,6 @@
       - mypackage/b.dart
     sources:
       mypackage/b.dart: |
-        // @dart=2.9
         import "package:mypackage/a.dart";
 
         class Baz extends Bar<int> {}
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.1.expect
index 4c3a08d..4f73a26 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.1.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/b.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/b.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
@@ -16,23 +16,13 @@
 
   import "package:mypackage/b.dart";
 
-  class Foo<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::Foo<a::Foo::T*>*
+  class Foo<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::Foo<a::Foo::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class Bar<T extends dart.core::Object* = dynamic> extends a::Foo<a::Bar::T*> {
-    synthetic constructor •() → a::Bar<a::Bar::T*>*
+  class Bar<T extends dart.core::Object? = dynamic> extends a::Foo<a::Bar::T%> {
+    synthetic constructor •() → a::Bar<a::Bar::T%>
       : super a::Foo::•()
       ;
   }
@@ -41,8 +31,8 @@
 
   import "package:mypackage/a.dart";
 
-  class Baz extends a::Bar<dart.core::int*> implements a::Foo<dart.core::String*> {
-    synthetic constructor •() → b::Baz*
+  class Baz extends a::Bar<dart.core::int> implements a::Foo<dart.core::String> {
+    synthetic constructor •() → b::Baz
       : super a::Bar::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.2.expect
index 4c3a08d..4f73a26 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.2.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/b.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/b.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
@@ -16,23 +16,13 @@
 
   import "package:mypackage/b.dart";
 
-  class Foo<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::Foo<a::Foo::T*>*
+  class Foo<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::Foo<a::Foo::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class Bar<T extends dart.core::Object* = dynamic> extends a::Foo<a::Bar::T*> {
-    synthetic constructor •() → a::Bar<a::Bar::T*>*
+  class Bar<T extends dart.core::Object? = dynamic> extends a::Foo<a::Bar::T%> {
+    synthetic constructor •() → a::Bar<a::Bar::T%>
       : super a::Foo::•()
       ;
   }
@@ -41,8 +31,8 @@
 
   import "package:mypackage/a.dart";
 
-  class Baz extends a::Bar<dart.core::int*> implements a::Foo<dart.core::String*> {
-    synthetic constructor •() → b::Baz*
+  class Baz extends a::Bar<dart.core::int> implements a::Foo<dart.core::String> {
+    synthetic constructor •() → b::Baz
       : super a::Bar::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.3.expect
index 4c3a08d..4f73a26 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.3.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/b.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/b.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
@@ -16,23 +16,13 @@
 
   import "package:mypackage/b.dart";
 
-  class Foo<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::Foo<a::Foo::T*>*
+  class Foo<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::Foo<a::Foo::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class Bar<T extends dart.core::Object* = dynamic> extends a::Foo<a::Bar::T*> {
-    synthetic constructor •() → a::Bar<a::Bar::T*>*
+  class Bar<T extends dart.core::Object? = dynamic> extends a::Foo<a::Bar::T%> {
+    synthetic constructor •() → a::Bar<a::Bar::T%>
       : super a::Foo::•()
       ;
   }
@@ -41,8 +31,8 @@
 
   import "package:mypackage/a.dart";
 
-  class Baz extends a::Bar<dart.core::int*> implements a::Foo<dart.core::String*> {
-    synthetic constructor •() → b::Baz*
+  class Baz extends a::Bar<dart.core::int> implements a::Foo<dart.core::String> {
+    synthetic constructor •() → b::Baz
       : super a::Bar::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.4.expect
index 4c3a08d..4f73a26 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.4.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/b.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/b.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
@@ -16,23 +16,13 @@
 
   import "package:mypackage/b.dart";
 
-  class Foo<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::Foo<a::Foo::T*>*
+  class Foo<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::Foo<a::Foo::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class Bar<T extends dart.core::Object* = dynamic> extends a::Foo<a::Bar::T*> {
-    synthetic constructor •() → a::Bar<a::Bar::T*>*
+  class Bar<T extends dart.core::Object? = dynamic> extends a::Foo<a::Bar::T%> {
+    synthetic constructor •() → a::Bar<a::Bar::T%>
       : super a::Foo::•()
       ;
   }
@@ -41,8 +31,8 @@
 
   import "package:mypackage/a.dart";
 
-  class Baz extends a::Bar<dart.core::int*> implements a::Foo<dart.core::String*> {
-    synthetic constructor •() → b::Baz*
+  class Baz extends a::Bar<dart.core::int> implements a::Foo<dart.core::String> {
+    synthetic constructor •() → b::Baz
       : super a::Bar::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.5.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.5.expect
index a820383..130d056 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.5.expect
@@ -8,23 +8,13 @@
 
   import "package:mypackage/b.dart";
 
-  class Foo<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::Foo<a::Foo::T*>*
+  class Foo<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::Foo<a::Foo::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class Bar<T extends dart.core::Object* = dynamic> extends a::Foo<a::Bar::T*> {
-    synthetic constructor •() → a::Bar<a::Bar::T*>*
+  class Bar<T extends dart.core::Object? = dynamic> extends a::Foo<a::Bar::T%> {
+    synthetic constructor •() → a::Bar<a::Bar::T%>
       : super a::Foo::•()
       ;
   }
@@ -33,8 +23,8 @@
 
   import "package:mypackage/a.dart";
 
-  class Baz extends a::Bar<dart.core::int*> {
-    synthetic constructor •() → b::Baz*
+  class Baz extends a::Bar<dart.core::int> {
+    synthetic constructor •() → b::Baz
       : super a::Bar::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml
index b53906c..b8e6d6a 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml
@@ -21,20 +21,16 @@
           ]
         }
       main.dart: |
-        // @dart=2.9
         import "package:mypackage/a.dart";
       mypackage/a.dart: |
-        // @dart=2.9
         import "package:mypackage/b.dart";
 
         class Foo<T> {}
         class Bar<T> extends Foo<T> {}
       mypackage/b.dart: |
-        // @dart=2.9
         import "package:mypackage/a.dart";
         part "package:mypackage/c.dart";
       mypackage/c.dart: |
-        // @dart=2.9
         part of "package:mypackage/b.dart";
 
         class Baz extends Bar<int> implements Foo<String> {}
@@ -58,20 +54,16 @@
           ]
         }
       main.dart: |
-        // @dart=2.9
         import "package:mypackage/a.dart";
       mypackage/a.dart: |
-        // @dart=2.9
         import "package:mypackage/b.dart";
 
         class Foo<T> {}
         class Bar<T> extends Foo<T> {}
       mypackage/b.dart: |
-        // @dart=2.9
         import "package:mypackage/a.dart";
         part "package:mypackage/c.dart";
       mypackage/c.dart: |
-        // @dart=2.9
         part of "package:mypackage/b.dart";
 
         class Baz extends Bar<int> implements Foo<String> {}
@@ -90,11 +82,9 @@
       - mypackage/c.dart
     sources:
       mypackage/b.dart: |
-        // @dart=2.9
         import "package:mypackage/a.dart";
         part "package:mypackage/c.dart";
       mypackage/c.dart: |
-        // @dart=2.9
         part of "package:mypackage/b.dart";
 
         class Baz extends Bar<int> {}
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.1.expect
index 5a7c122..cd3c874 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.1.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/c.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/c.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
@@ -16,23 +16,13 @@
 
   import "package:mypackage/b.dart";
 
-  class Foo<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::Foo<a::Foo::T*>*
+  class Foo<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::Foo<a::Foo::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class Bar<T extends dart.core::Object* = dynamic> extends a::Foo<a::Bar::T*> {
-    synthetic constructor •() → a::Bar<a::Bar::T*>*
+  class Bar<T extends dart.core::Object? = dynamic> extends a::Foo<a::Bar::T%> {
+    synthetic constructor •() → a::Bar<a::Bar::T%>
       : super a::Foo::•()
       ;
   }
@@ -42,8 +32,8 @@
   import "package:mypackage/a.dart";
 
   part package:mypackage/c.dart;
-  class Baz extends a::Bar<dart.core::int*> implements a::Foo<dart.core::String*> { // from org-dartlang-test:///mypackage/c.dart
-    synthetic constructor •() → b::Baz*
+  class Baz extends a::Bar<dart.core::int> implements a::Foo<dart.core::String> { // from org-dartlang-test:///mypackage/c.dart
+    synthetic constructor •() → b::Baz
       : super a::Bar::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.2.expect
index 5a7c122..cd3c874 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.2.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/c.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/c.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
@@ -16,23 +16,13 @@
 
   import "package:mypackage/b.dart";
 
-  class Foo<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::Foo<a::Foo::T*>*
+  class Foo<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::Foo<a::Foo::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class Bar<T extends dart.core::Object* = dynamic> extends a::Foo<a::Bar::T*> {
-    synthetic constructor •() → a::Bar<a::Bar::T*>*
+  class Bar<T extends dart.core::Object? = dynamic> extends a::Foo<a::Bar::T%> {
+    synthetic constructor •() → a::Bar<a::Bar::T%>
       : super a::Foo::•()
       ;
   }
@@ -42,8 +32,8 @@
   import "package:mypackage/a.dart";
 
   part package:mypackage/c.dart;
-  class Baz extends a::Bar<dart.core::int*> implements a::Foo<dart.core::String*> { // from org-dartlang-test:///mypackage/c.dart
-    synthetic constructor •() → b::Baz*
+  class Baz extends a::Bar<dart.core::int> implements a::Foo<dart.core::String> { // from org-dartlang-test:///mypackage/c.dart
+    synthetic constructor •() → b::Baz
       : super a::Bar::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.3.expect
index 5a7c122..cd3c874 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.3.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/c.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/c.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
@@ -16,23 +16,13 @@
 
   import "package:mypackage/b.dart";
 
-  class Foo<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::Foo<a::Foo::T*>*
+  class Foo<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::Foo<a::Foo::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class Bar<T extends dart.core::Object* = dynamic> extends a::Foo<a::Bar::T*> {
-    synthetic constructor •() → a::Bar<a::Bar::T*>*
+  class Bar<T extends dart.core::Object? = dynamic> extends a::Foo<a::Bar::T%> {
+    synthetic constructor •() → a::Bar<a::Bar::T%>
       : super a::Foo::•()
       ;
   }
@@ -42,8 +32,8 @@
   import "package:mypackage/a.dart";
 
   part package:mypackage/c.dart;
-  class Baz extends a::Bar<dart.core::int*> implements a::Foo<dart.core::String*> { // from org-dartlang-test:///mypackage/c.dart
-    synthetic constructor •() → b::Baz*
+  class Baz extends a::Bar<dart.core::int> implements a::Foo<dart.core::String> { // from org-dartlang-test:///mypackage/c.dart
+    synthetic constructor •() → b::Baz
       : super a::Bar::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.4.expect
index 5a7c122..cd3c874 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.4.expect
@@ -2,7 +2,7 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///mypackage/c.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/c.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
 //  - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
 // class Baz extends Bar<int> implements Foo<String> {}
 //       ^
@@ -16,23 +16,13 @@
 
   import "package:mypackage/b.dart";
 
-  class Foo<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::Foo<a::Foo::T*>*
+  class Foo<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::Foo<a::Foo::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class Bar<T extends dart.core::Object* = dynamic> extends a::Foo<a::Bar::T*> {
-    synthetic constructor •() → a::Bar<a::Bar::T*>*
+  class Bar<T extends dart.core::Object? = dynamic> extends a::Foo<a::Bar::T%> {
+    synthetic constructor •() → a::Bar<a::Bar::T%>
       : super a::Foo::•()
       ;
   }
@@ -42,8 +32,8 @@
   import "package:mypackage/a.dart";
 
   part package:mypackage/c.dart;
-  class Baz extends a::Bar<dart.core::int*> implements a::Foo<dart.core::String*> { // from org-dartlang-test:///mypackage/c.dart
-    synthetic constructor •() → b::Baz*
+  class Baz extends a::Bar<dart.core::int> implements a::Foo<dart.core::String> { // from org-dartlang-test:///mypackage/c.dart
+    synthetic constructor •() → b::Baz
       : super a::Bar::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.5.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.5.expect
index 1979776..dce0301 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.5.expect
@@ -8,23 +8,13 @@
 
   import "package:mypackage/b.dart";
 
-  class Foo<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → a::Foo<a::Foo::T*>*
+  class Foo<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → a::Foo<a::Foo::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class Bar<T extends dart.core::Object* = dynamic> extends a::Foo<a::Bar::T*> {
-    synthetic constructor •() → a::Bar<a::Bar::T*>*
+  class Bar<T extends dart.core::Object? = dynamic> extends a::Foo<a::Bar::T%> {
+    synthetic constructor •() → a::Bar<a::Bar::T%>
       : super a::Foo::•()
       ;
   }
@@ -34,8 +24,8 @@
   import "package:mypackage/a.dart";
 
   part package:mypackage/c.dart;
-  class Baz extends a::Bar<dart.core::int*> { // from org-dartlang-test:///mypackage/c.dart
-    synthetic constructor •() → b::Baz*
+  class Baz extends a::Bar<dart.core::int> { // from org-dartlang-test:///mypackage/c.dart
+    synthetic constructor •() → b::Baz
       : super a::Bar::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml
index 861b204..ce15d09 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml
@@ -21,21 +21,18 @@
           ]
         }
       main.dart: |
-        // @dart=2.9
         import "package:mypackage/a.dart" as a;
 
         main() {
           a.main();
         }
       mypackage/a.dart: |
-        // @dart=2.9
         import "package:mypackage/b.dart";
 
         main() {
           foo();
         }
       mypackage/b.dart: |
-        // @dart=2.9
         foo() {
           bar();
         }
@@ -53,7 +50,6 @@
       - package:mypackage/a.dart
     sources:
       mypackage/a.dart: |
-        // @dart=2.9
         import "package:mypackage/b.dart";
 
         main() {
@@ -69,7 +65,6 @@
       - package:mypackage/a.dart
     sources:
       mypackage/a.dart: |
-        // @dart=2.9
         main() {
           foo();
           foo();
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.1.expect
index 4aad801..8c28bf9 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.1.expect
@@ -19,12 +19,12 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.
+// org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.
 //   bar();
 //   ^^^
 //
 
   static method foo() → dynamic {
-    invalid-expression "org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.\n  bar();\n  ^^^";
+    invalid-expression "org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.\n  bar();\n  ^^^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.2.expect
index 4aad801..8c28bf9 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.2.expect
@@ -19,12 +19,12 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.
+// org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.
 //   bar();
 //   ^^^
 //
 
   static method foo() → dynamic {
-    invalid-expression "org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.\n  bar();\n  ^^^";
+    invalid-expression "org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.\n  bar();\n  ^^^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.3.expect
index 38fff53..3cd7e09 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.3.expect
@@ -20,12 +20,12 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.
+// org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.
 //   bar();
 //   ^^^
 //
 
   static method foo() → dynamic {
-    invalid-expression "org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.\n  bar();\n  ^^^";
+    invalid-expression "org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.\n  bar();\n  ^^^";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml
index 65569db..17a3a02 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml
@@ -11,14 +11,12 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class Foo<X extends Bar> {}
       lib.dart: |
-        // @dart=2.9
         // The error is here: Foo is unknown
         // (although it might give some other error instead)
-        class Bar<X extends Foo<Null>> {}
+        class Bar<X extends Foo<Never>> {}
     expectedLibraryCount: 2
     errors: true
   - entry: main.dart
@@ -28,7 +26,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class Foo {}
     expectInitializeFromDill: false
@@ -41,13 +38,11 @@
       - lib.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class Foo<X extends Bar> {}
       lib.dart: |
-        // @dart=2.9
         import 'main.dart';
-        class Bar<X extends Foo<Null>> {}
+        class Bar<X extends Foo<Never>> {}
     expectInitializeFromDill: false
     expectedLibraryCount: 2
  
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect
index 3ca4123..f24e0ee 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect
@@ -3,44 +3,24 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:4:21: Error: Type 'Foo' not found.
-// class Bar<X extends Foo<Null>> {}
+// org-dartlang-test:///lib.dart:3:21: Error: Type 'Foo' not found.
+// class Bar<X extends Foo<Never>> {}
 //                     ^^^
 //
 
   class Bar<X extends invalid-type> extends dart.core::Object {
-    synthetic constructor •() → lib::Bar<lib::Bar::X*>*
+    synthetic constructor •() → lib::Bar<lib::Bar::X%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///lib.dart";
 
-  class Foo<X extends lib::Bar<invalid-type>*> extends dart.core::Object {
-    synthetic constructor •() → main::Foo<main::Foo::X*>*
+  class Foo<X extends lib::Bar<invalid-type>> extends dart.core::Object {
+    synthetic constructor •() → main::Foo<main::Foo::X>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect
index 6e6264d..8561aaf 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect
@@ -3,25 +3,15 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:4:21: Error: Type 'Foo' not found.
-// class Bar<X extends Foo<Null>> {}
+// org-dartlang-test:///lib.dart:3:21: Error: Type 'Foo' not found.
+// class Bar<X extends Foo<Never>> {}
 //                     ^^^
 //
 
   class Bar<X extends invalid-type> extends dart.core::Object {
-    synthetic constructor •() → lib::Bar<lib::Bar::X*>*
+    synthetic constructor •() → lib::Bar<lib::Bar::X%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -29,18 +19,8 @@
   import "org-dartlang-test:///lib.dart";
 
   class Foo extends dart.core::Object {
-    synthetic constructor •() → main::Foo*
+    synthetic constructor •() → main::Foo
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.3.expect
index 3c1d034..cd073e1 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.3.expect
@@ -3,39 +3,19 @@
 
   import "org-dartlang-test:///main.dart";
 
-  class Bar<X extends main::Foo<Null>*> extends dart.core::Object {
-    synthetic constructor •() → lib::Bar<lib::Bar::X*>*
+  class Bar<X extends main::Foo<Never>> extends dart.core::Object {
+    synthetic constructor •() → lib::Bar<lib::Bar::X>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///lib.dart";
 
-  class Foo<X extends lib::Bar<main::Foo<Null>*>*> extends dart.core::Object {
-    synthetic constructor •() → main::Foo<main::Foo::X*>*
+  class Foo<X extends lib::Bar<main::Foo<Never>>> extends dart.core::Object {
+    synthetic constructor •() → main::Foo<main::Foo::X>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml
index c316a64..20ae3a1 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml
@@ -11,13 +11,11 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
         }
       lib.dart: |
-        // @dart=2.9
         import 'nonexisting.dart';
         foo() {}
     expectedLibraryCount: 2
@@ -29,7 +27,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
@@ -44,7 +41,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         import 'lib2.dart';
         main() {
@@ -52,7 +48,6 @@
           bar();
         }
       lib2.dart: |
-        // @dart=2.9
         bar() {
           print("hello");
         }
@@ -65,7 +60,6 @@
       - lib2.dart
     sources:
       lib2.dart: |
-        // @dart=2.9
         bar() {
           print("hello2");
         }
@@ -79,7 +73,6 @@
       - lib.dart
     sources:
       lib.dart: |
-        // @dart=2.9
         foo() {}
     expectInitializeFromDill: false
     expectedLibraryCount: 3
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.1.expect
index 4639701..2e97886 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.1.expect
@@ -17,7 +17,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///lib.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import 'nonexisting.dart';
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.2.expect
index 912f55c..65648e6 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.2.expect
@@ -18,7 +18,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///lib.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import 'nonexisting.dart';
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.3.expect
index 4066f1b..061945a 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.3.expect
@@ -25,7 +25,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///lib.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import 'nonexisting.dart';
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.4.expect
index c9821f8..48606d6 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.4.expect
@@ -25,7 +25,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///lib.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import 'nonexisting.dart';
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml
index 0835d55..3eb0124 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml
@@ -12,13 +12,11 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
         }
       lib.dart: |
-        // @dart=2.9
         class Foo {
           const Foo(int i) : assert(i > 0);
         }
@@ -34,14 +32,12 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         import 'lib2.dart';
         main() {
           foo();
         }
       lib2.dart: |
-        // @dart=2.9
         import 'lib.dart';
         bar() {
           const Foo(0);
@@ -55,7 +51,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.1.expect
index a45e928..06dcf28 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.1.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
index 0c6d913..9b6093c 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
@@ -24,10 +14,10 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib2.dart:4:9: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:3:9: Error: Constant evaluation error:
 //   const Foo(0);
 //         ^
-// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
 //
@@ -51,5 +41,5 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///lib2.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.3.expect
index a45e928..06dcf28 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.3.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml
index ca1a5f1..308cc60 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml
@@ -13,13 +13,11 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         main() {
           foo();
         }
       lib.dart: |
-        // @dart=2.9
         class Foo {
           const Foo(int i) : assert(i > 0);
         }
@@ -35,7 +33,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         import 'lib2.dart';
         import 'lib3.dart';
@@ -44,11 +41,9 @@
           print(fooField2);
         }
       lib2.dart: |
-        // @dart=2.9
         import 'lib.dart';
         const fooField = const Foo(0);
       lib3.dart: |
-        // @dart=2.9
         import 'lib2.dart';
         const fooField2 = fooField;
     expectInitializeFromDill: false
@@ -60,7 +55,6 @@
       - lib2.dart
     sources:
       lib2.dart: |
-        // @dart=2.9
         import 'lib.dart';
         const fooField = const Foo(1);
     expectInitializeFromDill: false
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.1.expect
index a45e928..06dcf28 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.1.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
index bad435a..4fc3a38 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
@@ -24,39 +14,39 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib2.dart:3:24: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:2:24: Error: Constant evaluation error:
 // const fooField = const Foo(0);
 //                        ^
-// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
-// org-dartlang-test:///lib2.dart:3:7: Context: While analyzing:
+// org-dartlang-test:///lib2.dart:2:7: Context: While analyzing:
 // const fooField = const Foo(0);
 //       ^
 //
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field lib::Foo* fooField = invalid-expression "This assertion failed.";
+  static const field lib::Foo fooField = invalid-expression "This assertion failed.";
 }
 library from "org-dartlang-test:///lib3.dart" as lib3 {
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib3.dart:3:19: Error: Constant evaluation error:
+// org-dartlang-test:///lib3.dart:2:19: Error: Constant evaluation error:
 // const fooField2 = fooField;
 //                   ^
-// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
 //   const Foo(int i) : assert(i > 0);
 //                               ^
-// org-dartlang-test:///lib3.dart:3:7: Context: While analyzing:
+// org-dartlang-test:///lib3.dart:2:7: Context: While analyzing:
 // const fooField2 = fooField;
 //       ^
 //
 
   import "org-dartlang-test:///lib2.dart";
 
-  static const field lib::Foo* fooField2 = invalid-expression "This assertion failed.";
+  static const field lib::Foo fooField2 = invalid-expression "This assertion failed.";
 }
 library from "org-dartlang-test:///main.dart" as main {
 
@@ -73,5 +63,5 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///lib2.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.3.expect
index c5b8118..32b7c54 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.3.expect
@@ -2,19 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
-    const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
+    const constructor •(dart.core::int i) → lib::Foo
+      : assert(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool}), super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo() → dynamic {
     new lib::Foo::•(0);
@@ -24,13 +14,13 @@
 
   import "org-dartlang-test:///lib.dart";
 
-  static const field lib::Foo* fooField = #C1;
+  static const field lib::Foo fooField = #C1;
 }
 library from "org-dartlang-test:///lib3.dart" as lib3 {
 
   import "org-dartlang-test:///lib2.dart";
 
-  static const field lib::Foo* fooField2 = #C1;
+  static const field lib::Foo fooField2 = #C1;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
@@ -50,6 +40,6 @@
 
 Constructor coverage from constants:
 org-dartlang-test:///lib2.dart:
-- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Foo. (from org-dartlang-test:///lib.dart:2:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 
diff --git a/pkg/front_end/testcases/incremental/remove_import_with_error.yaml b/pkg/front_end/testcases/incremental/remove_import_with_error.yaml
index 2451af9..5965f18 100644
--- a/pkg/front_end/testcases/incremental/remove_import_with_error.yaml
+++ b/pkg/front_end/testcases/incremental/remove_import_with_error.yaml
@@ -13,7 +13,6 @@
     warnings: false
     sources:
       main.dart: |
-        // @dart=2.9
         library mainLibrary;
         import "b.dart" as b;
 
@@ -21,7 +20,6 @@
           b.foo();
         }
       b.dart: |
-        // @dart=2.9
         library bLibrary;
 
         foo() {
@@ -45,14 +43,12 @@
     warnings: false
     sources:
       main.dart: |
-        // @dart=2.9
         library mainLibrary;
 
         main() {
           print("hello");
         }
       b.dart: |
-        // @dart=2.9
         library bLibrary;
 
         foo() {
diff --git a/pkg/front_end/testcases/incremental/remove_import_with_error.yaml.world.1.expect b/pkg/front_end/testcases/incremental/remove_import_with_error.yaml.world.1.expect
index 542be09..8627975 100644
--- a/pkg/front_end/testcases/incremental/remove_import_with_error.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/remove_import_with_error.yaml.world.1.expect
@@ -2,60 +2,30 @@
 //
 // Problems in component:
 //
-// org-dartlang-test:///b.dart:15:7: Error: 'C' can't implement both 'I<int>' and 'I<String>'
+// org-dartlang-test:///b.dart:14:7: Error: 'C' can't implement both 'I<int>' and 'I<String>'
 //  - 'I' is from 'org-dartlang-test:///b.dart'.
 // class C extends A implements B {}
 //       ^
 //
 library bLibrary from "org-dartlang-test:///b.dart" as bLi {
 
-  class I<T extends dart.core::Object* = dynamic> extends dart.core::Object {
-    synthetic constructor •() → bLi::I<bLi::I::T*>*
+  class I<T extends dart.core::Object? = dynamic> extends dart.core::Object {
+    synthetic constructor •() → bLi::I<bLi::I::T%>
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class A extends dart.core::Object implements bLi::I<dart.core::int*> {
-    synthetic constructor •() → bLi::A*
+  class A extends dart.core::Object implements bLi::I<dart.core::int> {
+    synthetic constructor •() → bLi::A
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class B extends dart.core::Object implements bLi::I<dart.core::String*> {
-    synthetic constructor •() → bLi::B*
+  class B extends dart.core::Object implements bLi::I<dart.core::String> {
+    synthetic constructor •() → bLi::B
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   class C extends bLi::A implements bLi::B {
-    synthetic constructor •() → bLi::C*
+    synthetic constructor •() → bLi::C
       : super bLi::A::•()
       ;
   }
diff --git a/pkg/front_end/testcases/incremental/strongmode_mixins.yaml b/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
index d55612e..fbfb5bd 100644
--- a/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
+++ b/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
@@ -12,10 +12,8 @@
   - a.dart
 sources:
   a.dart: |
-    // @dart=2.9
     import 'b.dart';
     class A extends Object with B<Object>, C {}
   b.dart: |
-    // @dart=2.9
     mixin C<T extends Object> on B<T> {}
     abstract class B<ChildType extends Object> extends Object {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/strongmode_mixins_2.yaml b/pkg/front_end/testcases/incremental/strongmode_mixins_2.yaml
index 19f8ea2..cb60ad7 100644
--- a/pkg/front_end/testcases/incremental/strongmode_mixins_2.yaml
+++ b/pkg/front_end/testcases/incremental/strongmode_mixins_2.yaml
@@ -10,13 +10,11 @@
   - a.dart
 sources:
   a.dart: |
-    // @dart=2.9
     import 'b.dart';
     class A extends Object with B<C>, D {}
   b.dart: |
-    // @dart=2.9
     mixin B<ChildType extends Object> {
-      ChildType get child => null;
+      ChildType get child => throw '';
       set child(ChildType value) {}
     }
 
diff --git a/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml b/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml
index c41e41a..40aae93 100644
--- a/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml
+++ b/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml
@@ -25,7 +25,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import 'lib.dart';
         class A extends B with C, D {
             A(E parameter) : super.named(parameter);
@@ -33,7 +32,6 @@
         mixin C { }
         mixin D { }
       lib.dart: |
-        // @dart=2.9
         class E {}
         abstract class B {
           final E _field;
diff --git a/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml.world.1.expect b/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml.world.1.expect
index 38493c4..266c1c0 100644
--- a/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml.world.1.expect
@@ -2,35 +2,15 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class E extends dart.core::Object {
-    synthetic constructor •() → lib::E*
+    synthetic constructor •() → lib::E
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class B extends dart.core::Object {
-    final field lib::E* _field;
-    constructor named(lib::E* _field) → lib::B*
+    final field lib::E _field;
+    constructor named(lib::E _field) → lib::B
       : lib::B::_field = _field, super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -38,42 +18,22 @@
   import "org-dartlang-test:///lib.dart";
 
   abstract class _A&B&C extends lib::B implements main::C /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor named(lib::E* _field) → main::_A&B&C*
+    synthetic constructor named(lib::E _field) → main::_A&B&C
       : super lib::B::named(_field)
       ;
   }
   abstract class _A&B&C&D extends main::_A&B&C implements main::D /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor named(lib::E* _field) → main::_A&B&C&D*
+    synthetic constructor named(lib::E _field) → main::_A&B&C&D
       : super main::_A&B&C::named(_field)
       ;
   }
   class A extends main::_A&B&C&D {
-    constructor •(lib::E* parameter) → main::A*
+    constructor •(lib::E parameter) → main::A
       : super main::_A&B&C&D::named(parameter)
       ;
   }
   abstract class C extends dart.core::Object /*isMixinDeclaration*/  {
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class D extends dart.core::Object /*isMixinDeclaration*/  {
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml.world.2.expect b/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml.world.2.expect
index 38493c4..266c1c0 100644
--- a/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml.world.2.expect
@@ -2,35 +2,15 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   class E extends dart.core::Object {
-    synthetic constructor •() → lib::E*
+    synthetic constructor •() → lib::E
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class B extends dart.core::Object {
-    final field lib::E* _field;
-    constructor named(lib::E* _field) → lib::B*
+    final field lib::E _field;
+    constructor named(lib::E _field) → lib::B
       : lib::B::_field = _field, super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -38,42 +18,22 @@
   import "org-dartlang-test:///lib.dart";
 
   abstract class _A&B&C extends lib::B implements main::C /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor named(lib::E* _field) → main::_A&B&C*
+    synthetic constructor named(lib::E _field) → main::_A&B&C
       : super lib::B::named(_field)
       ;
   }
   abstract class _A&B&C&D extends main::_A&B&C implements main::D /*isAnonymousMixin,isEliminatedMixin*/  {
-    synthetic constructor named(lib::E* _field) → main::_A&B&C&D*
+    synthetic constructor named(lib::E _field) → main::_A&B&C&D
       : super main::_A&B&C::named(_field)
       ;
   }
   class A extends main::_A&B&C&D {
-    constructor •(lib::E* parameter) → main::A*
+    constructor •(lib::E parameter) → main::A
       : super main::_A&B&C&D::named(parameter)
       ;
   }
   abstract class C extends dart.core::Object /*isMixinDeclaration*/  {
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class D extends dart.core::Object /*isMixinDeclaration*/  {
-    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
-    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
-    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
-    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
diff --git a/pkg/front_end/testcases/incremental/typedef_crash_01.yaml b/pkg/front_end/testcases/incremental/typedef_crash_01.yaml
index 44cbeeb..ca9f7f1 100644
--- a/pkg/front_end/testcases/incremental/typedef_crash_01.yaml
+++ b/pkg/front_end/testcases/incremental/typedef_crash_01.yaml
@@ -10,11 +10,9 @@
     errors: false
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart";
         typedef G<T> = Function(F<T>);
       lib.dart: |
-        // @dart=2.9
         typedef F<T> = Function();
     expectedLibraryCount: 2
   - entry: main.dart
@@ -24,7 +22,6 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "lib.dart";
         typedef G<T> = Function(F<T>);
         main() {
diff --git a/pkg/front_end/testcases/incremental/typedef_crash_01.yaml.world.1.expect b/pkg/front_end/testcases/incremental/typedef_crash_01.yaml.world.1.expect
index 6b0429d..3f1ae77 100644
--- a/pkg/front_end/testcases/incremental/typedef_crash_01.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/typedef_crash_01.yaml.world.1.expect
@@ -1,11 +1,11 @@
 main = <No Member>;
 library from "org-dartlang-test:///lib.dart" as lib {
 
-  typedef F<unrelated T extends dart.core::Object* = dynamic> = () →* dynamic;
+  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;
+  typedef G<unrelated T extends dart.core::Object? = dynamic> = (() → dynamic) → dynamic;
 }
diff --git a/pkg/front_end/testcases/incremental/typedef_crash_01.yaml.world.2.expect b/pkg/front_end/testcases/incremental/typedef_crash_01.yaml.world.2.expect
index d7c037a..9c9a9ca 100644
--- a/pkg/front_end/testcases/incremental/typedef_crash_01.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/typedef_crash_01.yaml.world.2.expect
@@ -1,13 +1,13 @@
 main = main::main;
 library from "org-dartlang-test:///lib.dart" as lib {
 
-  typedef F<unrelated T extends dart.core::Object* = dynamic> = () →* dynamic;
+  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;
+  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/unused_file.yaml b/pkg/front_end/testcases/incremental/unused_file.yaml
index c2569c1..1282d0d 100644
--- a/pkg/front_end/testcases/incremental/unused_file.yaml
+++ b/pkg/front_end/testcases/incremental/unused_file.yaml
@@ -12,14 +12,12 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
         main() {
           print("hello");
           b();
         }
       b.dart: |
-        // @dart=2.9
         b() {
           print("b");
         }
@@ -29,12 +27,10 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         main() {
           print("hello");
         }
       b.dart: |
-        // @dart=2.9
         b() {
           print("b");
         }
diff --git a/pkg/front_end/testcases/incremental/updated_package_1.yaml b/pkg/front_end/testcases/incremental/updated_package_1.yaml
index 67c83b0..bbb22c3 100644
--- a/pkg/front_end/testcases/incremental/updated_package_1.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_1.yaml
@@ -12,14 +12,12 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package_0.1.0/a.dart: |
-        // @dart=2.9
         a() {
           la1();
         }
@@ -27,7 +25,6 @@
           print("v0.1.0");
         }
       package_0.1.0/b.dart: |
-        // @dart=2.9
         import "a.dart";
         b() {
           a();
@@ -51,14 +48,12 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package_0.1.0/a.dart: |
-        // @dart=2.9
         a() {
           la1();
         }
@@ -66,13 +61,11 @@
           print("v0.1.0");
         }
       package_0.1.0/b.dart: |
-        // @dart=2.9
         import "a.dart";
         b() {
           a();
         }
       package_0.1.1/b.dart: |
-        // @dart=2.9
         b() {
           print("hello from v0.1.1");
         }
diff --git a/pkg/front_end/testcases/incremental/updated_package_2.yaml b/pkg/front_end/testcases/incremental/updated_package_2.yaml
index 6e7ae11..50d7eb3 100644
--- a/pkg/front_end/testcases/incremental/updated_package_2.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_2.yaml
@@ -12,14 +12,12 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package_0.1.0/a.dart: |
-        // @dart=2.9
         a() {
           la1();
         }
@@ -27,7 +25,6 @@
           print("v0.1.0");
         }
       package_0.1.0/b.dart: |
-        // @dart=2.9
         import "a.dart";
         b() {
           a();
@@ -50,14 +47,12 @@
     expectInitializeFromDill: false
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package_0.1.0/a.dart: |
-        // @dart=2.9
         a() {
           la1();
         }
@@ -65,13 +60,11 @@
           print("v0.1.0");
         }
       package_0.1.0/b.dart: |
-        // @dart=2.9
         import "a.dart";
         b() {
           a();
         }
       package_0.1.1/b.dart: |
-        // @dart=2.9
         b() {
           print("hello from v0.1.1");
         }
diff --git a/pkg/front_end/testcases/incremental/updated_package_3.yaml b/pkg/front_end/testcases/incremental/updated_package_3.yaml
index e3b97b7..53956fd 100644
--- a/pkg/front_end/testcases/incremental/updated_package_3.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_3.yaml
@@ -12,14 +12,12 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package_0.1.0/a.dart: |
-        // @dart=2.9
         a() {
           la1();
         }
@@ -27,7 +25,6 @@
           print("v0.1.0");
         }
       package_0.1.0/b.dart: |
-        // @dart=2.9
         import "a.dart";
         b() {
           a();
@@ -51,7 +48,6 @@
       - .packages
     sources:
       package_0.1.1/b.dart: |
-        // @dart=2.9
         b() {
           print("hello from v0.1.1");
         }
diff --git a/pkg/front_end/testcases/incremental/updated_package_4.yaml b/pkg/front_end/testcases/incremental/updated_package_4.yaml
index e5d21b3..240cae3 100644
--- a/pkg/front_end/testcases/incremental/updated_package_4.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_4.yaml
@@ -11,14 +11,12 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package/b.dart: |
-        // @dart=2.9
         b() {
           print("hello from package");
         }
diff --git a/pkg/front_end/testcases/incremental/updated_package_4.yaml.world.2.expect b/pkg/front_end/testcases/incremental/updated_package_4.yaml.world.2.expect
index 3dd8e8b..8607a05 100644
--- a/pkg/front_end/testcases/incremental/updated_package_4.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/updated_package_4.yaml.world.2.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.
+// org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.
 //   b();
 //   ^
 //
@@ -12,14 +12,14 @@
 
   static method main() → dynamic {
     dart.core::print("hello");
-    invalid-expression "org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.\n  b();\n  ^";
+    invalid-expression "org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.\n  b();\n  ^";
   }
 }
 library from "package:example/b.dart" as b {
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:8: Error: Not found: 'package:example/b.dart'
+// org-dartlang-test:///main.dart:1:8: Error: Not found: 'package:example/b.dart'
 // import "package:example/b.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/updated_package_uri.yaml b/pkg/front_end/testcases/incremental/updated_package_uri.yaml
index 53d1725..5dc47c2 100644
--- a/pkg/front_end/testcases/incremental/updated_package_uri.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_uri.yaml
@@ -12,14 +12,12 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:example/b.dart";
         main() {
           print("hello");
           b();
         }
       package_0.1.0/a.dart: |
-        // @dart=2.9
         a() {
           la1();
         }
@@ -27,7 +25,6 @@
           print("v0.1.0");
         }
       package_0.1.0/b.dart: |
-        // @dart=2.9
         import "a.dart";
         b() {
           a();
@@ -48,7 +45,6 @@
     expectInitializeFromDill: false
     sources:
       package_0.1.1/b.dart: |
-        // @dart=2.9
         b() {
           print("hello from v0.1.1");
         }
diff --git a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml
index eabf11d..22c9d3b 100644
--- a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml
+++ b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml
@@ -9,7 +9,6 @@
   - entry: set-Uint8List.dart
     sources:
       set-Uint8List.dart: |
-        // @dart=2.9
         import 'dart:typed_data';
         void setUint8List(Uint8List list, int index, int value) {
           list[index] = value;
@@ -23,7 +22,6 @@
       - set-Int8List.dart
     sources:
       set-Int8List.dart: |
-        // @dart=2.9
         import 'dart:typed_data';
         void setInt8List(Int8List list, int index, int value) {
           list[index] = value;
@@ -37,7 +35,6 @@
       - set-Uint8List.dart
     sources:
       set-Uint8List.dart: |
-        // @dart=2.9
         import 'dart:typed_data';
         void setUint8List(Uint8List list, int index, int value) {
           list[index] = value;
diff --git a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.1.expect b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.1.expect
index 71ed943..4f0757e 100644
--- a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.1.expect
@@ -3,7 +3,7 @@
 
   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){(dart.core::int*, dart.core::int*) →* void};
+  static method setUint8List(dart.typed_data::Uint8List list, dart.core::int index, dart.core::int value) → void {
+    list.{dart.core::List::[]=}(index, value){(dart.core::int, dart.core::int) → void};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.2.expect b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.2.expect
index 5cb6157..e1ec886 100644
--- a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.2.expect
@@ -3,7 +3,7 @@
 
   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){(dart.core::int*, dart.core::int*) →* void};
+  static method setInt8List(dart.typed_data::Int8List list, dart.core::int index, dart.core::int value) → void {
+    list.{dart.core::List::[]=}(index, value){(dart.core::int, dart.core::int) → void};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.3.expect b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.3.expect
index 71ed943..4f0757e 100644
--- a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.3.expect
@@ -3,7 +3,7 @@
 
   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){(dart.core::int*, dart.core::int*) →* void};
+  static method setUint8List(dart.typed_data::Uint8List list, dart.core::int index, dart.core::int value) → void {
+    list.{dart.core::List::[]=}(index, value){(dart.core::int, dart.core::int) → void};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml
index 0d6af65..9f3b66a 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml
@@ -11,10 +11,8 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
       b.dart: |
-        // @dart=2.9
         import "nonexisting.dart";
     expectedLibraryCount: 2
     expectedSyntheticLibraryCount: 1
@@ -24,10 +22,8 @@
       - main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "b.dart";
       b.dart: |
-        // @dart=2.9
         import "nonexisting.dart";
     expectedLibraryCount: 2
     expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.1.expect
index a861bfe..3e591c7 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.1.expect
@@ -13,7 +13,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.2.expect
index a861bfe..3e591c7 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.2.expect
@@ -13,7 +13,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
 // import "nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_2.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_2.yaml
index bb4a675..50f16a6 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_2.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_2.yaml
@@ -11,7 +11,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "dart:foo/nonexisting.dart";
     expectedLibraryCount: 1
     expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml
index 48439c7..6d8eb3f 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml
@@ -11,7 +11,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         part "dart:foo/nonexisting.dart";
     expectedLibraryCount: 1
     expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml.world.1.expect
index 95c6981..34996e7 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml.world.1.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-untranslatable-uri:dart%3Afoo%2Fnonexisting.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-untranslatable-uri:dart%3Afoo%2Fnonexisting.dart' as a part, because it has no 'part of' declaration.
 // part "dart:foo/nonexisting.dart";
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml
index 5822b85..1af29a8 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml
@@ -12,7 +12,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         part "package:foo/nonexisting.dart";
     expectedLibraryCount: 1
     expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml.world.1.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml.world.1.expect
index 8b98f2c..76e7779 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml.world.1.expect
@@ -3,7 +3,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-untranslatable-uri:package%3Afoo%2Fnonexisting.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-untranslatable-uri:package%3Afoo%2Fnonexisting.dart' as a part, because it has no 'part of' declaration.
 // part "package:foo/nonexisting.dart";
 //      ^
 //
@@ -14,7 +14,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:6: Error: Not found: 'package:foo/nonexisting.dart'
+// org-dartlang-test:///main.dart:1:6: Error: Not found: 'package:foo/nonexisting.dart'
 // part "package:foo/nonexisting.dart";
 //      ^
 //
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml
index 7be194b..9aa7ede 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml
@@ -11,7 +11,6 @@
   - entry: main.dart
     sources:
       main.dart: |
-        // @dart=2.9
         import "package:foo/nonexisting.dart";
     expectedLibraryCount: 1
     expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml.world.1.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml.world.1.expect
index 48013d7..2ba0d73 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml.world.1.expect
@@ -8,7 +8,7 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///main.dart:2:8: Error: Not found: 'package:foo/nonexisting.dart'
+// org-dartlang-test:///main.dart:1:8: Error: Not found: 'package:foo/nonexisting.dart'
 // import "package:foo/nonexisting.dart";
 //        ^
 //
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart
index 6d6cb6e..cece67b 100644
--- a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -12,8 +14,8 @@
 }
 
 void test() {
-  var /*@type=dynamic */ x = new C();
-  var /*@type=dynamic */ y = new D(1);
+  var /*@type=dynamic*/ x = new C();
+  var /*@type=dynamic*/ y = new D(1);
   D<List<int>> z = new D(/*@typeArgs=dynamic*/ []);
 }
 
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.expect
index e38191b..de39b36 100644
--- a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:15:34: Error: The class 'C' is abstract and can't be instantiated.
-//   var /*@type=dynamic */ x = new C();
-//                                  ^
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:17:33: Error: The class 'C' is abstract and can't be instantiated.
+//   var /*@type=dynamic*/ x = new C();
+//                                 ^
 //
-// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:16:34: Error: The class 'D' is abstract and can't be instantiated.
-//   var /*@type=dynamic */ y = new D(1);
-//                                  ^
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:18:33: Error: The class 'D' is abstract and can't be instantiated.
+//   var /*@type=dynamic*/ y = new D(1);
+//                                 ^
 //
-// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:17:24: Error: The class 'D' is abstract and can't be instantiated.
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:19:24: Error: The class 'D' is abstract and can't be instantiated.
 //   D<List<int>> z = new D(/*@typeArgs=dynamic*/ []);
 //                        ^
 //
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.modular.expect
index e38191b..de39b36 100644
--- a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.modular.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:15:34: Error: The class 'C' is abstract and can't be instantiated.
-//   var /*@type=dynamic */ x = new C();
-//                                  ^
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:17:33: Error: The class 'C' is abstract and can't be instantiated.
+//   var /*@type=dynamic*/ x = new C();
+//                                 ^
 //
-// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:16:34: Error: The class 'D' is abstract and can't be instantiated.
-//   var /*@type=dynamic */ y = new D(1);
-//                                  ^
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:18:33: Error: The class 'D' is abstract and can't be instantiated.
+//   var /*@type=dynamic*/ y = new D(1);
+//                                 ^
 //
-// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:17:24: Error: The class 'D' is abstract and can't be instantiated.
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:19:24: Error: The class 'D' is abstract and can't be instantiated.
 //   D<List<int>> z = new D(/*@typeArgs=dynamic*/ []);
 //                        ^
 //
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.transformed.expect
index ff4ca8f..a0990bb 100644
--- a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.transformed.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:15:34: Error: The class 'C' is abstract and can't be instantiated.
-//   var /*@type=dynamic */ x = new C();
-//                                  ^
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:17:33: Error: The class 'C' is abstract and can't be instantiated.
+//   var /*@type=dynamic*/ x = new C();
+//                                 ^
 //
-// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:16:34: Error: The class 'D' is abstract and can't be instantiated.
-//   var /*@type=dynamic */ y = new D(1);
-//                                  ^
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:18:33: Error: The class 'D' is abstract and can't be instantiated.
+//   var /*@type=dynamic*/ y = new D(1);
+//                                 ^
 //
-// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:17:24: Error: The class 'D' is abstract and can't be instantiated.
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:19:24: Error: The class 'D' is abstract and can't be instantiated.
 //   D<List<int>> z = new D(/*@typeArgs=dynamic*/ []);
 //                        ^
 //
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart
new file mode 100644
index 0000000..81020ff
--- /dev/null
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart
@@ -0,0 +1,20 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+abstract class C {}
+
+abstract class D<T> {
+  D(T t);
+}
+
+void test() {
+  var /*@type=Never*/ x = new C();
+  var /*@type=Never*/ y = new D(1);
+  D<List<int>> z = new D(/*@typeArgs=dynamic*/ []);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.textual_outline.expect
new file mode 100644
index 0000000..18f0b60
--- /dev/null
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+library test;
+
+abstract class C {}
+
+abstract class D<T> {
+  D(T t);
+}
+
+void test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1aba12d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+library test;
+
+abstract class C {}
+
+abstract class D<T> {
+  D(T t);
+}
+
+main() {}
+void test() {}
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.weak.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.weak.expect
new file mode 100644
index 0000000..ecc1c12
--- /dev/null
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.weak.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation2.dart:15:31: Error: The class 'C' is abstract and can't be instantiated.
+//   var /*@type=Never*/ x = new C();
+//                               ^
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation2.dart:16:31: Error: The class 'D' is abstract and can't be instantiated.
+//   var /*@type=Never*/ y = new D(1);
+//                               ^
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation2.dart:17:24: Error: The class 'D' is abstract and can't be instantiated.
+//   D<List<int>> z = new D(/*@typeArgs=dynamic*/ []);
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+abstract class D<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::D::T% t) → self::D<self::D::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → void {
+  Never x = throw new core::AbstractClassInstantiationError::•("C");
+  Never y = let final Never #t1 = let final core::Object? #t2 = 1 in throw new core::AbstractClassInstantiationError::•("D") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  self::D<core::List<core::int>> z = let final Never #t3 = let final core::Object? #t4 = <dynamic>[] in throw new core::AbstractClassInstantiationError::•("D") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.weak.modular.expect
new file mode 100644
index 0000000..ecc1c12
--- /dev/null
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation2.dart:15:31: Error: The class 'C' is abstract and can't be instantiated.
+//   var /*@type=Never*/ x = new C();
+//                               ^
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation2.dart:16:31: Error: The class 'D' is abstract and can't be instantiated.
+//   var /*@type=Never*/ y = new D(1);
+//                               ^
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation2.dart:17:24: Error: The class 'D' is abstract and can't be instantiated.
+//   D<List<int>> z = new D(/*@typeArgs=dynamic*/ []);
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+abstract class D<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::D::T% t) → self::D<self::D::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → void {
+  Never x = throw new core::AbstractClassInstantiationError::•("C");
+  Never y = let final Never #t1 = let final core::Object? #t2 = 1 in throw new core::AbstractClassInstantiationError::•("D") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  self::D<core::List<core::int>> z = let final Never #t3 = let final core::Object? #t4 = <dynamic>[] in throw new core::AbstractClassInstantiationError::•("D") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.weak.outline.expect
new file mode 100644
index 0000000..0012249
--- /dev/null
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.weak.outline.expect
@@ -0,0 +1,16 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C
+    ;
+}
+abstract class D<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::D::T% t) → self::D<self::D::T%>
+    ;
+}
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.weak.transformed.expect
new file mode 100644
index 0000000..b002d96
--- /dev/null
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation2.dart.weak.transformed.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation2.dart:15:31: Error: The class 'C' is abstract and can't be instantiated.
+//   var /*@type=Never*/ x = new C();
+//                               ^
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation2.dart:16:31: Error: The class 'D' is abstract and can't be instantiated.
+//   var /*@type=Never*/ y = new D(1);
+//                               ^
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation2.dart:17:24: Error: The class 'D' is abstract and can't be instantiated.
+//   D<List<int>> z = new D(/*@typeArgs=dynamic*/ []);
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+abstract class D<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::D::T% t) → self::D<self::D::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → void {
+  Never x = throw new core::AbstractClassInstantiationError::•("C");
+  Never y = let final Never #t1 = let final core::Object? #t2 = 1 in throw new core::AbstractClassInstantiationError::•("D") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  self::D<core::List<core::int>> z = let final Never #t3 = let final core::Object? #t4 = core::_GrowableList::•<dynamic>(0) in throw new core::AbstractClassInstantiationError::•("D") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/assert.dart b/pkg/front_end/testcases/inference/assert.dart
index af39c92..81ffdb5 100644
--- a/pkg/front_end/testcases/inference/assert.dart
+++ b/pkg/front_end/testcases/inference/assert.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 void test() {
-  assert(/*@ typeArgs=bool* */ f());
-  assert(/*@ typeArgs=bool* */ f(), /*@ typeArgs=dynamic */ f());
+  assert(/*@typeArgs=bool*/ f());
+  assert(/*@typeArgs=bool*/ f(), /*@ typeArgs=dynamic */ f());
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/assert.dart.textual_outline.expect b/pkg/front_end/testcases/inference/assert.dart.textual_outline.expect
index c1725cf..0afd8e8 100644
--- a/pkg/front_end/testcases/inference/assert.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/assert.dart.textual_outline.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 void test() {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/assert.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/assert.dart.textual_outline_modelled.expect
index f75a9d3..c8d2993 100644
--- a/pkg/front_end/testcases/inference/assert.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/assert.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 main() {}
 void test() {}
diff --git a/pkg/front_end/testcases/inference/assert.dart.weak.expect b/pkg/front_end/testcases/inference/assert.dart.weak.expect
index 1122765..8cae19e 100644
--- a/pkg/front_end/testcases/inference/assert.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/assert.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → void {
-  assert(self::f<core::bool*>());
-  assert(self::f<core::bool*>(), self::f<dynamic>());
+  assert(self::f<core::bool>());
+  assert(self::f<core::bool>(), self::f<dynamic>());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/assert.dart.weak.modular.expect b/pkg/front_end/testcases/inference/assert.dart.weak.modular.expect
index 1122765..8cae19e 100644
--- a/pkg/front_end/testcases/inference/assert.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/assert.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → void {
-  assert(self::f<core::bool*>());
-  assert(self::f<core::bool*>(), self::f<dynamic>());
+  assert(self::f<core::bool>());
+  assert(self::f<core::bool>(), self::f<dynamic>());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/assert.dart.weak.outline.expect b/pkg/front_end/testcases/inference/assert.dart.weak.outline.expect
index dfd99e1..247b913 100644
--- a/pkg/front_end/testcases/inference/assert.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/assert.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/assert.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/assert.dart.weak.transformed.expect
index 1122765..8cae19e 100644
--- a/pkg/front_end/testcases/inference/assert.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/assert.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → void {
-  assert(self::f<core::bool*>());
-  assert(self::f<core::bool*>(), self::f<dynamic>());
+  assert(self::f<core::bool>());
+  assert(self::f<core::bool>(), self::f<dynamic>());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart b/pkg/front_end/testcases/inference/assert_initializer.dart
index 800fcfa..9f3e894 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart
@@ -1,21 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C {
-  C.expressionOnly() : assert(/*@ typeArgs=bool* */ f());
+  C.expressionOnly() : assert(/*@typeArgs=bool*/ f());
   C.expressionAndMessage()
-      : assert(/*@ typeArgs=bool* */ f(), /*@ typeArgs=dynamic */ f());
+      : assert(/*@typeArgs=bool*/ f(), /*@ typeArgs=dynamic */ f());
 }
 
 main() {
   // Test type inference of assert statements just to verify that the behavior
   // is the same.
-  assert(/*@ typeArgs=bool* */ f());
-  assert(/*@ typeArgs=bool* */ f(), /*@ typeArgs=dynamic */ f());
+  assert(/*@typeArgs=bool*/ f());
+  assert(/*@typeArgs=bool*/ f(), /*@ typeArgs=dynamic */ f());
 }
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.textual_outline.expect
index 60baab5..b5eb36d 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C {
   C.expressionOnly() : assert(f());
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.textual_outline_modelled.expect
index 8b4a391..7154567 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C {
   C.expressionAndMessage() : assert(f(), f());
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.weak.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.weak.expect
index 8d3a6de..4532dfc 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.weak.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor expressionOnly() → self::C*
-    : assert(self::f<core::bool*>()), super core::Object::•()
+  constructor expressionOnly() → self::C
+    : assert(self::f<core::bool>()), super core::Object::•()
     ;
-  constructor expressionAndMessage() → self::C*
-    : assert(self::f<core::bool*>(), self::f<dynamic>()), super core::Object::•()
+  constructor expressionAndMessage() → self::C
+    : assert(self::f<core::bool>(), self::f<dynamic>()), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {
-  assert(self::f<core::bool*>());
-  assert(self::f<core::bool*>(), self::f<dynamic>());
+  assert(self::f<core::bool>());
+  assert(self::f<core::bool>(), self::f<dynamic>());
 }
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.weak.modular.expect
index 8d3a6de..4532dfc 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor expressionOnly() → self::C*
-    : assert(self::f<core::bool*>()), super core::Object::•()
+  constructor expressionOnly() → self::C
+    : assert(self::f<core::bool>()), super core::Object::•()
     ;
-  constructor expressionAndMessage() → self::C*
-    : assert(self::f<core::bool*>(), self::f<dynamic>()), super core::Object::•()
+  constructor expressionAndMessage() → self::C
+    : assert(self::f<core::bool>(), self::f<dynamic>()), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {
-  assert(self::f<core::bool*>());
-  assert(self::f<core::bool*>(), self::f<dynamic>());
+  assert(self::f<core::bool>());
+  assert(self::f<core::bool>(), self::f<dynamic>());
 }
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.weak.outline.expect
index 0349a72..d9695aa 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor expressionOnly() → self::C*
+  constructor expressionOnly() → self::C
     ;
-  constructor expressionAndMessage() → self::C*
+  constructor expressionAndMessage() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.weak.transformed.expect
index 8d3a6de..4532dfc 100644
--- a/pkg/front_end/testcases/inference/assert_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.weak.transformed.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor expressionOnly() → self::C*
-    : assert(self::f<core::bool*>()), super core::Object::•()
+  constructor expressionOnly() → self::C
+    : assert(self::f<core::bool>()), super core::Object::•()
     ;
-  constructor expressionAndMessage() → self::C*
-    : assert(self::f<core::bool*>(), self::f<dynamic>()), super core::Object::•()
+  constructor expressionAndMessage() → self::C
+    : assert(self::f<core::bool>(), self::f<dynamic>()), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {
-  assert(self::f<core::bool*>());
-  assert(self::f<core::bool*>(), self::f<dynamic>());
+  assert(self::f<core::bool>());
+  assert(self::f<core::bool>(), self::f<dynamic>());
 }
diff --git a/pkg/front_end/testcases/inference/assign_local.dart b/pkg/front_end/testcases/inference/assign_local.dart
index bd63a65..53ef197 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart
+++ b/pkg/front_end/testcases/inference/assign_local.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,10 +11,10 @@
 
 main() {
   num x;
-  var /*@ type=int* */ x1 = (x = 1);
-  var /*@ type=double* */ x2 = (x = 1.0);
+  var /*@type=int*/ x1 = (x = 1);
+  var /*@type=double*/ x2 = (x = 1.0);
 
   A<int> y;
-  var /*@ type=A<int*>* */ y1 = (y = new /*@ typeArgs=int* */ A());
-  var /*@ type=B<int*>* */ y2 = (y = new /*@ typeArgs=int* */ B());
+  var /*@type=A<int>*/ y1 = (y = new /*@typeArgs=int*/ A());
+  var /*@type=B<int>*/ y2 = (y = new /*@typeArgs=int*/ B());
 }
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.textual_outline.expect b/pkg/front_end/testcases/inference/assign_local.dart.textual_outline.expect
index 4c1b53e..dab01df 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {}
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/assign_local.dart.textual_outline_modelled.expect
index 4c1b53e..dab01df 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {}
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.weak.expect b/pkg/front_end/testcases/inference/assign_local.dart.weak.expect
index 21f996a..a98d596 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.weak.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+  synthetic constructor •() → self::B<self::B::T%>
     : super self::A::•()
     ;
 }
 static method main() → dynamic {
-  core::num* x;
-  core::int* x1 = x = 1;
-  core::double* x2 = x = 1.0;
-  self::A<core::int*>* y;
-  self::A<core::int*>* y1 = y = new self::A::•<core::int*>();
-  self::B<core::int*>* y2 = y = new self::B::•<core::int*>();
+  core::num x;
+  core::int x1 = x = 1;
+  core::double x2 = x = 1.0;
+  self::A<core::int> y;
+  self::A<core::int> y1 = y = new self::A::•<core::int>();
+  self::B<core::int> y2 = y = new self::B::•<core::int>();
 }
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/assign_local.dart.weak.modular.expect
index 21f996a..a98d596 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.weak.modular.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+  synthetic constructor •() → self::B<self::B::T%>
     : super self::A::•()
     ;
 }
 static method main() → dynamic {
-  core::num* x;
-  core::int* x1 = x = 1;
-  core::double* x2 = x = 1.0;
-  self::A<core::int*>* y;
-  self::A<core::int*>* y1 = y = new self::A::•<core::int*>();
-  self::B<core::int*>* y2 = y = new self::B::•<core::int*>();
+  core::num x;
+  core::int x1 = x = 1;
+  core::double x2 = x = 1.0;
+  self::A<core::int> y;
+  self::A<core::int> y1 = y = new self::A::•<core::int>();
+  self::B<core::int> y2 = y = new self::B::•<core::int>();
 }
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.weak.outline.expect b/pkg/front_end/testcases/inference/assign_local.dart.weak.outline.expect
index d120923..bf914a8 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/assign_local.dart.weak.transformed.expect
index 21f996a..a98d596 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.weak.transformed.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+  synthetic constructor •() → self::B<self::B::T%>
     : super self::A::•()
     ;
 }
 static method main() → dynamic {
-  core::num* x;
-  core::int* x1 = x = 1;
-  core::double* x2 = x = 1.0;
-  self::A<core::int*>* y;
-  self::A<core::int*>* y1 = y = new self::A::•<core::int*>();
-  self::B<core::int*>* y2 = y = new self::B::•<core::int*>();
+  core::num x;
+  core::int x1 = x = 1;
+  core::double x2 = x = 1.0;
+  self::A<core::int> y;
+  self::A<core::int> y1 = y = new self::A::•<core::int>();
+  self::B<core::int> y2 = y = new self::B::•<core::int>();
 }
diff --git a/pkg/front_end/testcases/inference/async_await.dart b/pkg/front_end/testcases/inference/async_await.dart
index ad86050..1b959ac 100644
--- a/pkg/front_end/testcases/inference/async_await.dart
+++ b/pkg/front_end/testcases/inference/async_await.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/async_await2.dart b/pkg/front_end/testcases/inference/async_await2.dart
new file mode 100644
index 0000000..073aded
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_await2.dart
@@ -0,0 +1,46 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+abstract class MyFuture implements Future<int> {}
+
+void test(
+    int x0,
+    Future<int> x1,
+    Future<Future<int>> x2,
+    Future<FutureOr<int>> x3,
+    Future<MyFuture> x4,
+    FutureOr<int> x5,
+    FutureOr<Future<int>> x6,
+    FutureOr<FutureOr<int>> x7,
+    FutureOr<MyFuture> x8,
+    MyFuture x9) async {
+  /*@returnType=Future<int>*/ test0() async => x0;
+  /*@returnType=Future<int>*/ test1() async => x1;
+  /*@returnType=Future<int>*/ test2() async => x2;
+  /*@returnType=Future<int>*/ test3() async => x3;
+  /*@returnType=Future<int>*/ test4() async => x4;
+  /*@returnType=Future<int>*/ test5() async => x5;
+  /*@returnType=Future<int>*/ test6() async => x6;
+  /*@returnType=Future<int>*/ test7() async => x7;
+  /*@returnType=Future<int>*/ test8() async => x8;
+  /*@returnType=Future<int>*/ test9() async => x9;
+
+  var /*@type=int*/ y0 = await x0;
+  var /*@type=int*/ y1 = await x1;
+  var /*@type=Future<int>*/ y2 = await x2;
+  var /*@type=FutureOr<int>*/ y3 = await x3;
+  var /*@type=MyFuture*/ y4 = await x4;
+  var /*@type=int*/ y5 = await x5;
+  var /*@type=Future<int>*/ y6 = await x6;
+  var /*@type=FutureOr<int>*/ y7 = await x7;
+  var /*@type=MyFuture*/ y8 = await x8;
+  var /*@type=int*/ y9 = await x9;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/async_await2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/async_await2.dart.textual_outline.expect
new file mode 100644
index 0000000..b57968b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_await2.dart.textual_outline.expect
@@ -0,0 +1,18 @@
+library test;
+
+import 'dart:async';
+
+abstract class MyFuture implements Future<int> {}
+
+void test(
+    int x0,
+    Future<int> x1,
+    Future<Future<int>> x2,
+    Future<FutureOr<int>> x3,
+    Future<MyFuture> x4,
+    FutureOr<int> x5,
+    FutureOr<Future<int>> x6,
+    FutureOr<FutureOr<int>> x7,
+    FutureOr<MyFuture> x8,
+    MyFuture x9) async {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/async_await2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/async_await2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..44a293c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_await2.dart.textual_outline_modelled.expect
@@ -0,0 +1,18 @@
+library test;
+
+import 'dart:async';
+
+abstract class MyFuture implements Future<int> {}
+
+main() {}
+void test(
+    int x0,
+    Future<int> x1,
+    Future<Future<int>> x2,
+    Future<FutureOr<int>> x3,
+    Future<MyFuture> x4,
+    FutureOr<int> x5,
+    FutureOr<Future<int>> x6,
+    FutureOr<FutureOr<int>> x7,
+    FutureOr<MyFuture> x8,
+    MyFuture x9) async {}
diff --git a/pkg/front_end/testcases/inference/async_await2.dart.weak.expect b/pkg/front_end/testcases/inference/async_await2.dart.weak.expect
new file mode 100644
index 0000000..42ab569
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_await2.dart.weak.expect
@@ -0,0 +1,100 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/async_await2.dart:25:48: Error: A value of type 'Future<Future<int>>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test2() async => x2;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:26:48: Error: A value of type 'Future<FutureOr<int>>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test3() async => x3;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:27:48: Error: A value of type 'Future<MyFuture>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'MyFuture' is from 'pkg/front_end/testcases/inference/async_await2.dart'.
+//   /*@returnType=Future<int>*/ test4() async => x4;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:29:48: Error: A value of type 'FutureOr<Future<int>>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test6() async => x6;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:30:48: Error: A value of type 'FutureOr<FutureOr<int>>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test7() async => x7;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:31:48: Error: A value of type 'FutureOr<MyFuture>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'MyFuture' is from 'pkg/front_end/testcases/inference/async_await2.dart'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test8() async => x8;
+//                                                ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+abstract class MyFuture extends core::Object implements asy::Future<core::int> {
+  synthetic constructor •() → self::MyFuture
+    : super core::Object::•()
+    ;
+}
+static method test(core::int x0, asy::Future<core::int> x1, asy::Future<asy::Future<core::int>> x2, asy::Future<FutureOr<core::int>> x3, asy::Future<self::MyFuture> x4, FutureOr<core::int>x5, FutureOr<asy::Future<core::int>>x6, FutureOr<FutureOr<core::int>>x7, FutureOr<self::MyFuture>x8, self::MyFuture x9) → void async /* futureValueType= void */ {
+  function test0() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return x0;
+  function test1() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return x1;
+  function test2() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:25:48: Error: A value of type 'Future<Future<int>>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test2() async => x2;
+                                               ^" in x2 as{TypeError,ForNonNullableByDefault} core::int;
+  function test3() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:26:48: Error: A value of type 'Future<FutureOr<int>>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test3() async => x3;
+                                               ^" in x3 as{TypeError,ForNonNullableByDefault} core::int;
+  function test4() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:27:48: Error: A value of type 'Future<MyFuture>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+ - 'MyFuture' is from 'pkg/front_end/testcases/inference/async_await2.dart'.
+  /*@returnType=Future<int>*/ test4() async => x4;
+                                               ^" in x4 as{TypeError,ForNonNullableByDefault} core::int;
+  function test5() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return x5;
+  function test6() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:29:48: Error: A value of type 'FutureOr<Future<int>>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test6() async => x6;
+                                               ^" in x6 as{TypeError,ForNonNullableByDefault} core::int;
+  function test7() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:30:48: Error: A value of type 'FutureOr<FutureOr<int>>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test7() async => x7;
+                                               ^" in x7 as{TypeError,ForNonNullableByDefault} core::int;
+  function test8() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:31:48: Error: A value of type 'FutureOr<MyFuture>' can't be returned from an async function with return type 'Future<int>'.
+ - 'MyFuture' is from 'pkg/front_end/testcases/inference/async_await2.dart'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test8() async => x8;
+                                               ^" in x8 as{TypeError,ForNonNullableByDefault} core::int;
+  function test9() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return x9;
+  core::int y0 = await x0;
+  core::int y1 = await x1;
+  asy::Future<core::int> y2 = await x2;
+  FutureOr<core::int>y3 = await x3;
+  self::MyFuture y4 = await x4;
+  core::int y5 = await x5;
+  asy::Future<core::int> y6 = await x6;
+  FutureOr<core::int>y7 = await x7;
+  self::MyFuture y8 = await x8;
+  core::int y9 = await x9;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/async_await2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/async_await2.dart.weak.modular.expect
new file mode 100644
index 0000000..42ab569
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_await2.dart.weak.modular.expect
@@ -0,0 +1,100 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/async_await2.dart:25:48: Error: A value of type 'Future<Future<int>>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test2() async => x2;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:26:48: Error: A value of type 'Future<FutureOr<int>>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test3() async => x3;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:27:48: Error: A value of type 'Future<MyFuture>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'MyFuture' is from 'pkg/front_end/testcases/inference/async_await2.dart'.
+//   /*@returnType=Future<int>*/ test4() async => x4;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:29:48: Error: A value of type 'FutureOr<Future<int>>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test6() async => x6;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:30:48: Error: A value of type 'FutureOr<FutureOr<int>>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test7() async => x7;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:31:48: Error: A value of type 'FutureOr<MyFuture>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'MyFuture' is from 'pkg/front_end/testcases/inference/async_await2.dart'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test8() async => x8;
+//                                                ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+abstract class MyFuture extends core::Object implements asy::Future<core::int> {
+  synthetic constructor •() → self::MyFuture
+    : super core::Object::•()
+    ;
+}
+static method test(core::int x0, asy::Future<core::int> x1, asy::Future<asy::Future<core::int>> x2, asy::Future<FutureOr<core::int>> x3, asy::Future<self::MyFuture> x4, FutureOr<core::int>x5, FutureOr<asy::Future<core::int>>x6, FutureOr<FutureOr<core::int>>x7, FutureOr<self::MyFuture>x8, self::MyFuture x9) → void async /* futureValueType= void */ {
+  function test0() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return x0;
+  function test1() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return x1;
+  function test2() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:25:48: Error: A value of type 'Future<Future<int>>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test2() async => x2;
+                                               ^" in x2 as{TypeError,ForNonNullableByDefault} core::int;
+  function test3() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:26:48: Error: A value of type 'Future<FutureOr<int>>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test3() async => x3;
+                                               ^" in x3 as{TypeError,ForNonNullableByDefault} core::int;
+  function test4() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:27:48: Error: A value of type 'Future<MyFuture>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+ - 'MyFuture' is from 'pkg/front_end/testcases/inference/async_await2.dart'.
+  /*@returnType=Future<int>*/ test4() async => x4;
+                                               ^" in x4 as{TypeError,ForNonNullableByDefault} core::int;
+  function test5() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return x5;
+  function test6() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:29:48: Error: A value of type 'FutureOr<Future<int>>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test6() async => x6;
+                                               ^" in x6 as{TypeError,ForNonNullableByDefault} core::int;
+  function test7() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:30:48: Error: A value of type 'FutureOr<FutureOr<int>>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test7() async => x7;
+                                               ^" in x7 as{TypeError,ForNonNullableByDefault} core::int;
+  function test8() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:31:48: Error: A value of type 'FutureOr<MyFuture>' can't be returned from an async function with return type 'Future<int>'.
+ - 'MyFuture' is from 'pkg/front_end/testcases/inference/async_await2.dart'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test8() async => x8;
+                                               ^" in x8 as{TypeError,ForNonNullableByDefault} core::int;
+  function test9() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return x9;
+  core::int y0 = await x0;
+  core::int y1 = await x1;
+  asy::Future<core::int> y2 = await x2;
+  FutureOr<core::int>y3 = await x3;
+  self::MyFuture y4 = await x4;
+  core::int y5 = await x5;
+  asy::Future<core::int> y6 = await x6;
+  FutureOr<core::int>y7 = await x7;
+  self::MyFuture y8 = await x8;
+  core::int y9 = await x9;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/async_await2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/async_await2.dart.weak.outline.expect
new file mode 100644
index 0000000..000c689
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_await2.dart.weak.outline.expect
@@ -0,0 +1,15 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+abstract class MyFuture extends core::Object implements asy::Future<core::int> {
+  synthetic constructor •() → self::MyFuture
+    ;
+}
+static method test(core::int x0, asy::Future<core::int> x1, asy::Future<asy::Future<core::int>> x2, asy::Future<FutureOr<core::int>> x3, asy::Future<self::MyFuture> x4, FutureOr<core::int>x5, FutureOr<asy::Future<core::int>>x6, FutureOr<FutureOr<core::int>>x7, FutureOr<self::MyFuture>x8, self::MyFuture x9) → void async 
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/async_await2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_await2.dart.weak.transformed.expect
new file mode 100644
index 0000000..42ab569
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_await2.dart.weak.transformed.expect
@@ -0,0 +1,100 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/async_await2.dart:25:48: Error: A value of type 'Future<Future<int>>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test2() async => x2;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:26:48: Error: A value of type 'Future<FutureOr<int>>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test3() async => x3;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:27:48: Error: A value of type 'Future<MyFuture>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'MyFuture' is from 'pkg/front_end/testcases/inference/async_await2.dart'.
+//   /*@returnType=Future<int>*/ test4() async => x4;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:29:48: Error: A value of type 'FutureOr<Future<int>>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test6() async => x6;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:30:48: Error: A value of type 'FutureOr<FutureOr<int>>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test7() async => x7;
+//                                                ^
+//
+// pkg/front_end/testcases/inference/async_await2.dart:31:48: Error: A value of type 'FutureOr<MyFuture>' can't be returned from an async function with return type 'Future<int>'.
+//  - 'MyFuture' is from 'pkg/front_end/testcases/inference/async_await2.dart'.
+//  - 'Future' is from 'dart:async'.
+//   /*@returnType=Future<int>*/ test8() async => x8;
+//                                                ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+abstract class MyFuture extends core::Object implements asy::Future<core::int> {
+  synthetic constructor •() → self::MyFuture
+    : super core::Object::•()
+    ;
+}
+static method test(core::int x0, asy::Future<core::int> x1, asy::Future<asy::Future<core::int>> x2, asy::Future<FutureOr<core::int>> x3, asy::Future<self::MyFuture> x4, FutureOr<core::int>x5, FutureOr<asy::Future<core::int>>x6, FutureOr<FutureOr<core::int>>x7, FutureOr<self::MyFuture>x8, self::MyFuture x9) → void async /* futureValueType= void */ {
+  function test0() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return x0;
+  function test1() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return x1;
+  function test2() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:25:48: Error: A value of type 'Future<Future<int>>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test2() async => x2;
+                                               ^" in x2 as{TypeError,ForNonNullableByDefault} core::int;
+  function test3() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:26:48: Error: A value of type 'Future<FutureOr<int>>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test3() async => x3;
+                                               ^" in x3 as{TypeError,ForNonNullableByDefault} core::int;
+  function test4() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:27:48: Error: A value of type 'Future<MyFuture>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+ - 'MyFuture' is from 'pkg/front_end/testcases/inference/async_await2.dart'.
+  /*@returnType=Future<int>*/ test4() async => x4;
+                                               ^" in x4 as{TypeError,ForNonNullableByDefault} core::int;
+  function test5() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return x5;
+  function test6() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:29:48: Error: A value of type 'FutureOr<Future<int>>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test6() async => x6;
+                                               ^" in x6 as{TypeError,ForNonNullableByDefault} core::int;
+  function test7() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:30:48: Error: A value of type 'FutureOr<FutureOr<int>>' can't be returned from an async function with return type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test7() async => x7;
+                                               ^" in x7 as{TypeError,ForNonNullableByDefault} core::int;
+  function test8() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return invalid-expression "pkg/front_end/testcases/inference/async_await2.dart:31:48: Error: A value of type 'FutureOr<MyFuture>' can't be returned from an async function with return type 'Future<int>'.
+ - 'MyFuture' is from 'pkg/front_end/testcases/inference/async_await2.dart'.
+ - 'Future' is from 'dart:async'.
+  /*@returnType=Future<int>*/ test8() async => x8;
+                                               ^" in x8 as{TypeError,ForNonNullableByDefault} core::int;
+  function test9() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return x9;
+  core::int y0 = await x0;
+  core::int y1 = await x1;
+  asy::Future<core::int> y2 = await x2;
+  FutureOr<core::int>y3 = await x3;
+  self::MyFuture y4 = await x4;
+  core::int y5 = await x5;
+  asy::Future<core::int> y6 = await x6;
+  FutureOr<core::int>y7 = await x7;
+  self::MyFuture y8 = await x8;
+  core::int y9 = await x9;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart
index d61ec5d..3cb145f 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-Future<int> futureInt = null;
-var f = /*@ returnType=Future<int*>* */ () => futureInt;
-var g = /*@ returnType=Future<int*>* */ () async => futureInt;
+Future<int> futureInt = new Future<int>.value(0);
+var f = /*@returnType=Future<int>*/ () => futureInt;
+var g = /*@returnType=Future<int>*/ () async => futureInt;
 
 main() {
   f;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.textual_outline.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.textual_outline.expect
index 224b906..935c6cb 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-Future<int> futureInt = null;
+Future<int> futureInt = new Future<int>.value(0);
 var f = () => futureInt;
 var g = () async => futureInt;
 main() {}
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.textual_outline_modelled.expect
index 86c1b92..0fca41d 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-Future<int> futureInt = null;
+Future<int> futureInt = new Future<int>.value(0);
 main() {}
 var f = () => futureInt;
 var g = () async => futureInt;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.expect
index 366738b..155b32a 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static field asy::Future<core::int*>* futureInt = null;
-static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* => self::futureInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::futureInt;
+static field asy::Future<core::int> futureInt = asy::Future::value<core::int>(0);
+static field () → asy::Future<core::int> f = () → asy::Future<core::int> => self::futureInt;
+static field () → asy::Future<core::int> g = () → asy::Future<core::int> async /* futureValueType= core::int */ => self::futureInt;
 static method main() → dynamic {
   self::f;
   self::g;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.modular.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.modular.expect
index 366738b..155b32a 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static field asy::Future<core::int*>* futureInt = null;
-static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* => self::futureInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::futureInt;
+static field asy::Future<core::int> futureInt = asy::Future::value<core::int>(0);
+static field () → asy::Future<core::int> f = () → asy::Future<core::int> => self::futureInt;
+static field () → asy::Future<core::int> g = () → asy::Future<core::int> async /* futureValueType= core::int */ => self::futureInt;
 static method main() → dynamic {
   self::f;
   self::g;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.outline.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.outline.expect
index 2582eae..de27f66 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.outline.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static field asy::Future<core::int*>* futureInt;
-static field () →* asy::Future<core::int*>* f;
-static field () →* asy::Future<core::int*>* g;
+static field asy::Future<core::int> futureInt;
+static field () → asy::Future<core::int> f;
+static field () → asy::Future<core::int> g;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect
index 366738b..155b32a 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static field asy::Future<core::int*>* futureInt = null;
-static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* => self::futureInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::futureInt;
+static field asy::Future<core::int> futureInt = asy::Future::value<core::int>(0);
+static field () → asy::Future<core::int> f = () → asy::Future<core::int> => self::futureInt;
+static field () → asy::Future<core::int> g = () → asy::Future<core::int> async /* futureValueType= core::int */ => self::futureInt;
 static method main() → dynamic {
   self::f;
   self::g;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart
index 31f7a19..0abd1b3 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-var f = /*@ returnType=Future<int*>* */ () async => 0;
+var f = /*@returnType=Future<int>*/ () async => 0;
 
 main() {
   f;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.textual_outline.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.textual_outline.expect
index 7eb8184..d5d8f30 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var f = () async => 0;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.textual_outline_modelled.expect
index c970c4d..95b148d 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.expect
index dcce00c..12aa747 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 0;
+static field () → asy::Future<core::int> f = () → asy::Future<core::int> async /* futureValueType= core::int */ => 0;
 static method main() → dynamic {
   self::f;
 }
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.modular.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.modular.expect
index dcce00c..12aa747 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 0;
+static field () → asy::Future<core::int> f = () → asy::Future<core::int> async /* futureValueType= core::int */ => 0;
 static method main() → dynamic {
   self::f;
 }
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.outline.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.outline.expect
index 0231dd0..c3332b3 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static field () →* asy::Future<core::int*>* f;
+static field () → asy::Future<core::int> f;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect
index dcce00c..12aa747 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 0;
+static field () → asy::Future<core::int> f = () → asy::Future<core::int> async /* futureValueType= core::int */ => 0;
 static method main() → dynamic {
   self::f;
 }
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart
index dc80145..6e5dea7 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-FutureOr<int> futureOrInt = null;
-var f = /*@ returnType=FutureOr<int*>* */ () => futureOrInt;
-var g = /*@ returnType=Future<int*>* */ () async => futureOrInt;
+FutureOr<int> futureOrInt = new Future<int>.value(0);
+var f = /*@returnType=FutureOr<int>*/ () => futureOrInt;
+var g = /*@returnType=Future<int>*/ () async => futureOrInt;
 
 main() {
   f;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.textual_outline.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.textual_outline.expect
index bf9ae10..e219993 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-FutureOr<int> futureOrInt = null;
+FutureOr<int> futureOrInt = new Future<int>.value(0);
 var f = () => futureOrInt;
 var g = () async => futureOrInt;
 main() {}
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.textual_outline_modelled.expect
index 390945c..f00b1a1 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-FutureOr<int> futureOrInt = null;
+FutureOr<int> futureOrInt = new Future<int>.value(0);
 main() {}
 var f = () => futureOrInt;
 var g = () async => futureOrInt;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.expect
index 5454d59..adaed45 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-static field FutureOr<core::int*>* futureOrInt = null;
-static field () →* FutureOr<core::int*>* f = () → FutureOr<core::int*>* => self::futureOrInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::futureOrInt;
+static field FutureOr<core::int>futureOrInt = asy::Future::value<core::int>(0);
+static field () → FutureOr<core::int>f = () → FutureOr<core::int> => self::futureOrInt;
+static field () → asy::Future<core::int> g = () → asy::Future<core::int> async /* futureValueType= core::int */ => self::futureOrInt;
 static method main() → dynamic {
   self::f;
   self::g;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.modular.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.modular.expect
index 5454d59..adaed45 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-static field FutureOr<core::int*>* futureOrInt = null;
-static field () →* FutureOr<core::int*>* f = () → FutureOr<core::int*>* => self::futureOrInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::futureOrInt;
+static field FutureOr<core::int>futureOrInt = asy::Future::value<core::int>(0);
+static field () → FutureOr<core::int>f = () → FutureOr<core::int> => self::futureOrInt;
+static field () → asy::Future<core::int> g = () → asy::Future<core::int> async /* futureValueType= core::int */ => self::futureOrInt;
 static method main() → dynamic {
   self::f;
   self::g;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.outline.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.outline.expect
index 01ef3de..51cbd57 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.outline.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-static field FutureOr<core::int*>* futureOrInt;
-static field () →* FutureOr<core::int*>* f;
-static field () →* asy::Future<core::int*>* g;
+static field FutureOr<core::int>futureOrInt;
+static field () → FutureOr<core::int>f;
+static field () → asy::Future<core::int> g;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect
index 5454d59..adaed45 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-static field FutureOr<core::int*>* futureOrInt = null;
-static field () →* FutureOr<core::int*>* f = () → FutureOr<core::int*>* => self::futureOrInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::futureOrInt;
+static field FutureOr<core::int>futureOrInt = asy::Future::value<core::int>(0);
+static field () → FutureOr<core::int>f = () → FutureOr<core::int> => self::futureOrInt;
+static field () → asy::Future<core::int> g = () → asy::Future<core::int> async /* futureValueType= core::int */ => self::futureOrInt;
 static method main() → dynamic {
   self::f;
   self::g;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart
index e5f490e..a6981af 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +11,7 @@
 import 'dart:math' show Random;
 
 test() {
-  var /*@ type=() ->* Future<num*>* */ f = /*@ returnType=Future<num*>* */ () async {
+  var /*@type=() ->* Future<num*>**/ f = /*@returnType=Future<num*>**/ () async {
     if (new Random(). /*@target=dart.math::Random.nextBool*/ nextBool()) {
       return new Future<int>.value(1);
     } else {
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart
new file mode 100644
index 0000000..47dc331
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart
@@ -0,0 +1,22 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+import 'dart:math' show Random;
+
+test() {
+  var /*@type=() -> Future<num>*/ f = /*@returnType=Future<num>*/ () async {
+    if (new Random(). /*@target=dart.math::Random.nextBool*/ nextBool()) {
+      return new Future<int>.value(1);
+    } else {
+      return new Future<double>.value(2.0);
+    }
+  };
+  Future<num> g = f();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.textual_outline.expect
new file mode 100644
index 0000000..2d20965
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+library test;
+
+import 'dart:async';
+import 'dart:math' show Random;
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0962407
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+library test;
+
+import 'dart:async';
+import 'dart:math' show Random;
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.weak.expect
new file mode 100644
index 0000000..6ccd6f3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.weak.expect
@@ -0,0 +1,21 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic {
+  () → asy::Future<core::num> f = () → asy::Future<core::num> async /* futureValueType= core::num */ {
+    if(math::Random::•().{math::Random::nextBool}(){() → core::bool}) {
+      return asy::Future::value<core::int>(1);
+    }
+    else {
+      return asy::Future::value<core::double>(2.0);
+    }
+  };
+  asy::Future<core::num> g = f(){() → asy::Future<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.weak.modular.expect
new file mode 100644
index 0000000..6ccd6f3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic {
+  () → asy::Future<core::num> f = () → asy::Future<core::num> async /* futureValueType= core::num */ {
+    if(math::Random::•().{math::Random::nextBool}(){() → core::bool}) {
+      return asy::Future::value<core::int>(1);
+    }
+    else {
+      return asy::Future::value<core::double>(2.0);
+    }
+  };
+  asy::Future<core::num> g = f(){() → asy::Future<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.weak.outline.expect
new file mode 100644
index 0000000..aff57bb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.weak.outline.expect
@@ -0,0 +1,10 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.weak.transformed.expect
new file mode 100644
index 0000000..6ccd6f3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures2.dart.weak.transformed.expect
@@ -0,0 +1,21 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic {
+  () → asy::Future<core::num> f = () → asy::Future<core::num> async /* futureValueType= core::num */ {
+    if(math::Random::•().{math::Random::nextBool}(){() → core::bool}) {
+      return asy::Future::value<core::int>(1);
+    }
+    else {
+      return asy::Future::value<core::double>(2.0);
+    }
+  };
+  asy::Future<core::num> g = f(){() → asy::Future<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart
index 7c1fe26..caebc14 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +11,7 @@
 import 'dart:math' show Random;
 
 test() {
-  var /*@ type=() ->* Future<num*>* */ f = /*@ returnType=Future<num*>* */ () async {
+  var /*@type=() ->* Future<num*>**/ f = /*@returnType=Future<num*>**/ () async {
     if (new Random(). /*@target=dart.math::Random.nextBool*/ nextBool()) {
       return 1;
     } else {
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart
new file mode 100644
index 0000000..bdb1a59
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart
@@ -0,0 +1,22 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+import 'dart:math' show Random;
+
+test() {
+  var /*@type=() -> Future<num>*/ f = /*@returnType=Future<num>*/ () async {
+    if (new Random(). /*@target=dart.math::Random.nextBool*/ nextBool()) {
+      return 1;
+    } else {
+      return 2.0;
+    }
+  };
+  Future<num> g = f();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.textual_outline.expect
new file mode 100644
index 0000000..2d20965
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+library test;
+
+import 'dart:async';
+import 'dart:math' show Random;
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0962407
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+library test;
+
+import 'dart:async';
+import 'dart:math' show Random;
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.weak.expect
new file mode 100644
index 0000000..080f755
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.weak.expect
@@ -0,0 +1,21 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic {
+  () → asy::Future<core::num> f = () → asy::Future<core::num> async /* futureValueType= core::num */ {
+    if(math::Random::•().{math::Random::nextBool}(){() → core::bool}) {
+      return 1;
+    }
+    else {
+      return 2.0;
+    }
+  };
+  asy::Future<core::num> g = f(){() → asy::Future<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.weak.modular.expect
new file mode 100644
index 0000000..080f755
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic {
+  () → asy::Future<core::num> f = () → asy::Future<core::num> async /* futureValueType= core::num */ {
+    if(math::Random::•().{math::Random::nextBool}(){() → core::bool}) {
+      return 1;
+    }
+    else {
+      return 2.0;
+    }
+  };
+  asy::Future<core::num> g = f(){() → asy::Future<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.weak.outline.expect
new file mode 100644
index 0000000..aff57bb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.weak.outline.expect
@@ -0,0 +1,10 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.weak.transformed.expect
new file mode 100644
index 0000000..080f755
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values2.dart.weak.transformed.expect
@@ -0,0 +1,21 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic {
+  () → asy::Future<core::num> f = () → asy::Future<core::num> async /* futureValueType= core::num */ {
+    if(math::Random::•().{math::Random::nextBool}(){() → core::bool}) {
+      return 1;
+    }
+    else {
+      return 2.0;
+    }
+  };
+  asy::Future<core::num> g = f(){() → asy::Future<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart
index 10de769..f21b349 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +11,7 @@
 import 'dart:math' show Random;
 
 test() {
-  var /*@ type=() ->* Future<num*>* */ f = /*@ returnType=Future<num*>* */ () async {
+  var /*@type=() ->* Future<num*>**/ f = /*@returnType=Future<num*>**/ () async {
     if (new Random(). /*@target=dart.math::Random.nextBool*/ nextBool()) {
       return new Future<int>.value(1);
     } else {
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart
new file mode 100644
index 0000000..7b7b896
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart
@@ -0,0 +1,22 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+import 'dart:math' show Random;
+
+test() {
+  var /*@type=() -> Future<num>*/ f = /*@returnType=Future<num>*/ () async {
+    if (new Random(). /*@target=dart.math::Random.nextBool*/ nextBool()) {
+      return new Future<int>.value(1);
+    } else {
+      return 2.0;
+    }
+  };
+  Future<num> g = f();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.textual_outline.expect
new file mode 100644
index 0000000..2d20965
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+library test;
+
+import 'dart:async';
+import 'dart:math' show Random;
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0962407
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+library test;
+
+import 'dart:async';
+import 'dart:math' show Random;
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.weak.expect
new file mode 100644
index 0000000..2ab9201
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.weak.expect
@@ -0,0 +1,21 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic {
+  () → asy::Future<core::num> f = () → asy::Future<core::num> async /* futureValueType= core::num */ {
+    if(math::Random::•().{math::Random::nextBool}(){() → core::bool}) {
+      return asy::Future::value<core::int>(1);
+    }
+    else {
+      return 2.0;
+    }
+  };
+  asy::Future<core::num> g = f(){() → asy::Future<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.weak.modular.expect
new file mode 100644
index 0000000..2ab9201
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic {
+  () → asy::Future<core::num> f = () → asy::Future<core::num> async /* futureValueType= core::num */ {
+    if(math::Random::•().{math::Random::nextBool}(){() → core::bool}) {
+      return asy::Future::value<core::int>(1);
+    }
+    else {
+      return 2.0;
+    }
+  };
+  asy::Future<core::num> g = f(){() → asy::Future<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.weak.outline.expect
new file mode 100644
index 0000000..aff57bb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.weak.outline.expect
@@ -0,0 +1,10 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.weak.transformed.expect
new file mode 100644
index 0000000..2ab9201
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures2.dart.weak.transformed.expect
@@ -0,0 +1,21 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic {
+  () → asy::Future<core::num> f = () → asy::Future<core::num> async /* futureValueType= core::num */ {
+    if(math::Random::•().{math::Random::nextBool}(){() → core::bool}) {
+      return asy::Future::value<core::int>(1);
+    }
+    else {
+      return 2.0;
+    }
+  };
+  asy::Future<core::num> g = f(){() → asy::Future<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart
index 9ff3d91..503d723 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart
@@ -1,14 +1,16 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
 test() {
-  var /*@ type=() ->* Stream<num*>* */ f = /*@ returnType=Stream<num*>* */ () async* {
+  var /*@type=() ->* Stream<num*>**/ f = /*@returnType=Stream<num*>**/ () async* {
     yield 1;
     Stream<double> s;
     yield* s;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart
new file mode 100644
index 0000000..b035e8c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+test() {
+  var /*@type=() -> Stream<num>*/ f = /*@returnType=Stream<num>*/ () async* {
+    yield 1;
+    Stream<double> s;
+    yield* s;
+  };
+  Stream<num> g = f();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.textual_outline.expect
new file mode 100644
index 0000000..242deb6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+library test;
+
+import 'dart:async';
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8318b63
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+library test;
+
+import 'dart:async';
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.weak.expect
new file mode 100644
index 0000000..5a7e40f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.weak.expect
@@ -0,0 +1,25 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart:14:12: Error: Non-nullable variable 's' must be assigned before it can be used.
+//     yield* s;
+//            ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method test() → dynamic {
+  () → asy::Stream<core::num> f = () → asy::Stream<core::num> async* {
+    yield 1;
+    asy::Stream<core::double> s;
+    yield* invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart:14:12: Error: Non-nullable variable 's' must be assigned before it can be used.
+    yield* s;
+           ^" in s;
+  };
+  asy::Stream<core::num> g = f(){() → asy::Stream<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.weak.modular.expect
new file mode 100644
index 0000000..5a7e40f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart:14:12: Error: Non-nullable variable 's' must be assigned before it can be used.
+//     yield* s;
+//            ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method test() → dynamic {
+  () → asy::Stream<core::num> f = () → asy::Stream<core::num> async* {
+    yield 1;
+    asy::Stream<core::double> s;
+    yield* invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart:14:12: Error: Non-nullable variable 's' must be assigned before it can be used.
+    yield* s;
+           ^" in s;
+  };
+  asy::Stream<core::num> g = f(){() → asy::Stream<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.weak.outline.expect
new file mode 100644
index 0000000..1d5fd98
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.weak.outline.expect
@@ -0,0 +1,9 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+
+import "dart:async";
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.weak.transformed.expect
new file mode 100644
index 0000000..5a7e40f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart.weak.transformed.expect
@@ -0,0 +1,25 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart:14:12: Error: Non-nullable variable 's' must be assigned before it can be used.
+//     yield* s;
+//            ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method test() → dynamic {
+  () → asy::Stream<core::num> f = () → asy::Stream<core::num> async* {
+    yield 1;
+    asy::Stream<core::double> s;
+    yield* invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_async_star2.dart:14:12: Error: Non-nullable variable 's' must be assigned before it can be used.
+    yield* s;
+           ^" in s;
+  };
+  asy::Stream<core::num> g = f(){() → asy::Stream<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart
index 8bb60dd..07ff73bee 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart
@@ -1,15 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-test1() {
-  List<int> o;
-  var /*@ type=Iterable<int*>* */ y =
-      o. /*@ typeArgs=int* */ /*@target=Iterable.map*/ map(
-          /*@ returnType=int* */ (/*@ type=int* */ x) {
+test1(List<int> o) {
+  var /*@type=Iterable<int>*/ y =
+      o. /*@typeArgs=int*/ /*@target=Iterable.map*/ map(
+          /*@returnType=int*/ (/*@type=int*/ x) {
     return x /*@target=num.+*/ + 1;
   });
   Iterable<int> z = y;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.textual_outline.expect
index f75f219..66cea18 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
-test1() {}
+test1(List<int> o) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.textual_outline_modelled.expect
index b1f0123..72361bb 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
 main() {}
-test1() {}
+test1(List<int> o) {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.expect
index add23e8..f696105 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.expect
@@ -1,12 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test1() → dynamic {
-  core::List<core::int*>* o;
-  core::Iterable<core::int*>* y = o.{core::Iterable::map}<core::int*>((core::int* x) → core::int* {
-    return x.{core::num::+}(1){(core::num*) →* core::int*};
-  }){((core::int*) →* core::int*) →* core::Iterable<core::int*>*};
-  core::Iterable<core::int*>* z = y;
+static method test1(core::List<core::int> o) → dynamic {
+  core::Iterable<core::int> y = o.{core::Iterable::map}<core::int>((core::int x) → core::int {
+    return x.{core::num::+}(1){(core::num) → core::int};
+  }){((core::int) → core::int) → core::Iterable<core::int>};
+  core::Iterable<core::int> z = y;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.modular.expect
index add23e8..f696105 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.modular.expect
@@ -1,12 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test1() → dynamic {
-  core::List<core::int*>* o;
-  core::Iterable<core::int*>* y = o.{core::Iterable::map}<core::int*>((core::int* x) → core::int* {
-    return x.{core::num::+}(1){(core::num*) →* core::int*};
-  }){((core::int*) →* core::int*) →* core::Iterable<core::int*>*};
-  core::Iterable<core::int*>* z = y;
+static method test1(core::List<core::int> o) → dynamic {
+  core::Iterable<core::int> y = o.{core::Iterable::map}<core::int>((core::int x) → core::int {
+    return x.{core::num::+}(1){(core::num) → core::int};
+  }){((core::int) → core::int) → core::Iterable<core::int>};
+  core::Iterable<core::int> z = y;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.outline.expect
index 3619892..6504e2e 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.outline.expect
@@ -1,7 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method test1() → dynamic
+static method test1(core::List<core::int> o) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.transformed.expect
index add23e8..f696105 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.transformed.expect
@@ -1,12 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test1() → dynamic {
-  core::List<core::int*>* o;
-  core::Iterable<core::int*>* y = o.{core::Iterable::map}<core::int*>((core::int* x) → core::int* {
-    return x.{core::num::+}(1){(core::num*) →* core::int*};
-  }){((core::int*) →* core::int*) →* core::Iterable<core::int*>*};
-  core::Iterable<core::int*>* z = y;
+static method test1(core::List<core::int> o) → dynamic {
+  core::Iterable<core::int> y = o.{core::Iterable::map}<core::int>((core::int x) → core::int {
+    return x.{core::num::+}(1){(core::num) → core::int};
+  }){((core::int) → core::int) → core::Iterable<core::int>};
+  core::Iterable<core::int> z = y;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart
index f785f62..17b8f8c 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart
@@ -1,13 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-f() {
-  List<int> o;
-  o. /*@target=Iterable.where*/ where(/*@ returnType=bool* */ (/*@ type=int* */ i) {
+f(List<int> o) {
+  o. /*@target=Iterable.where*/ where(/*@returnType=bool*/ (/*@type=int*/ i) {
     return i /*@target=num.==*/ == 0;
   });
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.textual_outline.expect
index 54d3052..3276f20 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
-f() {}
+f(List<int> o) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.textual_outline_modelled.expect
index 54d3052..3276f20 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
-f() {}
+f(List<int> o) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.expect
index 446c911..5b9c3a0 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.expect
@@ -1,11 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f() → dynamic {
-  core::List<core::int*>* o;
-  o.{core::Iterable::where}((core::int* i) → core::bool* {
-    return i =={core::num::==}{(core::Object*) →* core::bool*} 0;
-  }){((core::int*) →* core::bool*) →* core::Iterable<core::int*>*};
+static method f(core::List<core::int> o) → dynamic {
+  o.{core::Iterable::where}((core::int i) → core::bool {
+    return i =={core::num::==}{(core::Object) → core::bool} 0;
+  }){((core::int) → core::bool) → core::Iterable<core::int>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.modular.expect
index 446c911..5b9c3a0 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.modular.expect
@@ -1,11 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f() → dynamic {
-  core::List<core::int*>* o;
-  o.{core::Iterable::where}((core::int* i) → core::bool* {
-    return i =={core::num::==}{(core::Object*) →* core::bool*} 0;
-  }){((core::int*) →* core::bool*) →* core::Iterable<core::int*>*};
+static method f(core::List<core::int> o) → dynamic {
+  o.{core::Iterable::where}((core::int i) → core::bool {
+    return i =={core::num::==}{(core::Object) → core::bool} 0;
+  }){((core::int) → core::bool) → core::Iterable<core::int>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.outline.expect
index b08cbd0..a5a8e2e 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.outline.expect
@@ -1,7 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method f() → dynamic
+static method f(core::List<core::int> o) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.transformed.expect
index 446c911..5b9c3a0 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.transformed.expect
@@ -1,11 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f() → dynamic {
-  core::List<core::int*>* o;
-  o.{core::Iterable::where}((core::int* i) → core::bool* {
-    return i =={core::num::==}{(core::Object*) →* core::bool*} 0;
-  }){((core::int*) →* core::bool*) →* core::Iterable<core::int*>*};
+static method f(core::List<core::int> o) → dynamic {
+  o.{core::Iterable::where}((core::int i) → core::bool {
+    return i =={core::num::==}{(core::Object) → core::bool} 0;
+  }){((core::int) → core::bool) → core::Iterable<core::int>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart
index fe29a68..f39b842 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  String f() => null;
-  var /*@ type=() ->* String* */ g = f;
-  g = /*@ returnType=String* */ () {
+  String f() => '';
+  var /*@type=() -> String*/ g = f;
+  g = /*@returnType=String*/ () {
     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
   };
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.expect
index e90018d..31ee2a4 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
 //                                             ^
 //
@@ -10,12 +10,12 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function f() → core::String*
-    return null;
-  () →* core::String* g = f;
-  g = () → core::String* {
-    return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  function f() → core::String
+    return "";
+  () → core::String g = f;
+  g = () → core::String {
+    return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be returned from a function with return type 'String'.
     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
-                                            ^" in 1 as{TypeError} core::String*;
+                                            ^" in 1 as{TypeError,ForNonNullableByDefault} core::String;
   };
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.modular.expect
index e90018d..31ee2a4 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
 //                                             ^
 //
@@ -10,12 +10,12 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function f() → core::String*
-    return null;
-  () →* core::String* g = f;
-  g = () → core::String* {
-    return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  function f() → core::String
+    return "";
+  () → core::String g = f;
+  g = () → core::String {
+    return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be returned from a function with return type 'String'.
     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
-                                            ^" in 1 as{TypeError} core::String*;
+                                            ^" in 1 as{TypeError,ForNonNullableByDefault} core::String;
   };
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.transformed.expect
index e90018d..31ee2a4 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
 //                                             ^
 //
@@ -10,12 +10,12 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function f() → core::String*
-    return null;
-  () →* core::String* g = f;
-  g = () → core::String* {
-    return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  function f() → core::String
+    return "";
+  () → core::String g = f;
+  g = () → core::String {
+    return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be returned from a function with return type 'String'.
     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
-                                            ^" in 1 as{TypeError} core::String*;
+                                            ^" in 1 as{TypeError,ForNonNullableByDefault} core::String;
   };
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart
index aa4161f..76d6876 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-String f() => null;
+String f() => '';
 var g = f;
 
 main() {
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.textual_outline.expect
index 88e5ddb..5abe5f0 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.textual_outline.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
-String f() => null;
+String f() => '';
 var g = f;
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.textual_outline_modelled.expect
index 68acc43..9193ecf 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
-String f() => null;
+String f() => '';
 main() {}
 var g = f;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.expect
index f1a6a23..3486650 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field () →* core::String* g = #C1;
-static method f() → core::String*
-  return null;
+static field () → core::String g = #C1;
+static method f() → core::String
+  return "";
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.modular.expect
index f1a6a23..3486650 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field () →* core::String* g = #C1;
-static method f() → core::String*
-  return null;
+static field () → core::String g = #C1;
+static method f() → core::String
+  return "";
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.outline.expect
index d08afaa..6fd106d 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field () →* core::String* g;
-static method f() → core::String*
+static field () → core::String g;
+static method f() → core::String
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.transformed.expect
index f1a6a23..3486650 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field () →* core::String* g = #C1;
-static method f() → core::String*
-  return null;
+static field () → core::String g = #C1;
+static method f() → core::String
+  return "";
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart
index 75e2f5f..167439c 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart
@@ -1,17 +1,17 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
 main() async {
-  var /*@ type=() ->* Future<Null>* */ f = /*@ returnType=Future<Null>* */ () async {
+  var /*@type=() -> Future<Null>*/ f = /*@returnType=Future<Null>*/ () async {
     return null;
   };
   Future y = f();
-  Future<String> z = f();
-  String s = await f();
+  Future<String?> z = f();
+  String? s = await f();
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.textual_outline.expect
index c7e4fb3..8519dee 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.textual_outline_modelled.expect
index c7e4fb3..8519dee 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.expect
index 2d31d8e..6f2f7bf 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
@@ -6,10 +6,10 @@
 import "dart:async";
 
 static method main() → dynamic async /* futureValueType= dynamic */ {
-  () →* asy::Future<Null>* f = () → asy::Future<Null>* async /* futureValueType= Null */ {
+  () → asy::Future<Null> f = () → asy::Future<Null> async /* futureValueType= Null */ {
     return null;
   };
-  asy::Future<dynamic>* y = f(){() →* asy::Future<Null>*};
-  asy::Future<core::String*>* z = f(){() →* asy::Future<Null>*};
-  core::String* s = await f(){() →* asy::Future<Null>*};
+  asy::Future<dynamic> y = f(){() → asy::Future<Null>};
+  asy::Future<core::String?> z = f(){() → asy::Future<Null>};
+  core::String? s = await f(){() → asy::Future<Null>};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.modular.expect
index 2d31d8e..6f2f7bf 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
@@ -6,10 +6,10 @@
 import "dart:async";
 
 static method main() → dynamic async /* futureValueType= dynamic */ {
-  () →* asy::Future<Null>* f = () → asy::Future<Null>* async /* futureValueType= Null */ {
+  () → asy::Future<Null> f = () → asy::Future<Null> async /* futureValueType= Null */ {
     return null;
   };
-  asy::Future<dynamic>* y = f(){() →* asy::Future<Null>*};
-  asy::Future<core::String*>* z = f(){() →* asy::Future<Null>*};
-  core::String* s = await f(){() →* asy::Future<Null>*};
+  asy::Future<dynamic> y = f(){() → asy::Future<Null>};
+  asy::Future<core::String?> z = f(){() → asy::Future<Null>};
+  core::String? s = await f(){() → asy::Future<Null>};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.outline.expect
index 2fff360..37820c3 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:async";
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
index 2d31d8e..6f2f7bf 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
@@ -6,10 +6,10 @@
 import "dart:async";
 
 static method main() → dynamic async /* futureValueType= dynamic */ {
-  () →* asy::Future<Null>* f = () → asy::Future<Null>* async /* futureValueType= Null */ {
+  () → asy::Future<Null> f = () → asy::Future<Null> async /* futureValueType= Null */ {
     return null;
   };
-  asy::Future<dynamic>* y = f(){() →* asy::Future<Null>*};
-  asy::Future<core::String*>* z = f(){() →* asy::Future<Null>*};
-  core::String* s = await f(){() →* asy::Future<Null>*};
+  asy::Future<dynamic> y = f(){() → asy::Future<Null>};
+  asy::Future<core::String?> z = f(){() → asy::Future<Null>};
+  core::String? s = await f(){() → asy::Future<Null>};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart
index a76ff1c..cda3e06 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart
@@ -1,17 +1,17 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
 main() async {
-  var /*@ type=() ->* Stream<Null>* */ f = /*@ returnType=Stream<Null>* */ () async* {
+  var /*@type=() -> Stream<Null>*/ f = /*@returnType=Stream<Null>*/ () async* {
     yield null;
   };
   Stream y = f();
-  Stream<String> z = f();
-  String s = await f(). /*@target=Stream.first*/ first;
+  Stream<String?> z = f();
+  String? s = await f(). /*@target=Stream.first*/ first;
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.textual_outline.expect
index c7e4fb3..8519dee 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.textual_outline_modelled.expect
index c7e4fb3..8519dee 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.expect
index 9a6dc27..c69923a 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
@@ -6,10 +6,10 @@
 import "dart:async";
 
 static method main() → dynamic async /* futureValueType= dynamic */ {
-  () →* asy::Stream<Null>* f = () → asy::Stream<Null>* async* {
+  () → asy::Stream<Null> f = () → asy::Stream<Null> async* {
     yield null;
   };
-  asy::Stream<dynamic>* y = f(){() →* asy::Stream<Null>*};
-  asy::Stream<core::String*>* z = f(){() →* asy::Stream<Null>*};
-  core::String* s = await f(){() →* asy::Stream<Null>*}.{asy::Stream::first}{asy::Future<Null>*};
+  asy::Stream<dynamic> y = f(){() → asy::Stream<Null>};
+  asy::Stream<core::String?> z = f(){() → asy::Stream<Null>};
+  core::String? s = await f(){() → asy::Stream<Null>}.{asy::Stream::first}{asy::Future<Null>};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.modular.expect
index 9a6dc27..c69923a 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
@@ -6,10 +6,10 @@
 import "dart:async";
 
 static method main() → dynamic async /* futureValueType= dynamic */ {
-  () →* asy::Stream<Null>* f = () → asy::Stream<Null>* async* {
+  () → asy::Stream<Null> f = () → asy::Stream<Null> async* {
     yield null;
   };
-  asy::Stream<dynamic>* y = f(){() →* asy::Stream<Null>*};
-  asy::Stream<core::String*>* z = f(){() →* asy::Stream<Null>*};
-  core::String* s = await f(){() →* asy::Stream<Null>*}.{asy::Stream::first}{asy::Future<Null>*};
+  asy::Stream<dynamic> y = f(){() → asy::Stream<Null>};
+  asy::Stream<core::String?> z = f(){() → asy::Stream<Null>};
+  core::String? s = await f(){() → asy::Stream<Null>}.{asy::Stream::first}{asy::Future<Null>};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.outline.expect
index 2fff360..37820c3 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:async";
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
index 9a6dc27..c69923a 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
@@ -6,10 +6,10 @@
 import "dart:async";
 
 static method main() → dynamic async /* futureValueType= dynamic */ {
-  () →* asy::Stream<Null>* f = () → asy::Stream<Null>* async* {
+  () → asy::Stream<Null> f = () → asy::Stream<Null> async* {
     yield null;
   };
-  asy::Stream<dynamic>* y = f(){() →* asy::Stream<Null>*};
-  asy::Stream<core::String*>* z = f(){() →* asy::Stream<Null>*};
-  core::String* s = await f(){() →* asy::Stream<Null>*}.{asy::Stream::first}{asy::Future<Null>*};
+  asy::Stream<dynamic> y = f(){() → asy::Stream<Null>};
+  asy::Stream<core::String?> z = f(){() → asy::Stream<Null>};
+  core::String? s = await f(){() → asy::Stream<Null>}.{asy::Stream::first}{asy::Future<Null>};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart
index be08618..40a6cbe 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,18 +11,18 @@
 void foo(int f(Object _)) {}
 
 test() {
-  var /*@ type=(Object*) ->* Null */ f = /*@ returnType=Null */ (Object x) {
+  var /*@type=(Object*) ->* Null*/ f = /*@ returnType=Null */ (Object x) {
     return null;
   };
   String y = f(42);
 
-  f = /*error:INVALID_CAST_FUNCTION_EXPR*/ /*@ returnType=Null */ (/*@ type=Object* */ x) =>
+  f = /*error:INVALID_CAST_FUNCTION_EXPR*/ /*@ returnType=Null */ (/*@type=Object**/ x) =>
       'hello';
 
-  foo(/*@ returnType=Null */ (/*@ type=Object* */ x) {
+  foo(/*@returnType=Null*/ (/*@type=Object**/ x) {
     return null;
   });
-  foo(/*@ returnType=Null */ (/*@ type=Object* */ x) {
+  foo(/*@returnType=Null*/ (/*@type=Object**/ x) {
     throw "not implemented";
   });
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart
new file mode 100644
index 0000000..8de5086
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart
@@ -0,0 +1,28 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+var h = null;
+void foo(int? f(Object _)) {}
+
+test() {
+  var /*@type=(Object) -> Null*/ f = /*@ returnType=Null */ (Object x) {
+    return null;
+  };
+  String? y = f(42);
+
+  f = /*error:INVALID_CAST_FUNCTION_EXPR*/ /*@ returnType=Null */ (/*@type=Object*/ x) =>
+      'hello';
+
+  foo(/*@returnType=Null*/ (/*@type=Object*/ x) {
+    return null;
+  });
+  foo(/*@returnType=Never*/ (/*@type=Object*/ x) {
+    throw "not implemented";
+  });
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.textual_outline.expect
new file mode 100644
index 0000000..7093497
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+library test;
+
+var h = null;
+void foo(int? f(Object _)) {}
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d2bcf0b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+library test;
+
+main() {}
+test() {}
+var h = null;
+void foo(int? f(Object _)) {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.weak.expect
new file mode 100644
index 0000000..cbf28f2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.weak.expect
@@ -0,0 +1,29 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart:18:7: Error: A value of type 'String' can't be returned from a function with return type 'Null'.
+//       'hello';
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h = null;
+static method foo((core::Object) → core::int? f) → void {}
+static method test() → dynamic {
+  (core::Object) → Null f = (core::Object x) → Null {
+    return null;
+  };
+  core::String? y = f(42){(core::Object) → Null};
+  f = (core::Object x) → Null => invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart:18:7: Error: A value of type 'String' can't be returned from a function with return type 'Null'.
+      'hello';
+      ^" in "hello" as{TypeError,ForNonNullableByDefault} Null;
+  self::foo((core::Object x) → Null {
+    return null;
+  });
+  self::foo((core::Object x) → Never {
+    throw "not implemented";
+  });
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.weak.modular.expect
new file mode 100644
index 0000000..cbf28f2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart:18:7: Error: A value of type 'String' can't be returned from a function with return type 'Null'.
+//       'hello';
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h = null;
+static method foo((core::Object) → core::int? f) → void {}
+static method test() → dynamic {
+  (core::Object) → Null f = (core::Object x) → Null {
+    return null;
+  };
+  core::String? y = f(42){(core::Object) → Null};
+  f = (core::Object x) → Null => invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart:18:7: Error: A value of type 'String' can't be returned from a function with return type 'Null'.
+      'hello';
+      ^" in "hello" as{TypeError,ForNonNullableByDefault} Null;
+  self::foo((core::Object x) → Null {
+    return null;
+  });
+  self::foo((core::Object x) → Never {
+    throw "not implemented";
+  });
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.weak.outline.expect
new file mode 100644
index 0000000..5267665
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.weak.outline.expect
@@ -0,0 +1,11 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h;
+static method foo((core::Object) → core::int? f) → void
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.weak.transformed.expect
new file mode 100644
index 0000000..cbf28f2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart.weak.transformed.expect
@@ -0,0 +1,29 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart:18:7: Error: A value of type 'String' can't be returned from a function with return type 'Null'.
+//       'hello';
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h = null;
+static method foo((core::Object) → core::int? f) → void {}
+static method test() → dynamic {
+  (core::Object) → Null f = (core::Object x) → Null {
+    return null;
+  };
+  core::String? y = f(42){(core::Object) → Null};
+  f = (core::Object x) → Null => invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync2.dart:18:7: Error: A value of type 'String' can't be returned from a function with return type 'Null'.
+      'hello';
+      ^" in "hello" as{TypeError,ForNonNullableByDefault} Null;
+  self::foo((core::Object x) → Null {
+    return null;
+  });
+  self::foo((core::Object x) → Never {
+    throw "not implemented";
+  });
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart
index 8ad09eb..1058330 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=() ->* Iterable<Null>* */ f = /*@ returnType=Iterable<Null>* */ () sync* {
+  var /*@type=() -> Iterable<Null>*/ f = /*@returnType=Iterable<Null>*/ () sync* {
     yield null;
   };
   Iterable y = f();
-  Iterable<String> z = f();
-  String s = f(). /*@target=Iterable.first*/ first;
+  Iterable<String?> z = f();
+  String? s = f(). /*@target=Iterable.first*/ first;
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.expect
index 579df9a..b2b3a02 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  () →* core::Iterable<Null>* f = () → core::Iterable<Null>* sync* {
+  () → core::Iterable<Null> f = () → core::Iterable<Null> sync* {
     yield null;
   };
-  core::Iterable<dynamic>* y = f(){() →* core::Iterable<Null>*};
-  core::Iterable<core::String*>* z = f(){() →* core::Iterable<Null>*};
-  core::String* s = f(){() →* core::Iterable<Null>*}.{core::Iterable::first}{Null};
+  core::Iterable<dynamic> y = f(){() → core::Iterable<Null>};
+  core::Iterable<core::String?> z = f(){() → core::Iterable<Null>};
+  core::String? s = f(){() → core::Iterable<Null>}.{core::Iterable::first}{Null};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.modular.expect
index 579df9a..b2b3a02 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  () →* core::Iterable<Null>* f = () → core::Iterable<Null>* sync* {
+  () → core::Iterable<Null> f = () → core::Iterable<Null> sync* {
     yield null;
   };
-  core::Iterable<dynamic>* y = f(){() →* core::Iterable<Null>*};
-  core::Iterable<core::String*>* z = f(){() →* core::Iterable<Null>*};
-  core::String* s = f(){() →* core::Iterable<Null>*}.{core::Iterable::first}{Null};
+  core::Iterable<dynamic> y = f(){() → core::Iterable<Null>};
+  core::Iterable<core::String?> z = f(){() → core::Iterable<Null>};
+  core::String? s = f(){() → core::Iterable<Null>}.{core::Iterable::first}{Null};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.transformed.expect
index 579df9a..b2b3a02 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  () →* core::Iterable<Null>* f = () → core::Iterable<Null>* sync* {
+  () → core::Iterable<Null> f = () → core::Iterable<Null> sync* {
     yield null;
   };
-  core::Iterable<dynamic>* y = f(){() →* core::Iterable<Null>*};
-  core::Iterable<core::String*>* z = f(){() →* core::Iterable<Null>*};
-  core::String* s = f(){() →* core::Iterable<Null>*}.{core::Iterable::first}{Null};
+  core::Iterable<dynamic> y = f(){() → core::Iterable<Null>};
+  core::Iterable<core::String?> z = f(){() → core::Iterable<Null>};
+  core::String? s = f(){() → core::Iterable<Null>}.{core::Iterable::first}{Null};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart
index d4ca6f2..f785c09 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart
@@ -1,17 +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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:math' show Random;
 
-test2() {
-  List<num> o;
-  var /*@ type=Iterable<num*>* */ y =
-      o. /*@ typeArgs=num* */ /*@target=Iterable.map*/ map(
-          /*@ returnType=num* */ (/*@ type=num* */ x) {
+test2(List<num> o) {
+  var /*@type=Iterable<num*>**/ y =
+      o. /*@typeArgs=num**/ /*@target=Iterable.map*/ map(
+          /*@returnType=num**/ (/*@type=num**/ x) {
     if (new Random(). /*@target=dart.math::Random.nextBool*/ nextBool()) {
       return x. /*@target=num.toInt*/ toInt() /*@target=num.+*/ + 1;
     } else {
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.textual_outline.expect
index 0644126..1da2bc4 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.textual_outline.expect
@@ -3,5 +3,5 @@
 
 import 'dart:math' show Random;
 
-test2() {}
+test2(List<num> o) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.textual_outline_modelled.expect
index a858794..49bea47 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.textual_outline_modelled.expect
@@ -4,4 +4,4 @@
 import 'dart:math' show Random;
 
 main() {}
-test2() {}
+test2(List<num> o) {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.expect
index 314b863..e285b3a 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.expect
@@ -5,8 +5,7 @@
 
 import "dart:math" show Random;
 
-static method test2() → dynamic {
-  core::List<core::num*>* o;
+static method test2(core::List<core::num*>* o) → dynamic {
   core::Iterable<core::num*>* y = o.{core::Iterable::map}<core::num*>((core::num* x) → core::num* {
     if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
       return x.{core::num::toInt}(){() →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.modular.expect
index 314b863..e285b3a 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.modular.expect
@@ -5,8 +5,7 @@
 
 import "dart:math" show Random;
 
-static method test2() → dynamic {
-  core::List<core::num*>* o;
+static method test2(core::List<core::num*>* o) → dynamic {
   core::Iterable<core::num*>* y = o.{core::Iterable::map}<core::num*>((core::num* x) → core::num* {
     if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
       return x.{core::num::toInt}(){() →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.outline.expect
index e333c02..28c0728 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.outline.expect
@@ -1,9 +1,10 @@
 library test;
 import self as self;
+import "dart:core" as core;
 
 import "dart:math" show Random;
 
-static method test2() → dynamic
+static method test2(core::List<core::num*>* o) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.transformed.expect
index 314b863..e285b3a 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.transformed.expect
@@ -5,8 +5,7 @@
 
 import "dart:math" show Random;
 
-static method test2() → dynamic {
-  core::List<core::num*>* o;
+static method test2(core::List<core::num*>* o) → dynamic {
   core::Iterable<core::num*>* y = o.{core::Iterable::map}<core::num*>((core::num* x) → core::num* {
     if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
       return x.{core::num::toInt}(){() →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart
new file mode 100644
index 0000000..e690d12
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart
@@ -0,0 +1,23 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:math' show Random;
+
+test2(List<num> o) {
+  var /*@type=Iterable<num>*/ y = o
+      . /*@typeArgs=num*/ /*@target=Iterable.map*/ map(
+          /*@returnType=num*/ (/*@type=num*/ x) {
+    if (new Random(). /*@target=dart.math::Random.nextBool*/ nextBool()) {
+      return x. /*@target=num.toInt*/ toInt() /*@target=num.+*/ + 1;
+    } else {
+      return x. /*@target=num.toDouble*/ toDouble();
+    }
+  });
+  Iterable<num> w = y;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.textual_outline.expect
new file mode 100644
index 0000000..6b5dca0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+library test;
+
+import 'dart:math' show Random;
+
+test2(List<num> o) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..788b4d9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+library test;
+
+import 'dart:math' show Random;
+
+main() {}
+test2(List<num> o) {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.weak.expect
new file mode 100644
index 0000000..302ce1408
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.weak.expect
@@ -0,0 +1,19 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:math" show Random;
+
+static method test2(core::List<core::num> o) → dynamic {
+  core::Iterable<core::num> y = o.{core::Iterable::map}<core::num>((core::num x) → core::num {
+    if(math::Random::•().{math::Random::nextBool}(){() → core::bool}) {
+      return x.{core::num::toInt}(){() → core::int}.{core::num::+}(1){(core::num) → core::int};
+    }
+    else {
+      return x.{core::num::toDouble}(){() → core::double};
+    }
+  }){((core::num) → core::num) → core::Iterable<core::num>};
+  core::Iterable<core::num> w = y;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.weak.modular.expect
new file mode 100644
index 0000000..302ce1408
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:math" show Random;
+
+static method test2(core::List<core::num> o) → dynamic {
+  core::Iterable<core::num> y = o.{core::Iterable::map}<core::num>((core::num x) → core::num {
+    if(math::Random::•().{math::Random::nextBool}(){() → core::bool}) {
+      return x.{core::num::toInt}(){() → core::int}.{core::num::+}(1){(core::num) → core::int};
+    }
+    else {
+      return x.{core::num::toDouble}(){() → core::double};
+    }
+  }){((core::num) → core::num) → core::Iterable<core::num>};
+  core::Iterable<core::num> w = y;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.weak.outline.expect
new file mode 100644
index 0000000..193e210
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.weak.outline.expect
@@ -0,0 +1,10 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:math" show Random;
+
+static method test2(core::List<core::num> o) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.weak.transformed.expect
new file mode 100644
index 0000000..302ce1408
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub2.dart.weak.transformed.expect
@@ -0,0 +1,19 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:math" show Random;
+
+static method test2(core::List<core::num> o) → dynamic {
+  core::Iterable<core::num> y = o.{core::Iterable::map}<core::num>((core::num x) → core::num {
+    if(math::Random::•().{math::Random::nextBool}(){() → core::bool}) {
+      return x.{core::num::toInt}(){() → core::int}.{core::num::+}(1){(core::num) → core::int};
+    }
+    else {
+      return x.{core::num::toDouble}(){() → core::double};
+    }
+  }){((core::num) → core::num) → core::Iterable<core::num>};
+  core::Iterable<core::num> w = y;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart
index 89ff032..fd73289 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=() ->* (int*) ->* double* */ f = /*@ returnType=(int*) ->* double* */ () {
-    return /*@ returnType=double* */ (int x) {
+  var /*@type=() -> (int) -> double*/ f = /*@returnType=(int) -> double*/ () {
+    return /*@returnType=double*/ (int x) {
       return 2.0 /*@target=double.**/ * x;
     };
   };
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.expect
index e9db0d8..157d6c2 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  () →* (core::int*) →* core::double* f = () → (core::int*) →* core::double* {
-    return (core::int* x) → core::double* {
-      return 2.0.{core::double::*}(x){(core::num*) →* core::double*};
+  () → (core::int) → core::double f = () → (core::int) → core::double {
+    return (core::int x) → core::double {
+      return 2.0.{core::double::*}(x){(core::num) → core::double};
     };
   };
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.modular.expect
index e9db0d8..157d6c2 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  () →* (core::int*) →* core::double* f = () → (core::int*) →* core::double* {
-    return (core::int* x) → core::double* {
-      return 2.0.{core::double::*}(x){(core::num*) →* core::double*};
+  () → (core::int) → core::double f = () → (core::int) → core::double {
+    return (core::int x) → core::double {
+      return 2.0.{core::double::*}(x){(core::num) → core::double};
     };
   };
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.transformed.expect
index e9db0d8..157d6c2 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  () →* (core::int*) →* core::double* f = () → (core::int*) →* core::double* {
-    return (core::int* x) → core::double* {
-      return 2.0.{core::double::*}(x){(core::num*) →* core::double*};
+  () → (core::int) → core::double f = () → (core::int) → core::double {
+    return (core::int x) → core::double {
+      return 2.0.{core::double::*}(x){(core::num) → core::double};
     };
   };
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart
index a0ab88f..734d294 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart
@@ -1,16 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-test1() {
-  List<int> o;
-  var /*@ type=Iterable<Null>* */ y =
+test1(List<int> o) {
+  var /*@type=Iterable<Null>*/ y =
       o. /*@ typeArgs=Null */ /*@target=Iterable.map*/ map(
-          /*@ returnType=Null */ (/*@ type=int* */ x) {});
-  Iterable<int> z = y;
+          /*@ returnType=Null */ (/*@type=int*/ x) {});
+  Iterable<int?> z = y;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.textual_outline.expect
index f75f219..66cea18 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
-test1() {}
+test1(List<int> o) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.textual_outline_modelled.expect
index b1f0123..72361bb 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
 main() {}
-test1() {}
+test1(List<int> o) {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.expect
index f309388..a6e5bdb 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.expect
@@ -1,10 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test1() → dynamic {
-  core::List<core::int*>* o;
-  core::Iterable<Null>* y = o.{core::Iterable::map}<Null>((core::int* x) → Null {}){((core::int*) →* Null) →* core::Iterable<Null>*};
-  core::Iterable<core::int*>* z = y;
+static method test1(core::List<core::int> o) → dynamic {
+  core::Iterable<Null> y = o.{core::Iterable::map}<Null>((core::int x) → Null {}){((core::int) → Null) → core::Iterable<Null>};
+  core::Iterable<core::int?> z = y;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.modular.expect
index f309388..a6e5bdb 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.modular.expect
@@ -1,10 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test1() → dynamic {
-  core::List<core::int*>* o;
-  core::Iterable<Null>* y = o.{core::Iterable::map}<Null>((core::int* x) → Null {}){((core::int*) →* Null) →* core::Iterable<Null>*};
-  core::Iterable<core::int*>* z = y;
+static method test1(core::List<core::int> o) → dynamic {
+  core::Iterable<Null> y = o.{core::Iterable::map}<Null>((core::int x) → Null {}){((core::int) → Null) → core::Iterable<Null>};
+  core::Iterable<core::int?> z = y;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.outline.expect
index 3619892..6504e2e 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.outline.expect
@@ -1,7 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method test1() → dynamic
+static method test1(core::List<core::int> o) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.transformed.expect
index f309388..a6e5bdb 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.transformed.expect
@@ -1,10 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test1() → dynamic {
-  core::List<core::int*>* o;
-  core::Iterable<Null>* y = o.{core::Iterable::map}<Null>((core::int* x) → Null {}){((core::int*) →* Null) →* core::Iterable<Null>*};
-  core::Iterable<core::int*>* z = y;
+static method test1(core::List<core::int> o) → dynamic {
+  core::Iterable<Null> y = o.{core::Iterable::map}<Null>((core::int x) → Null {}){((core::int) → Null) → core::Iterable<Null>};
+  core::Iterable<core::int?> z = y;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart
index 38b0aca..03faedc 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart
@@ -1,78 +1,80 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=() ->* Null */ a = /*@ returnType=Null */ () {};
-  var /*@ type=() ->* Null */ b = /*@ returnType=Null */ () {
+  var /*@type=() ->* Null*/ a = /*@ returnType=Null */ () {};
+  var /*@type=() ->* Null*/ b = /*@ returnType=Null */ () {
     return;
   };
-  var /*@ type=() ->* Null */ c = /*@ returnType=Null */ () {
+  var /*@type=() ->* Null*/ c = /*@ returnType=Null */ () {
     return null;
   };
-  var /*@ type=() ->* int* */ d = /*@ returnType=int* */ () {
+  var /*@type=() ->* int**/ d = /*@returnType=int**/ () {
     return 0;
   };
-  var /*@ type=(bool*) ->* Null */ e = /*@ returnType=Null */ (bool b) {
+  var /*@type=(bool*) ->* Null*/ e = /*@ returnType=Null */ (bool b) {
     if (b) {
       return;
     } else {
       return;
     }
   };
-  var /*@ type=(bool*) ->* Null */ f = /*@ returnType=Null */ (bool b) {
+  var /*@type=(bool*) ->* Null*/ f = /*@ returnType=Null */ (bool b) {
     if (b) {
       return;
     } else {
       return null;
     }
   };
-  var /*@ type=(bool*) ->* int* */ g = /*@ returnType=int* */ (bool b) {
+  var /*@type=(bool*) ->* int**/ g = /*@returnType=int**/ (bool b) {
     if (b) {
       return;
     } else {
       return 0;
     }
   };
-  var /*@ type=(bool*) ->* Null */ h = /*@ returnType=Null */ (bool b) {
+  var /*@type=(bool*) ->* Null*/ h = /*@ returnType=Null */ (bool b) {
     if (b) {
       return null;
     } else {
       return;
     }
   };
-  var /*@ type=(bool*) ->* Null */ i = /*@ returnType=Null */ (bool b) {
+  var /*@type=(bool*) ->* Null*/ i = /*@ returnType=Null */ (bool b) {
     if (b) {
       return null;
     } else {
       return null;
     }
   };
-  var /*@ type=(bool*) ->* int* */ j = /*@ returnType=int* */ (bool b) {
+  var /*@type=(bool*) ->* int**/ j = /*@returnType=int**/ (bool b) {
     if (b) {
       return null;
     } else {
       return 0;
     }
   };
-  var /*@ type=(bool*) ->* int* */ k = /*@ returnType=int* */ (bool b) {
+  var /*@type=(bool*) ->* int**/ k = /*@returnType=int**/ (bool b) {
     if (b) {
       return 0;
     } else {
       return;
     }
   };
-  var /*@ type=(bool*) ->* int* */ l = /*@ returnType=int* */ (bool b) {
+  var /*@type=(bool*) ->* int**/ l = /*@returnType=int**/ (bool b) {
     if (b) {
       return 0;
     } else {
       return null;
     }
   };
-  var /*@ type=(bool*) ->* int* */ m = /*@ returnType=int* */ (bool b) {
+  var /*@type=(bool*) ->* int**/ m = /*@returnType=int**/ (bool b) {
     if (b) {
       return 0;
     } else {
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.expect
index 39b321c..9659231 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:35:7: Warning: Must explicitly return a value from a non-void function.
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:37:7: Warning: Must explicitly return a value from a non-void function.
 //       return;
 //       ^
 //
-// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:65:7: Warning: Must explicitly return a value from a non-void function.
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:67:7: Warning: Must explicitly return a value from a non-void function.
 //       return;
 //       ^
 //
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.modular.expect
index 39b321c..9659231 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.modular.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:35:7: Warning: Must explicitly return a value from a non-void function.
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:37:7: Warning: Must explicitly return a value from a non-void function.
 //       return;
 //       ^
 //
-// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:65:7: Warning: Must explicitly return a value from a non-void function.
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:67:7: Warning: Must explicitly return a value from a non-void function.
 //       return;
 //       ^
 //
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.transformed.expect
index 39b321c..9659231 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:35:7: Warning: Must explicitly return a value from a non-void function.
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:37:7: Warning: Must explicitly return a value from a non-void function.
 //       return;
 //       ^
 //
-// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:65:7: Warning: Must explicitly return a value from a non-void function.
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:67:7: Warning: Must explicitly return a value from a non-void function.
 //       return;
 //       ^
 //
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart
new file mode 100644
index 0000000..5f2dc4b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.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.
+
+/*@testedFeatures=inference*/
+library test;
+
+main() {
+  var /*@type=() -> Null*/ a = /*@ returnType=Null */ () {};
+  var /*@type=() -> Null*/ b = /*@ returnType=Null */ () {
+    return;
+  };
+  var /*@type=() -> Null*/ c = /*@ returnType=Null */ () {
+    return null;
+  };
+  var /*@type=() -> int*/ d = /*@returnType=int*/ () {
+    return 0;
+  };
+  var /*@type=(bool) -> Null*/ e = /*@ returnType=Null */ (bool b) {
+    if (b) {
+      return;
+    } else {
+      return;
+    }
+  };
+  var /*@type=(bool) -> Null*/ f = /*@ returnType=Null */ (bool b) {
+    if (b) {
+      return;
+    } else {
+      return null;
+    }
+  };
+  var /*@type=(bool) -> int?*/ g = /*@returnType=int?*/ (bool b) {
+    if (b) {
+      return;
+    } else {
+      return 0;
+    }
+  };
+  var /*@type=(bool) -> Null*/ h = /*@ returnType=Null */ (bool b) {
+    if (b) {
+      return null;
+    } else {
+      return;
+    }
+  };
+  var /*@type=(bool) -> Null*/ i = /*@ returnType=Null */ (bool b) {
+    if (b) {
+      return null;
+    } else {
+      return null;
+    }
+  };
+  var /*@type=(bool) -> int?*/ j = /*@returnType=int?*/ (bool b) {
+    if (b) {
+      return null;
+    } else {
+      return 0;
+    }
+  };
+  var /*@type=(bool) -> int?*/ k = /*@returnType=int?*/ (bool b) {
+    if (b) {
+      return 0;
+    } else {
+      return;
+    }
+  };
+  var /*@type=(bool) -> int?*/ l = /*@returnType=int?*/ (bool b) {
+    if (b) {
+      return 0;
+    } else {
+      return null;
+    }
+  };
+  var /*@type=(bool) -> int*/ m = /*@returnType=int*/ (bool b) {
+    if (b) {
+      return 0;
+    } else {
+      return 0;
+    }
+  };
+}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.textual_outline.expect
new file mode 100644
index 0000000..d0b557f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+library test;
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d0b557f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+library test;
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.weak.expect
new file mode 100644
index 0000000..d0d5e5c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.weak.expect
@@ -0,0 +1,103 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart:35:7: Error: A value must be explicitly returned from a non-void function.
+//       return;
+//       ^
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart:65:7: Error: A value must be explicitly returned from a non-void function.
+//       return;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  () → Null a = () → Null {};
+  () → Null b = () → Null {
+    return;
+  };
+  () → Null c = () → Null {
+    return null;
+  };
+  () → core::int d = () → core::int {
+    return 0;
+  };
+  (core::bool) → Null e = (core::bool b) → Null {
+    if(b) {
+      return;
+    }
+    else {
+      return;
+    }
+  };
+  (core::bool) → Null f = (core::bool b) → Null {
+    if(b) {
+      return;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool) → core::int? g = (core::bool b) → core::int? {
+    if(b) {
+      return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart:35:7: Error: A value must be explicitly returned from a non-void function.
+      return;
+      ^" in null;
+    }
+    else {
+      return 0;
+    }
+  };
+  (core::bool) → Null h = (core::bool b) → Null {
+    if(b) {
+      return null;
+    }
+    else {
+      return;
+    }
+  };
+  (core::bool) → Null i = (core::bool b) → Null {
+    if(b) {
+      return null;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool) → core::int? j = (core::bool b) → core::int? {
+    if(b) {
+      return null;
+    }
+    else {
+      return 0;
+    }
+  };
+  (core::bool) → core::int? k = (core::bool b) → core::int? {
+    if(b) {
+      return 0;
+    }
+    else {
+      return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart:65:7: Error: A value must be explicitly returned from a non-void function.
+      return;
+      ^" in null;
+    }
+  };
+  (core::bool) → core::int? l = (core::bool b) → core::int? {
+    if(b) {
+      return 0;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool) → core::int m = (core::bool b) → core::int {
+    if(b) {
+      return 0;
+    }
+    else {
+      return 0;
+    }
+  };
+}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.weak.modular.expect
new file mode 100644
index 0000000..d0d5e5c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.weak.modular.expect
@@ -0,0 +1,103 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart:35:7: Error: A value must be explicitly returned from a non-void function.
+//       return;
+//       ^
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart:65:7: Error: A value must be explicitly returned from a non-void function.
+//       return;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  () → Null a = () → Null {};
+  () → Null b = () → Null {
+    return;
+  };
+  () → Null c = () → Null {
+    return null;
+  };
+  () → core::int d = () → core::int {
+    return 0;
+  };
+  (core::bool) → Null e = (core::bool b) → Null {
+    if(b) {
+      return;
+    }
+    else {
+      return;
+    }
+  };
+  (core::bool) → Null f = (core::bool b) → Null {
+    if(b) {
+      return;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool) → core::int? g = (core::bool b) → core::int? {
+    if(b) {
+      return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart:35:7: Error: A value must be explicitly returned from a non-void function.
+      return;
+      ^" in null;
+    }
+    else {
+      return 0;
+    }
+  };
+  (core::bool) → Null h = (core::bool b) → Null {
+    if(b) {
+      return null;
+    }
+    else {
+      return;
+    }
+  };
+  (core::bool) → Null i = (core::bool b) → Null {
+    if(b) {
+      return null;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool) → core::int? j = (core::bool b) → core::int? {
+    if(b) {
+      return null;
+    }
+    else {
+      return 0;
+    }
+  };
+  (core::bool) → core::int? k = (core::bool b) → core::int? {
+    if(b) {
+      return 0;
+    }
+    else {
+      return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart:65:7: Error: A value must be explicitly returned from a non-void function.
+      return;
+      ^" in null;
+    }
+  };
+  (core::bool) → core::int? l = (core::bool b) → core::int? {
+    if(b) {
+      return 0;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool) → core::int m = (core::bool b) → core::int {
+    if(b) {
+      return 0;
+    }
+    else {
+      return 0;
+    }
+  };
+}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.weak.outline.expect
new file mode 100644
index 0000000..406c4c9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.weak.outline.expect
@@ -0,0 +1,5 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.weak.transformed.expect
new file mode 100644
index 0000000..d0d5e5c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart.weak.transformed.expect
@@ -0,0 +1,103 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart:35:7: Error: A value must be explicitly returned from a non-void function.
+//       return;
+//       ^
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart:65:7: Error: A value must be explicitly returned from a non-void function.
+//       return;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  () → Null a = () → Null {};
+  () → Null b = () → Null {
+    return;
+  };
+  () → Null c = () → Null {
+    return null;
+  };
+  () → core::int d = () → core::int {
+    return 0;
+  };
+  (core::bool) → Null e = (core::bool b) → Null {
+    if(b) {
+      return;
+    }
+    else {
+      return;
+    }
+  };
+  (core::bool) → Null f = (core::bool b) → Null {
+    if(b) {
+      return;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool) → core::int? g = (core::bool b) → core::int? {
+    if(b) {
+      return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart:35:7: Error: A value must be explicitly returned from a non-void function.
+      return;
+      ^" in null;
+    }
+    else {
+      return 0;
+    }
+  };
+  (core::bool) → Null h = (core::bool b) → Null {
+    if(b) {
+      return null;
+    }
+    else {
+      return;
+    }
+  };
+  (core::bool) → Null i = (core::bool b) → Null {
+    if(b) {
+      return null;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool) → core::int? j = (core::bool b) → core::int? {
+    if(b) {
+      return null;
+    }
+    else {
+      return 0;
+    }
+  };
+  (core::bool) → core::int? k = (core::bool b) → core::int? {
+    if(b) {
+      return 0;
+    }
+    else {
+      return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_returns2.dart:65:7: Error: A value must be explicitly returned from a non-void function.
+      return;
+      ^" in null;
+    }
+  };
+  (core::bool) → core::int? l = (core::bool b) → core::int? {
+    if(b) {
+      return 0;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool) → core::int m = (core::bool b) → core::int {
+    if(b) {
+      return 0;
+    }
+    else {
+      return 0;
+    }
+  };
+}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart
index c13b308..6260fe3 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart
@@ -1,14 +1,16 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 test() {
-  var /*@ type=() ->* Iterable<num*>* */ f = /*@ returnType=Iterable<num*>* */ () sync* {
+  var /*@type=() ->* Iterable<num*>**/ f = /*@returnType=Iterable<num*>**/ () sync* {
     yield 1;
-    yield* /*@ typeArgs=num* */ [3, 4.0];
+    yield* /*@typeArgs=num**/ [3, 4.0];
   };
   Iterable<num> g = f();
   Iterable<int> h = /*info:ASSIGNMENT_CAST*/ f();
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart
new file mode 100644
index 0000000..e095de2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart
@@ -0,0 +1,16 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+test() {
+  var /*@type=() -> Iterable<num>*/ f = /*@returnType=Iterable<num>*/ () sync* {
+    yield 1;
+    yield* /*@typeArgs=num*/ [3, 4.0];
+  };
+  Iterable<num> g = f();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.textual_outline.expect
new file mode 100644
index 0000000..c70c84a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+library test;
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..10819ea
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+library test;
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.weak.expect
new file mode 100644
index 0000000..e71114a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.weak.expect
@@ -0,0 +1,12 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  () → core::Iterable<core::num> f = () → core::Iterable<core::num> sync* {
+    yield 1;
+    yield*<core::num>[3, 4.0];
+  };
+  core::Iterable<core::num> g = f(){() → core::Iterable<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.weak.modular.expect
new file mode 100644
index 0000000..e71114a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  () → core::Iterable<core::num> f = () → core::Iterable<core::num> sync* {
+    yield 1;
+    yield*<core::num>[3, 4.0];
+  };
+  core::Iterable<core::num> g = f(){() → core::Iterable<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.weak.outline.expect
new file mode 100644
index 0000000..100b8e9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.weak.transformed.expect
new file mode 100644
index 0000000..ca9af17
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star2.dart.weak.transformed.expect
@@ -0,0 +1,12 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  () → core::Iterable<core::num> f = () → core::Iterable<core::num> sync* {
+    yield 1;
+    yield* core::_GrowableList::_literal2<core::num>(3, 4.0);
+  };
+  core::Iterable<core::num> g = f(){() → core::Iterable<core::num>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart
index 169776d..3855e99 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart
@@ -1,14 +1,16 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 f() {
   List<int> o;
   o. /*@target=Iterable.forEach*/ forEach(
-      /*@ returnType=int* */ (/*@ type=int* */ i) {
+      /*@returnType=int**/ (/*@type=int**/ i) {
     return i /*@target=num.+*/ + 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart
new file mode 100644
index 0000000..92d00e0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart
@@ -0,0 +1,15 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+f(List<int> o) {
+  o. /*@target=Iterable.forEach*/ forEach(
+      /*@returnType=void*/ (/*@type=int*/ i) {
+    return i /*@target=num.+*/ + 1;
+  });
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.textual_outline.expect
new file mode 100644
index 0000000..3276f20
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+library test;
+
+f(List<int> o) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3276f20
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+library test;
+
+f(List<int> o) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.weak.expect
new file mode 100644
index 0000000..650d2a9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.weak.expect
@@ -0,0 +1,19 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart:11:32: Error: Can't return a value from a void function.
+//     return i /*@target=num.+*/ + 1;
+//                                ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f(core::List<core::int> o) → dynamic {
+  o.{core::Iterable::forEach}((core::int i) → void {
+    return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart:11:32: Error: Can't return a value from a void function.
+    return i /*@target=num.+*/ + 1;
+                               ^" in i.{core::num::+}(1){(core::num) → core::int};
+  }){((core::int) → void) → void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.weak.modular.expect
new file mode 100644
index 0000000..650d2a9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart:11:32: Error: Can't return a value from a void function.
+//     return i /*@target=num.+*/ + 1;
+//                                ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f(core::List<core::int> o) → dynamic {
+  o.{core::Iterable::forEach}((core::int i) → void {
+    return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart:11:32: Error: Can't return a value from a void function.
+    return i /*@target=num.+*/ + 1;
+                               ^" in i.{core::num::+}(1){(core::num) → core::int};
+  }){((core::int) → void) → void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.weak.outline.expect
new file mode 100644
index 0000000..a5a8e2e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method f(core::List<core::int> o) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.weak.transformed.expect
new file mode 100644
index 0000000..650d2a9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart.weak.transformed.expect
@@ -0,0 +1,19 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart:11:32: Error: Can't return a value from a void function.
+//     return i /*@target=num.+*/ + 1;
+//                                ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f(core::List<core::int> o) → dynamic {
+  o.{core::Iterable::forEach}((core::int i) → void {
+    return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_void_context2.dart:11:32: Error: Can't return a value from a void function.
+    return i /*@target=num.+*/ + 1;
+                               ^" in i.{core::num::+}(1){(core::num) → core::int};
+  }){((core::int) → void) → void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bottom.dart b/pkg/front_end/testcases/inference/bottom.dart
index cc5c8fe..99a196f 100644
--- a/pkg/front_end/testcases/inference/bottom.dart
+++ b/pkg/front_end/testcases/inference/bottom.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/bottom.dart.textual_outline.expect b/pkg/front_end/testcases/inference/bottom.dart.textual_outline.expect
index 881b557..3a3a838 100644
--- a/pkg/front_end/testcases/inference/bottom.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/bottom.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var v = null;
diff --git a/pkg/front_end/testcases/inference/bottom.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/bottom.dart.textual_outline_modelled.expect
index 955a778..513df85 100644
--- a/pkg/front_end/testcases/inference/bottom.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/bottom.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/bottom.dart.weak.expect b/pkg/front_end/testcases/inference/bottom.dart.weak.expect
index d841a5d..557c38b 100644
--- a/pkg/front_end/testcases/inference/bottom.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bottom.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static field dynamic v = null;
diff --git a/pkg/front_end/testcases/inference/bottom.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bottom.dart.weak.modular.expect
index d841a5d..557c38b 100644
--- a/pkg/front_end/testcases/inference/bottom.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/bottom.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static field dynamic v = null;
diff --git a/pkg/front_end/testcases/inference/bottom.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bottom.dart.weak.outline.expect
index 0387d83..fb06b93 100644
--- a/pkg/front_end/testcases/inference/bottom.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/bottom.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static field dynamic v;
diff --git a/pkg/front_end/testcases/inference/bottom.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bottom.dart.weak.transformed.expect
index d841a5d..557c38b 100644
--- a/pkg/front_end/testcases/inference/bottom.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bottom.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static field dynamic v = null;
diff --git a/pkg/front_end/testcases/inference/bottom_in_closure.dart b/pkg/front_end/testcases/inference/bottom_in_closure.dart
index f777cf1..9084f25 100644
--- a/pkg/front_end/testcases/inference/bottom_in_closure.dart
+++ b/pkg/front_end/testcases/inference/bottom_in_closure.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/bottom_in_closure.dart.textual_outline.expect b/pkg/front_end/testcases/inference/bottom_in_closure.dart.textual_outline.expect
index d37e763..5c8173a 100644
--- a/pkg/front_end/testcases/inference/bottom_in_closure.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/bottom_in_closure.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var v = () => null;
diff --git a/pkg/front_end/testcases/inference/bottom_in_closure.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/bottom_in_closure.dart.textual_outline_modelled.expect
index e9d7670..09b085b 100644
--- a/pkg/front_end/testcases/inference/bottom_in_closure.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/bottom_in_closure.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.expect b/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.expect
index 63cbd26..fd2ed01 100644
--- a/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
-static field () →* Null v = () → Null => null;
+static field () → Null v = () → Null => null;
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.modular.expect
index 63cbd26..fd2ed01 100644
--- a/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.modular.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
-static field () →* Null v = () → Null => null;
+static field () → Null v = () → Null => null;
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.outline.expect
index 9f65784..bbabef8 100644
--- a/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.outline.expect
@@ -1,6 +1,6 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
-static field () →* Null v;
+static field () → Null v;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.transformed.expect
index 63cbd26..fd2ed01 100644
--- a/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.transformed.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
-static field () →* Null v = () → Null => null;
+static field () → Null v = () → Null => null;
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/bug30251.dart b/pkg/front_end/testcases/inference/bug30251.dart
index bcd00d4..a1ae60a 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart
+++ b/pkg/front_end/testcases/inference/bug30251.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
 
 class C {
   final x;
-  C(int p) : x = /*@ typeArgs=int* */ f(1 /*@target=num.+*/ + p);
+  C(int p) : x = /*@typeArgs=int*/ f(1 /*@target=num.+*/ + p);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.textual_outline.expect b/pkg/front_end/testcases/inference/bug30251.dart.textual_outline.expect
index 40a0766..8c82e9b 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 T f<T>(T t) => t;
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/bug30251.dart.textual_outline_modelled.expect
index feeb7ca..a9f43dc 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 T f<T>(T t) => t;
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.weak.expect b/pkg/front_end/testcases/inference/bug30251.dart.weak.expect
index 0622d1c..9f396a3 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   final field dynamic x;
-  constructor •(core::int* p) → self::C*
-    : self::C::x = self::f<core::int*>(1.{core::num::+}(p){(core::num*) →* core::int*}), super core::Object::•()
+  constructor •(core::int p) → self::C
+    : self::C::x = self::f<core::int>(1.{core::num::+}(p){(core::num) → core::int}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>(self::f::T* t) → self::f::T*
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug30251.dart.weak.modular.expect
index 0622d1c..9f396a3 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   final field dynamic x;
-  constructor •(core::int* p) → self::C*
-    : self::C::x = self::f<core::int*>(1.{core::num::+}(p){(core::num*) →* core::int*}), super core::Object::•()
+  constructor •(core::int p) → self::C
+    : self::C::x = self::f<core::int>(1.{core::num::+}(p){(core::num) → core::int}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>(self::f::T* t) → self::f::T*
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bug30251.dart.weak.outline.expect
index 73500a0..95702b4 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   final field dynamic x;
-  constructor •(core::int* p) → self::C*
+  constructor •(core::int p) → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>(self::f::T* t) → self::f::T*
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30251.dart.weak.transformed.expect
index 0622d1c..9f396a3 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   final field dynamic x;
-  constructor •(core::int* p) → self::C*
-    : self::C::x = self::f<core::int*>(1.{core::num::+}(p){(core::num*) →* core::int*}), super core::Object::•()
+  constructor •(core::int p) → self::C
+    : self::C::x = self::f<core::int>(1.{core::num::+}(p){(core::num) → core::int}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>(self::f::T* t) → self::f::T*
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30620.dart b/pkg/front_end/testcases/inference/bug30620.dart
index 41598a3..2d525b0 100644
--- a/pkg/front_end/testcases/inference/bug30620.dart
+++ b/pkg/front_end/testcases/inference/bug30620.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,7 +13,7 @@
   A(this.foo);
 
   bool operator ==(Object other) =>
-      other is A && /*@ promotedType=A* */ other
+      other is A && /*@promotedType=A**/ other
               . /*@target=A.foo*/ foo /*@target=String.==*/ ==
           this. /*@target=A.foo*/ foo;
 }
diff --git a/pkg/front_end/testcases/inference/bug30620_2.dart b/pkg/front_end/testcases/inference/bug30620_2.dart
new file mode 100644
index 0000000..433e8b4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_2.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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {
+  final String foo;
+
+  A(this.foo);
+
+  bool operator ==(Object other) =>
+      other is A && /*@promotedType=A*/ other
+              . /*@target=A.foo*/ foo /*@target=String.==*/ ==
+          this. /*@target=A.foo*/ foo;
+}
+
+main() {
+  print(new A("hello") /*@target=A.==*/ == new A("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/bug30620_2.dart.textual_outline.expect
new file mode 100644
index 0000000..fec1eb3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_2.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+library test;
+
+class A {
+  final String foo;
+  A(this.foo);
+  bool operator ==(Object other) => other is A && other.foo == this.foo;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug30620_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/bug30620_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0fcdf5f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+library test;
+
+class A {
+  A(this.foo);
+  bool operator ==(Object other) => other is A && other.foo == this.foo;
+  final String foo;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug30620_2.dart.weak.expect b/pkg/front_end/testcases/inference/bug30620_2.dart.weak.expect
new file mode 100644
index 0000000..9c46aca
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_2.dart.weak.expect
@@ -0,0 +1,15 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return other is{ForNonNullableByDefault} self::A && other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String};
+}
+static method main() → dynamic {
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object) → core::bool} new self::A::•("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug30620_2.dart.weak.modular.expect
new file mode 100644
index 0000000..9c46aca
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_2.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return other is{ForNonNullableByDefault} self::A && other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String};
+}
+static method main() → dynamic {
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object) → core::bool} new self::A::•("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bug30620_2.dart.weak.outline.expect
new file mode 100644
index 0000000..514cfb2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_2.dart.weak.outline.expect
@@ -0,0 +1,13 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    ;
+  operator ==(core::Object other) → core::bool
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/bug30620_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30620_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..9c46aca
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_2.dart.weak.transformed.expect
@@ -0,0 +1,15 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return other is{ForNonNullableByDefault} self::A && other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String};
+}
+static method main() → dynamic {
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object) → core::bool} new self::A::•("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_b.dart b/pkg/front_end/testcases/inference/bug30620_b.dart
index 9ba5f81..d4d4ce8c 100644
--- a/pkg/front_end/testcases/inference/bug30620_b.dart
+++ b/pkg/front_end/testcases/inference/bug30620_b.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,9 +13,9 @@
   A(this.foo);
 
   bool operator ==(Object other) =>
-      other is A && /*@ promotedType=A* */ other
+      other is A && /*@promotedType=A**/ other
               . /*@target=A.foo*/ foo /*@target=String.==*/ ==
-          this. /*@target=A.foo*/ foo && /*@ promotedType=A* */ other
+          this. /*@target=A.foo*/ foo && /*@promotedType=A**/ other
               . /*@target=A.foo*/ foo /*@target=String.==*/ ==
           this. /*@target=A.foo*/ foo;
 }
diff --git a/pkg/front_end/testcases/inference/bug30620_b2.dart b/pkg/front_end/testcases/inference/bug30620_b2.dart
new file mode 100644
index 0000000..3bc76e3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_b2.dart
@@ -0,0 +1,23 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {
+  final String foo;
+
+  A(this.foo);
+
+  bool operator ==(Object other) =>
+      other is A && /*@promotedType=A*/ other
+              . /*@target=A.foo*/ foo /*@target=String.==*/ ==
+          this. /*@target=A.foo*/ foo && /*@promotedType=A*/ other
+              . /*@target=A.foo*/ foo /*@target=String.==*/ ==
+          this. /*@target=A.foo*/ foo;
+}
+
+main() {
+  print(new A("hello") /*@target=A.==*/ == new A("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_b2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/bug30620_b2.dart.textual_outline.expect
new file mode 100644
index 0000000..503a2af
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_b2.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+library test;
+
+class A {
+  final String foo;
+  A(this.foo);
+  bool operator ==(Object other) =>
+      other is A && other.foo == this.foo && other.foo == this.foo;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug30620_b2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/bug30620_b2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..329f32b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_b2.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+library test;
+
+class A {
+  A(this.foo);
+  bool operator ==(Object other) =>
+      other is A && other.foo == this.foo && other.foo == this.foo;
+  final String foo;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug30620_b2.dart.weak.expect b/pkg/front_end/testcases/inference/bug30620_b2.dart.weak.expect
new file mode 100644
index 0000000..aab0dc4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_b2.dart.weak.expect
@@ -0,0 +1,15 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return other is{ForNonNullableByDefault} self::A && other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String} && other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String};
+}
+static method main() → dynamic {
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object) → core::bool} new self::A::•("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_b2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug30620_b2.dart.weak.modular.expect
new file mode 100644
index 0000000..aab0dc4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_b2.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return other is{ForNonNullableByDefault} self::A && other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String} && other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String};
+}
+static method main() → dynamic {
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object) → core::bool} new self::A::•("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_b2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bug30620_b2.dart.weak.outline.expect
new file mode 100644
index 0000000..514cfb2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_b2.dart.weak.outline.expect
@@ -0,0 +1,13 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    ;
+  operator ==(core::Object other) → core::bool
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/bug30620_b2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30620_b2.dart.weak.transformed.expect
new file mode 100644
index 0000000..aab0dc4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_b2.dart.weak.transformed.expect
@@ -0,0 +1,15 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return other is{ForNonNullableByDefault} self::A && other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String} && other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String};
+}
+static method main() → dynamic {
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object) → core::bool} new self::A::•("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_c.dart b/pkg/front_end/testcases/inference/bug30620_c.dart
index 9683e49..49fdde5 100644
--- a/pkg/front_end/testcases/inference/bug30620_c.dart
+++ b/pkg/front_end/testcases/inference/bug30620_c.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,10 +13,10 @@
   A(this.foo);
 
   bool operator ==(Object other) {
-    if (other is A && /*@ promotedType=A* */ other
+    if (other is A && /*@promotedType=A**/ other
             . /*@target=A.foo*/ foo /*@target=String.==*/ ==
         this. /*@target=A.foo*/ foo) {
-      if (/*@ promotedType=A* */ other
+      if (/*@promotedType=A**/ other
               . /*@target=A.foo*/ foo /*@target=String.==*/ ==
           this. /*@target=A.foo*/ foo) {}
     }
diff --git a/pkg/front_end/testcases/inference/bug30620_c2.dart b/pkg/front_end/testcases/inference/bug30620_c2.dart
new file mode 100644
index 0000000..1d8f93f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_c2.dart
@@ -0,0 +1,27 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {
+  final String foo;
+
+  A(this.foo);
+
+  bool operator ==(Object other) {
+    if (other is A && /*@promotedType=A*/ other
+            . /*@target=A.foo*/ foo /*@target=String.==*/ ==
+        this. /*@target=A.foo*/ foo) {
+      if (/*@promotedType=A*/ other
+              . /*@target=A.foo*/ foo /*@target=String.==*/ ==
+          this. /*@target=A.foo*/ foo) {}
+    }
+    return true;
+  }
+}
+
+main() {
+  print(new A("hello") /*@target=A.==*/ == new A("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_c2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/bug30620_c2.dart.textual_outline.expect
new file mode 100644
index 0000000..42c642b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_c2.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+library test;
+
+class A {
+  final String foo;
+  A(this.foo);
+  bool operator ==(Object other) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug30620_c2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/bug30620_c2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6ecf601
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_c2.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+library test;
+
+class A {
+  A(this.foo);
+  bool operator ==(Object other) {}
+  final String foo;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug30620_c2.dart.weak.expect b/pkg/front_end/testcases/inference/bug30620_c2.dart.weak.expect
new file mode 100644
index 0000000..3d98548
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_c2.dart.weak.expect
@@ -0,0 +1,20 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool {
+    if(other is{ForNonNullableByDefault} self::A && other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String}) {
+      if(other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String}) {
+      }
+    }
+    return true;
+  }
+}
+static method main() → dynamic {
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object) → core::bool} new self::A::•("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_c2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug30620_c2.dart.weak.modular.expect
new file mode 100644
index 0000000..3d98548
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_c2.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool {
+    if(other is{ForNonNullableByDefault} self::A && other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String}) {
+      if(other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String}) {
+      }
+    }
+    return true;
+  }
+}
+static method main() → dynamic {
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object) → core::bool} new self::A::•("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_c2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bug30620_c2.dart.weak.outline.expect
new file mode 100644
index 0000000..514cfb2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_c2.dart.weak.outline.expect
@@ -0,0 +1,13 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    ;
+  operator ==(core::Object other) → core::bool
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/bug30620_c2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30620_c2.dart.weak.transformed.expect
new file mode 100644
index 0000000..3d98548
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_c2.dart.weak.transformed.expect
@@ -0,0 +1,20 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool {
+    if(other is{ForNonNullableByDefault} self::A && other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String}) {
+      if(other{self::A}.{self::A::foo}{core::String} =={core::String::==}{(core::Object) → core::bool} this.{self::A::foo}{core::String}) {
+      }
+    }
+    return true;
+  }
+}
+static method main() → dynamic {
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object) → core::bool} new self::A::•("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_d.dart b/pkg/front_end/testcases/inference/bug30620_d.dart
index 59aadba..0b26d0b 100644
--- a/pkg/front_end/testcases/inference/bug30620_d.dart
+++ b/pkg/front_end/testcases/inference/bug30620_d.dart
@@ -1,12 +1,14 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 String foo(obj) => obj is String
-    ? /*@ promotedType=String* */ obj
+    ? /*@promotedType=String**/ obj
         . /*@target=String.toUpperCase*/ toUpperCase()
     : null;
 
diff --git a/pkg/front_end/testcases/inference/bug30620_d2.dart b/pkg/front_end/testcases/inference/bug30620_d2.dart
new file mode 100644
index 0000000..5120eed
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_d2.dart
@@ -0,0 +1,12 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+String? foo(obj) => obj is String
+    ? /*@promotedType=String*/ obj. /*@target=String.toUpperCase*/ toUpperCase()
+    : null;
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug30620_d2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/bug30620_d2.dart.textual_outline.expect
new file mode 100644
index 0000000..d09050e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_d2.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+library test;
+
+String? foo(obj) => obj is String ? obj.toUpperCase() : null;
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug30620_d2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/bug30620_d2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d09050e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_d2.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+library test;
+
+String? foo(obj) => obj is String ? obj.toUpperCase() : null;
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug30620_d2.dart.weak.expect b/pkg/front_end/testcases/inference/bug30620_d2.dart.weak.expect
new file mode 100644
index 0000000..4046084
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_d2.dart.weak.expect
@@ -0,0 +1,7 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo(dynamic obj) → core::String?
+  return obj is{ForNonNullableByDefault} core::String ?{core::String?} obj{core::String}.{core::String::toUpperCase}(){() → core::String} : null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30620_d2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug30620_d2.dart.weak.modular.expect
new file mode 100644
index 0000000..4046084
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_d2.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo(dynamic obj) → core::String?
+  return obj is{ForNonNullableByDefault} core::String ?{core::String?} obj{core::String}.{core::String::toUpperCase}(){() → core::String} : null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30620_d2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bug30620_d2.dart.weak.outline.expect
new file mode 100644
index 0000000..03cded2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_d2.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo(dynamic obj) → core::String?
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/bug30620_d2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30620_d2.dart.weak.transformed.expect
new file mode 100644
index 0000000..4046084
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_d2.dart.weak.transformed.expect
@@ -0,0 +1,7 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo(dynamic obj) → core::String?
+  return obj is{ForNonNullableByDefault} core::String ?{core::String?} obj{core::String}.{core::String::toUpperCase}(){() → core::String} : null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30624.dart b/pkg/front_end/testcases/inference/bug30624.dart
index 341d1e5..1de7c8d 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart
+++ b/pkg/front_end/testcases/inference/bug30624.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,17 +11,17 @@
 
 class C<E> {
   void barA([int cmp(E a, E b)]) {
-    /*@ typeArgs=C::E* */ foo(this, cmp  ?? _default);
+    /*@typeArgs=C::E**/ foo(this, cmp  ?? _default);
   }
 
   void barB([int cmp(E a, E b)]) {
-    /*@ typeArgs=C::E* */ foo(
+    /*@typeArgs=C::E**/ foo(
         this, cmp  ?? (_default as int Function(E, E)));
   }
 
   void barC([int cmp(E a, E b)]) {
     int Function(E, E) v = _default;
-    /*@ typeArgs=C::E* */ foo(this, cmp  ?? v);
+    /*@typeArgs=C::E**/ foo(this, cmp  ?? v);
   }
 
   void barD([int cmp(E a, E b)]) {
@@ -27,12 +29,12 @@
   }
 
   void barE([int cmp(E a, E b)]) {
-    /*@ typeArgs=C::E* */ foo(
+    /*@typeArgs=C::E**/ foo(
         this, cmp  == null ? _default : cmp);
   }
 
   void barF([int cmp(E a, E b)]) {
-    /*@ typeArgs=C::E* */ foo(
+    /*@typeArgs=C::E**/ foo(
         this, cmp  != null ? cmp : _default);
   }
 
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30624.dart.weak.transformed.expect
index 02a85fc..c5195fb 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.weak.transformed.expect
@@ -48,5 +48,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///bug30624.dart:40:35 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///bug30624.dart:42:35 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 47, effectively constant: 1
diff --git a/pkg/front_end/testcases/inference/bug30624_2.dart b/pkg/front_end/testcases/inference/bug30624_2.dart
new file mode 100644
index 0000000..e329652
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30624_2.dart
@@ -0,0 +1,43 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+void foo<E>(C<E> c, int cmp(E a, E b)) {}
+
+class C<E> {
+  void barA([int Function(E a, E b)? cmp]) {
+    /*@typeArgs=C::E%*/ foo(this, cmp ?? _default);
+  }
+
+  void barB([int Function(E a, E b)? cmp]) {
+    /*@typeArgs=C::E%*/ foo(this, cmp ?? (_default as int Function(E, E)));
+  }
+
+  void barC([int Function(E a, E b)? cmp]) {
+    int Function(E, E) v = _default;
+    /*@typeArgs=C::E%*/ foo(this, cmp ?? v);
+  }
+
+  void barD([int Function(E a, E b)? cmp]) {
+    foo<E>(this, cmp ?? _default);
+  }
+
+  void barE([int Function(E a, E b)? cmp]) {
+    /*@typeArgs=C::E%*/ foo(this,
+        cmp == null ? _default : /*@promotedType=(C::E%, C::E%) -> int*/ cmp);
+  }
+
+  void barF([int Function(E a, E b)? cmp]) {
+    /*@typeArgs=C::E%*/ foo(this,
+        cmp != null ? /*@promotedType=(C::E%, C::E%) -> int*/ cmp : _default);
+  }
+
+  static int _default(a, b) {
+    return /*@target=int.unary-*/ -1;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug30624_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/bug30624_2.dart.textual_outline.expect
new file mode 100644
index 0000000..0762095
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30624_2.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+library test;
+
+void foo<E>(C<E> c, int cmp(E a, E b)) {}
+
+class C<E> {
+  void barA([int Function(E a, E b)? cmp]) {}
+  void barB([int Function(E a, E b)? cmp]) {}
+  void barC([int Function(E a, E b)? cmp]) {}
+  void barD([int Function(E a, E b)? cmp]) {}
+  void barE([int Function(E a, E b)? cmp]) {}
+  void barF([int Function(E a, E b)? cmp]) {}
+  static int _default(a, b) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug30624_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/bug30624_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..afc33c0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30624_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+library test;
+
+class C<E> {
+  static int _default(a, b) {}
+  void barA([int Function(E a, E b)? cmp]) {}
+  void barB([int Function(E a, E b)? cmp]) {}
+  void barC([int Function(E a, E b)? cmp]) {}
+  void barD([int Function(E a, E b)? cmp]) {}
+  void barE([int Function(E a, E b)? cmp]) {}
+  void barF([int Function(E a, E b)? cmp]) {}
+}
+
+main() {}
+void foo<E>(C<E> c, int cmp(E a, E b)) {}
diff --git a/pkg/front_end/testcases/inference/bug30624_2.dart.weak.expect b/pkg/front_end/testcases/inference/bug30624_2.dart.weak.expect
new file mode 100644
index 0000000..8fbdc25
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30624_2.dart.weak.expect
@@ -0,0 +1,38 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::E%>
+    : super core::Object::•()
+    ;
+  method barA([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t1 = cmp in #t1 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : #t1{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barB([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t2 = cmp in #t2 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 as{ForNonNullableByDefault} (self::C::E%, self::C::E%) → core::int : #t2{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barC([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    (self::C::E%, self::C::E%) → core::int v = #C2;
+    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t3 = cmp in #t3 == null ?{(self::C::E%, self::C::E%) → core::int} v : #t3{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barD([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t4 = cmp in #t4 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : #t4{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barE([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, cmp == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : cmp{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barF([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, !(cmp == null) ?{(self::C::E%, self::C::E%) → core::int} cmp{(self::C::E%, self::C::E%) → core::int} : #C2);
+  }
+  static method _default(dynamic a, dynamic b) → core::int {
+    return 1.{core::int::unary-}(){() → core::int};
+  }
+}
+static method foo<E extends core::Object? = dynamic>(self::C<self::foo::E%> c, (self::foo::E%, self::foo::E%) → core::int cmp) → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::C::_default
+}
diff --git a/pkg/front_end/testcases/inference/bug30624_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug30624_2.dart.weak.modular.expect
new file mode 100644
index 0000000..8fbdc25
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30624_2.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::E%>
+    : super core::Object::•()
+    ;
+  method barA([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t1 = cmp in #t1 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : #t1{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barB([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t2 = cmp in #t2 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 as{ForNonNullableByDefault} (self::C::E%, self::C::E%) → core::int : #t2{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barC([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    (self::C::E%, self::C::E%) → core::int v = #C2;
+    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t3 = cmp in #t3 == null ?{(self::C::E%, self::C::E%) → core::int} v : #t3{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barD([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t4 = cmp in #t4 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : #t4{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barE([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, cmp == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : cmp{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barF([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, !(cmp == null) ?{(self::C::E%, self::C::E%) → core::int} cmp{(self::C::E%, self::C::E%) → core::int} : #C2);
+  }
+  static method _default(dynamic a, dynamic b) → core::int {
+    return 1.{core::int::unary-}(){() → core::int};
+  }
+}
+static method foo<E extends core::Object? = dynamic>(self::C<self::foo::E%> c, (self::foo::E%, self::foo::E%) → core::int cmp) → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::C::_default
+}
diff --git a/pkg/front_end/testcases/inference/bug30624_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bug30624_2.dart.weak.outline.expect
new file mode 100644
index 0000000..25c1ee7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30624_2.dart.weak.outline.expect
@@ -0,0 +1,26 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::E%>
+    ;
+  method barA([(self::C::E%, self::C::E%) →? core::int cmp = null]) → void
+    ;
+  method barB([(self::C::E%, self::C::E%) →? core::int cmp = null]) → void
+    ;
+  method barC([(self::C::E%, self::C::E%) →? core::int cmp = null]) → void
+    ;
+  method barD([(self::C::E%, self::C::E%) →? core::int cmp = null]) → void
+    ;
+  method barE([(self::C::E%, self::C::E%) →? core::int cmp = null]) → void
+    ;
+  method barF([(self::C::E%, self::C::E%) →? core::int cmp = null]) → void
+    ;
+  static method _default(dynamic a, dynamic b) → core::int
+    ;
+}
+static method foo<E extends core::Object? = dynamic>(self::C<self::foo::E%> c, (self::foo::E%, self::foo::E%) → core::int cmp) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/bug30624_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30624_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..227058dd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30624_2.dart.weak.transformed.expect
@@ -0,0 +1,42 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::E%>
+    : super core::Object::•()
+    ;
+  method barA([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t1 = cmp in #t1 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : #t1{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barB([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t2 = cmp in #t2 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : #t2{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barC([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    (self::C::E%, self::C::E%) → core::int v = #C2;
+    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t3 = cmp in #t3 == null ?{(self::C::E%, self::C::E%) → core::int} v : #t3{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barD([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t4 = cmp in #t4 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : #t4{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barE([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, cmp == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : cmp{(self::C::E%, self::C::E%) → core::int});
+  }
+  method barF([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
+    self::foo<self::C::E%>(this, !(cmp == null) ?{(self::C::E%, self::C::E%) → core::int} cmp{(self::C::E%, self::C::E%) → core::int} : #C2);
+  }
+  static method _default(dynamic a, dynamic b) → core::int {
+    return 1.{core::int::unary-}(){() → core::int};
+  }
+}
+static method foo<E extends core::Object? = dynamic>(self::C<self::foo::E%> c, (self::foo::E%, self::foo::E%) → core::int cmp) → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::C::_default
+}
+
+Extra constant evaluation status:
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///bug30624_2.dart:39:35 -> IntConstant(-1)
+Extra constant evaluation: evaluated: 47, effectively constant: 1
diff --git a/pkg/front_end/testcases/inference/bug31132.dart b/pkg/front_end/testcases/inference/bug31132.dart
index 6a6960d..e681072 100644
--- a/pkg/front_end/testcases/inference/bug31132.dart
+++ b/pkg/front_end/testcases/inference/bug31132.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -12,7 +14,7 @@
 }
 
 void test(B x) {
-  var /*@ type=C* */ y = x is C ? /*@ promotedType=C* */ x : new C();
+  var /*@type=C**/ y = x is C ? /*@promotedType=C**/ x : new C();
   print(y. /*@target=C.z*/ z);
 }
 
diff --git a/pkg/front_end/testcases/inference/bug31132_2.dart b/pkg/front_end/testcases/inference/bug31132_2.dart
new file mode 100644
index 0000000..066d506
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31132_2.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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class B {}
+
+class C extends B {
+  var z;
+}
+
+void test(B x) {
+  var /*@type=C*/ y = x is C ? /*@promotedType=C*/ x : new C();
+  print(y. /*@target=C.z*/ z);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug31132_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/bug31132_2.dart.textual_outline.expect
new file mode 100644
index 0000000..977a33d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31132_2.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+library test;
+
+class B {}
+
+class C extends B {
+  var z;
+}
+
+void test(B x) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/bug31132_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/bug31132_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b742b0c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31132_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+library test;
+
+class B {}
+
+class C extends B {
+  var z;
+}
+
+main() {}
+void test(B x) {}
diff --git a/pkg/front_end/testcases/inference/bug31132_2.dart.weak.expect b/pkg/front_end/testcases/inference/bug31132_2.dart.weak.expect
new file mode 100644
index 0000000..4bfcae4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31132_2.dart.weak.expect
@@ -0,0 +1,20 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C extends self::B {
+  field dynamic z = null;
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method test(self::B x) → void {
+  self::C y = x is{ForNonNullableByDefault} self::C ?{self::C} x{self::C} : new self::C::•();
+  core::print(y.{self::C::z}{dynamic});
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug31132_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug31132_2.dart.weak.modular.expect
new file mode 100644
index 0000000..4bfcae4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31132_2.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C extends self::B {
+  field dynamic z = null;
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method test(self::B x) → void {
+  self::C y = x is{ForNonNullableByDefault} self::C ?{self::C} x{self::C} : new self::C::•();
+  core::print(y.{self::C::z}{dynamic});
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug31132_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bug31132_2.dart.weak.outline.expect
new file mode 100644
index 0000000..162adca
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31132_2.dart.weak.outline.expect
@@ -0,0 +1,17 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    ;
+}
+class C extends self::B {
+  field dynamic z;
+  synthetic constructor •() → self::C
+    ;
+}
+static method test(self::B x) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/bug31132_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug31132_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..4bfcae4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31132_2.dart.weak.transformed.expect
@@ -0,0 +1,20 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C extends self::B {
+  field dynamic z = null;
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method test(self::B x) → void {
+  self::C y = x is{ForNonNullableByDefault} self::C ?{self::C} x{self::C} : new self::C::•();
+  core::print(y.{self::C::z}{dynamic});
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug31133.dart b/pkg/front_end/testcases/inference/bug31133.dart
index 4835a9f..6e39c2be4 100644
--- a/pkg/front_end/testcases/inference/bug31133.dart
+++ b/pkg/front_end/testcases/inference/bug31133.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void test() {
-  var /*@ type=int* */ i = 0;
+  var /*@type=int*/ i = 0;
   for (i /*@target=num.+*/ ++;
       i /*@target=num.<*/ < 10;
       i /*@target=num.+*/ ++) {}
diff --git a/pkg/front_end/testcases/inference/bug31133.dart.textual_outline.expect b/pkg/front_end/testcases/inference/bug31133.dart.textual_outline.expect
index dfdb7cb..a6bcf94 100644
--- a/pkg/front_end/testcases/inference/bug31133.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/bug31133.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void test() {}
diff --git a/pkg/front_end/testcases/inference/bug31133.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/bug31133.dart.textual_outline_modelled.expect
index 7d0b674..72a3ba0 100644
--- a/pkg/front_end/testcases/inference/bug31133.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/bug31133.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/bug31133.dart.weak.expect b/pkg/front_end/testcases/inference/bug31133.dart.weak.expect
index 46ea8a2..b5d1aca 100644
--- a/pkg/front_end/testcases/inference/bug31133.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug31133.dart.weak.expect
@@ -1,16 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::int* i = 0;
-  for (final core::int* #t1 = i = i.{core::num::+}(1){(core::num*) →* core::int*}; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  core::int i = 0;
+  for (final core::int #t1 = i = i.{core::num::+}(1){(core::num) → core::int}; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
-  for (final core::int* #t2 = i = i.{core::num::+}(1){(core::num*) →* core::int*}; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  for (final core::int #t2 = i = i.{core::num::+}(1){(core::num) → core::int}; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
-  for (final core::int* #t3 = i = i.{core::num::-}(1){(core::num*) →* core::int*}; i.{core::num::>=}(0){(core::num*) →* core::bool*}; i = i.{core::num::-}(1){(core::num*) →* core::int*}) {
+  for (final core::int #t3 = i = i.{core::num::-}(1){(core::num) → core::int}; i.{core::num::>=}(0){(core::num) → core::bool}; i = i.{core::num::-}(1){(core::num) → core::int}) {
   }
-  for (final core::int* #t4 = i = i.{core::num::-}(1){(core::num*) →* core::int*}; i.{core::num::>=}(0){(core::num*) →* core::bool*}; i = i.{core::num::-}(1){(core::num*) →* core::int*}) {
+  for (final core::int #t4 = i = i.{core::num::-}(1){(core::num) → core::int}; i.{core::num::>=}(0){(core::num) → core::bool}; i = i.{core::num::-}(1){(core::num) → core::int}) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug31133.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug31133.dart.weak.modular.expect
index 46ea8a2..b5d1aca 100644
--- a/pkg/front_end/testcases/inference/bug31133.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/bug31133.dart.weak.modular.expect
@@ -1,16 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::int* i = 0;
-  for (final core::int* #t1 = i = i.{core::num::+}(1){(core::num*) →* core::int*}; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  core::int i = 0;
+  for (final core::int #t1 = i = i.{core::num::+}(1){(core::num) → core::int}; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
-  for (final core::int* #t2 = i = i.{core::num::+}(1){(core::num*) →* core::int*}; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  for (final core::int #t2 = i = i.{core::num::+}(1){(core::num) → core::int}; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
-  for (final core::int* #t3 = i = i.{core::num::-}(1){(core::num*) →* core::int*}; i.{core::num::>=}(0){(core::num*) →* core::bool*}; i = i.{core::num::-}(1){(core::num*) →* core::int*}) {
+  for (final core::int #t3 = i = i.{core::num::-}(1){(core::num) → core::int}; i.{core::num::>=}(0){(core::num) → core::bool}; i = i.{core::num::-}(1){(core::num) → core::int}) {
   }
-  for (final core::int* #t4 = i = i.{core::num::-}(1){(core::num*) →* core::int*}; i.{core::num::>=}(0){(core::num*) →* core::bool*}; i = i.{core::num::-}(1){(core::num*) →* core::int*}) {
+  for (final core::int #t4 = i = i.{core::num::-}(1){(core::num) → core::int}; i.{core::num::>=}(0){(core::num) → core::bool}; i = i.{core::num::-}(1){(core::num) → core::int}) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug31133.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bug31133.dart.weak.outline.expect
index c74ce2b..01b7bf5 100644
--- a/pkg/front_end/testcases/inference/bug31133.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/bug31133.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/bug31133.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug31133.dart.weak.transformed.expect
index 46ea8a2..b5d1aca 100644
--- a/pkg/front_end/testcases/inference/bug31133.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug31133.dart.weak.transformed.expect
@@ -1,16 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::int* i = 0;
-  for (final core::int* #t1 = i = i.{core::num::+}(1){(core::num*) →* core::int*}; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  core::int i = 0;
+  for (final core::int #t1 = i = i.{core::num::+}(1){(core::num) → core::int}; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
-  for (final core::int* #t2 = i = i.{core::num::+}(1){(core::num*) →* core::int*}; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  for (final core::int #t2 = i = i.{core::num::+}(1){(core::num) → core::int}; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
-  for (final core::int* #t3 = i = i.{core::num::-}(1){(core::num*) →* core::int*}; i.{core::num::>=}(0){(core::num*) →* core::bool*}; i = i.{core::num::-}(1){(core::num*) →* core::int*}) {
+  for (final core::int #t3 = i = i.{core::num::-}(1){(core::num) → core::int}; i.{core::num::>=}(0){(core::num) → core::bool}; i = i.{core::num::-}(1){(core::num) → core::int}) {
   }
-  for (final core::int* #t4 = i = i.{core::num::-}(1){(core::num*) →* core::int*}; i.{core::num::>=}(0){(core::num*) →* core::bool*}; i = i.{core::num::-}(1){(core::num*) →* core::int*}) {
+  for (final core::int #t4 = i = i.{core::num::-}(1){(core::num) → core::int}; i.{core::num::>=}(0){(core::num) → core::bool}; i = i.{core::num::-}(1){(core::num) → core::int}) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug31436.dart b/pkg/front_end/testcases/inference/bug31436.dart
index 92aa283..62f529c 100644
--- a/pkg/front_end/testcases/inference/bug31436.dart
+++ b/pkg/front_end/testcases/inference/bug31436.dart
@@ -1,20 +1,22 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void block_test() {
   List<Object> Function() g;
-  g = /*@ returnType=List<Object*>* */ () {
-    return /*@ typeArgs=Object* */ [3];
+  g = /*@returnType=List<Object*>**/ () {
+    return /*@typeArgs=Object**/ [3];
   };
   assert(g is List<Object> Function());
   assert(g is! List<int> Function());
   g(). /*@target=List.add*/ add("hello"); // No runtime error
-  List<int> l = /*@ typeArgs=int* */ [3];
-  g = /*@ returnType=List<int*>* */ () {
+  List<int> l = /*@typeArgs=int**/ [3];
+  g = /*@returnType=List<int*>**/ () {
     return l;
   };
   assert(g is List<Object> Function());
@@ -24,7 +26,7 @@
     throw 'expected a runtime error';
   } on TypeError {}
   Object o = l;
-  g = /*@ returnType=List<Object*>* */ () {
+  g = /*@returnType=List<Object*>**/ () {
     return o;
   }; // No implicit downcast on the assignment, implicit downcast on the return
   assert(g is List<Object> Function());
@@ -40,12 +42,12 @@
 
 void arrow_test() {
   List<Object> Function() g;
-  g = /*@ returnType=List<Object*>* */ () => /*@ typeArgs=Object* */ [3];
+  g = /*@returnType=List<Object*>**/ () => /*@typeArgs=Object**/ [3];
   assert(g is List<Object> Function());
   assert(g is! List<int> Function());
   g(). /*@target=List.add*/ add("hello"); // No runtime error
-  List<int> l = /*@ typeArgs=int* */ [3];
-  g = /*@ returnType=List<int*>* */ () => l;
+  List<int> l = /*@typeArgs=int**/ [3];
+  g = /*@returnType=List<int*>**/ () => l;
   assert(g is List<Object> Function());
   assert(g is List<int> Function());
   try {
@@ -53,7 +55,7 @@
     throw 'expected a runtime error';
   } on TypeError {}
   Object o = l;
-  g = /*@ returnType=List<Object*>* */ () =>
+  g = /*@returnType=List<Object*>**/ () =>
       o; // No implicit downcast on the assignment, implicit downcast on the return
   assert(g is List<Object> Function());
   assert(g is! List<int> Function());
diff --git a/pkg/front_end/testcases/inference/bug31436_2.dart b/pkg/front_end/testcases/inference/bug31436_2.dart
new file mode 100644
index 0000000..b821fc2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31436_2.dart
@@ -0,0 +1,67 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+void block_test(List<Object> Function() g) {
+  g = /*@returnType=List<Object>*/ () {
+    return /*@typeArgs=Object*/ [3];
+  };
+  assert(g is List<Object> Function());
+  assert(g is! List<int> Function());
+  g(). /*@target=List.add*/ add("hello"); // No runtime error
+  List<int> l = /*@typeArgs=int*/ [3];
+  g = /*@returnType=List<int>*/ () {
+    return l;
+  };
+  assert(/*@promotedType=() -> List<int>*/ g is List<Object> Function());
+  assert(/*@promotedType=() -> List<int>*/ g is List<int> Function());
+  try {
+    /*@promotedType=() -> List<int>*/ g()
+        . /*@target=List.add*/ add("hello"); // runtime error
+    throw 'expected a runtime error';
+  } on TypeError {}
+  Object o = l;
+  g = /*@returnType=List<int>*/ () {
+    return o;
+  }; // No implicit downcast on the assignment, implicit downcast on the return
+  assert(/*@promotedType=() -> List<int>*/ g is List<Object> Function());
+  assert(/*@promotedType=() -> List<int>*/ g is! List<int> Function());
+  assert(/*@promotedType=() -> List<int>*/ g is! Object Function());
+  /*@promotedType=() -> List<int>*/ g(); // No runtime error;
+  o = 3;
+  try {
+    /*@promotedType=() -> List<int>*/ g(); // Failed runtime cast on the return type of f
+    throw 'expected a runtime error';
+  } on TypeError {}
+}
+
+void arrow_test(List<Object> Function() g) {
+  g = /*@returnType=List<Object>*/ () => /*@typeArgs=Object*/ [3];
+  assert(g is List<Object> Function());
+  assert(g is! List<int> Function());
+  g(). /*@target=List.add*/ add("hello"); // No runtime error
+  List<int> l = /*@typeArgs=int*/ [3];
+  g = /*@returnType=List<int>*/ () => l;
+  assert(/*@promotedType=() -> List<int>*/ g is List<Object> Function());
+  assert(/*@promotedType=() -> List<int>*/ g is List<int> Function());
+  try {
+    /*@promotedType=() -> List<int>*/ g()
+        . /*@target=List.add*/ add("hello"); // runtime error
+    throw 'expected a runtime error';
+  } on TypeError {}
+  Object o = l;
+  g = /*@returnType=List<int>*/ () =>
+      o; // No implicit downcast on the assignment, implicit downcast on the return
+  assert(/*@promotedType=() -> List<int>*/ g is List<Object> Function());
+  assert(/*@promotedType=() -> List<int>*/ g is! List<int> Function());
+  assert(/*@promotedType=() -> List<int>*/ g is! Object Function());
+  /*@promotedType=() -> List<int>*/ g(); // No runtime error;
+  o = 3;
+  try {
+    /*@promotedType=() -> List<int>*/ g(); // Failed runtime cast on the return type of f
+    throw 'expected a runtime error';
+  } on TypeError {}
+}
diff --git a/pkg/front_end/testcases/inference/bug31436_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/bug31436_2.dart.textual_outline.expect
new file mode 100644
index 0000000..02f9a75
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31436_2.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+library test;
+
+void block_test(List<Object> Function() g) {}
+void arrow_test(List<Object> Function() g) {}
diff --git a/pkg/front_end/testcases/inference/bug31436_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/bug31436_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..39882b6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31436_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+library test;
+
+void arrow_test(List<Object> Function() g) {}
+void block_test(List<Object> Function() g) {}
diff --git a/pkg/front_end/testcases/inference/bug31436_2.dart.weak.expect b/pkg/front_end/testcases/inference/bug31436_2.dart.weak.expect
new file mode 100644
index 0000000..6b22891
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31436_2.dart.weak.expect
@@ -0,0 +1,103 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/bug31436_2.dart:23:36: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         . /*@target=List.add*/ add("hello"); // runtime error
+//                                    ^
+//
+// pkg/front_end/testcases/inference/bug31436_2.dart:28:12: Error: A value of type 'Object' can't be returned from a function with return type 'List<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+//     return o;
+//            ^
+//
+// pkg/front_end/testcases/inference/bug31436_2.dart:52:36: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         . /*@target=List.add*/ add("hello"); // runtime error
+//                                    ^
+//
+// pkg/front_end/testcases/inference/bug31436_2.dart:57:7: Error: A value of type 'Object' can't be returned from a function with return type 'List<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+//       o; // No implicit downcast on the assignment, implicit downcast on the return
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method block_test(() → core::List<core::Object> g) → void {
+  g = () → core::List<core::Object> {
+    return <core::Object>[3];
+  };
+  assert(g is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(!(g is{ForNonNullableByDefault} () → core::List<core::int>));
+  g(){() → core::List<core::Object>}.{core::List::add}("hello"){(core::Object) → void};
+  core::List<core::int> l = <core::int>[3];
+  g = () → core::List<core::int> {
+    return l;
+  };
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::int>);
+  try {
+    g{() → core::List<core::int>}(){() → core::List<core::int>}.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/bug31436_2.dart:23:36: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        . /*@target=List.add*/ add(\"hello\"); // runtime error
+                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+    throw "expected a runtime error";
+  }
+  on core::TypeError catch(no-exception-var) {
+  }
+  core::Object o = l;
+  g = () → core::List<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/bug31436_2.dart:28:12: Error: A value of type 'Object' can't be returned from a function with return type 'List<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'List' is from 'dart:core'.
+    return o;
+           ^" in o as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+  };
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(!(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::int>));
+  assert(!(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::Object));
+  g{() → core::List<core::int>}(){() → core::List<core::int>};
+  o = 3;
+  try {
+    g{() → core::List<core::int>}(){() → core::List<core::int>};
+    throw "expected a runtime error";
+  }
+  on core::TypeError catch(no-exception-var) {
+  }
+}
+static method arrow_test(() → core::List<core::Object> g) → void {
+  g = () → core::List<core::Object> => <core::Object>[3];
+  assert(g is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(!(g is{ForNonNullableByDefault} () → core::List<core::int>));
+  g(){() → core::List<core::Object>}.{core::List::add}("hello"){(core::Object) → void};
+  core::List<core::int> l = <core::int>[3];
+  g = () → core::List<core::int> => l;
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::int>);
+  try {
+    g{() → core::List<core::int>}(){() → core::List<core::int>}.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/bug31436_2.dart:52:36: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        . /*@target=List.add*/ add(\"hello\"); // runtime error
+                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+    throw "expected a runtime error";
+  }
+  on core::TypeError catch(no-exception-var) {
+  }
+  core::Object o = l;
+  g = () → core::List<core::int> => invalid-expression "pkg/front_end/testcases/inference/bug31436_2.dart:57:7: Error: A value of type 'Object' can't be returned from a function with return type 'List<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'List' is from 'dart:core'.
+      o; // No implicit downcast on the assignment, implicit downcast on the return
+      ^" in o as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(!(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::int>));
+  assert(!(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::Object));
+  g{() → core::List<core::int>}(){() → core::List<core::int>};
+  o = 3;
+  try {
+    g{() → core::List<core::int>}(){() → core::List<core::int>};
+    throw "expected a runtime error";
+  }
+  on core::TypeError catch(no-exception-var) {
+  }
+}
diff --git a/pkg/front_end/testcases/inference/bug31436_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug31436_2.dart.weak.modular.expect
new file mode 100644
index 0000000..6b22891
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31436_2.dart.weak.modular.expect
@@ -0,0 +1,103 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/bug31436_2.dart:23:36: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         . /*@target=List.add*/ add("hello"); // runtime error
+//                                    ^
+//
+// pkg/front_end/testcases/inference/bug31436_2.dart:28:12: Error: A value of type 'Object' can't be returned from a function with return type 'List<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+//     return o;
+//            ^
+//
+// pkg/front_end/testcases/inference/bug31436_2.dart:52:36: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         . /*@target=List.add*/ add("hello"); // runtime error
+//                                    ^
+//
+// pkg/front_end/testcases/inference/bug31436_2.dart:57:7: Error: A value of type 'Object' can't be returned from a function with return type 'List<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+//       o; // No implicit downcast on the assignment, implicit downcast on the return
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method block_test(() → core::List<core::Object> g) → void {
+  g = () → core::List<core::Object> {
+    return <core::Object>[3];
+  };
+  assert(g is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(!(g is{ForNonNullableByDefault} () → core::List<core::int>));
+  g(){() → core::List<core::Object>}.{core::List::add}("hello"){(core::Object) → void};
+  core::List<core::int> l = <core::int>[3];
+  g = () → core::List<core::int> {
+    return l;
+  };
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::int>);
+  try {
+    g{() → core::List<core::int>}(){() → core::List<core::int>}.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/bug31436_2.dart:23:36: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        . /*@target=List.add*/ add(\"hello\"); // runtime error
+                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+    throw "expected a runtime error";
+  }
+  on core::TypeError catch(no-exception-var) {
+  }
+  core::Object o = l;
+  g = () → core::List<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/bug31436_2.dart:28:12: Error: A value of type 'Object' can't be returned from a function with return type 'List<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'List' is from 'dart:core'.
+    return o;
+           ^" in o as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+  };
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(!(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::int>));
+  assert(!(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::Object));
+  g{() → core::List<core::int>}(){() → core::List<core::int>};
+  o = 3;
+  try {
+    g{() → core::List<core::int>}(){() → core::List<core::int>};
+    throw "expected a runtime error";
+  }
+  on core::TypeError catch(no-exception-var) {
+  }
+}
+static method arrow_test(() → core::List<core::Object> g) → void {
+  g = () → core::List<core::Object> => <core::Object>[3];
+  assert(g is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(!(g is{ForNonNullableByDefault} () → core::List<core::int>));
+  g(){() → core::List<core::Object>}.{core::List::add}("hello"){(core::Object) → void};
+  core::List<core::int> l = <core::int>[3];
+  g = () → core::List<core::int> => l;
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::int>);
+  try {
+    g{() → core::List<core::int>}(){() → core::List<core::int>}.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/bug31436_2.dart:52:36: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        . /*@target=List.add*/ add(\"hello\"); // runtime error
+                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+    throw "expected a runtime error";
+  }
+  on core::TypeError catch(no-exception-var) {
+  }
+  core::Object o = l;
+  g = () → core::List<core::int> => invalid-expression "pkg/front_end/testcases/inference/bug31436_2.dart:57:7: Error: A value of type 'Object' can't be returned from a function with return type 'List<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'List' is from 'dart:core'.
+      o; // No implicit downcast on the assignment, implicit downcast on the return
+      ^" in o as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(!(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::int>));
+  assert(!(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::Object));
+  g{() → core::List<core::int>}(){() → core::List<core::int>};
+  o = 3;
+  try {
+    g{() → core::List<core::int>}(){() → core::List<core::int>};
+    throw "expected a runtime error";
+  }
+  on core::TypeError catch(no-exception-var) {
+  }
+}
diff --git a/pkg/front_end/testcases/inference/bug31436_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bug31436_2.dart.weak.outline.expect
new file mode 100644
index 0000000..571b2d1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31436_2.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method block_test(() → core::List<core::Object> g) → void
+  ;
+static method arrow_test(() → core::List<core::Object> g) → void
+  ;
diff --git a/pkg/front_end/testcases/inference/bug31436_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug31436_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..c58c51d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31436_2.dart.weak.transformed.expect
@@ -0,0 +1,103 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/bug31436_2.dart:23:36: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         . /*@target=List.add*/ add("hello"); // runtime error
+//                                    ^
+//
+// pkg/front_end/testcases/inference/bug31436_2.dart:28:12: Error: A value of type 'Object' can't be returned from a function with return type 'List<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+//     return o;
+//            ^
+//
+// pkg/front_end/testcases/inference/bug31436_2.dart:52:36: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         . /*@target=List.add*/ add("hello"); // runtime error
+//                                    ^
+//
+// pkg/front_end/testcases/inference/bug31436_2.dart:57:7: Error: A value of type 'Object' can't be returned from a function with return type 'List<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+//       o; // No implicit downcast on the assignment, implicit downcast on the return
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method block_test(() → core::List<core::Object> g) → void {
+  g = () → core::List<core::Object> {
+    return core::_GrowableList::_literal1<core::Object>(3);
+  };
+  assert(g is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(!(g is{ForNonNullableByDefault} () → core::List<core::int>));
+  g(){() → core::List<core::Object>}.{core::List::add}("hello"){(core::Object) → void};
+  core::List<core::int> l = core::_GrowableList::_literal1<core::int>(3);
+  g = () → core::List<core::int> {
+    return l;
+  };
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::int>);
+  try {
+    g{() → core::List<core::int>}(){() → core::List<core::int>}.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/bug31436_2.dart:23:36: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        . /*@target=List.add*/ add(\"hello\"); // runtime error
+                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+    throw "expected a runtime error";
+  }
+  on core::TypeError catch(no-exception-var) {
+  }
+  core::Object o = l;
+  g = () → core::List<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/bug31436_2.dart:28:12: Error: A value of type 'Object' can't be returned from a function with return type 'List<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'List' is from 'dart:core'.
+    return o;
+           ^" in o as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+  };
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(!(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::int>));
+  assert(!(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::Object));
+  g{() → core::List<core::int>}(){() → core::List<core::int>};
+  o = 3;
+  try {
+    g{() → core::List<core::int>}(){() → core::List<core::int>};
+    throw "expected a runtime error";
+  }
+  on core::TypeError catch(no-exception-var) {
+  }
+}
+static method arrow_test(() → core::List<core::Object> g) → void {
+  g = () → core::List<core::Object> => core::_GrowableList::_literal1<core::Object>(3);
+  assert(g is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(!(g is{ForNonNullableByDefault} () → core::List<core::int>));
+  g(){() → core::List<core::Object>}.{core::List::add}("hello"){(core::Object) → void};
+  core::List<core::int> l = core::_GrowableList::_literal1<core::int>(3);
+  g = () → core::List<core::int> => l;
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::int>);
+  try {
+    g{() → core::List<core::int>}(){() → core::List<core::int>}.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/bug31436_2.dart:52:36: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        . /*@target=List.add*/ add(\"hello\"); // runtime error
+                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+    throw "expected a runtime error";
+  }
+  on core::TypeError catch(no-exception-var) {
+  }
+  core::Object o = l;
+  g = () → core::List<core::int> => invalid-expression "pkg/front_end/testcases/inference/bug31436_2.dart:57:7: Error: A value of type 'Object' can't be returned from a function with return type 'List<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'List' is from 'dart:core'.
+      o; // No implicit downcast on the assignment, implicit downcast on the return
+      ^" in o as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+  assert(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::Object>);
+  assert(!(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::List<core::int>));
+  assert(!(g{() → core::List<core::int>} is{ForNonNullableByDefault} () → core::Object));
+  g{() → core::List<core::int>}(){() → core::List<core::int>};
+  o = 3;
+  try {
+    g{() → core::List<core::int>}(){() → core::List<core::int>};
+    throw "expected a runtime error";
+  }
+  on core::TypeError catch(no-exception-var) {
+  }
+}
diff --git a/pkg/front_end/testcases/inference/bug32291.dart b/pkg/front_end/testcases/inference/bug32291.dart
index 782a12c..8ac764e 100644
--- a/pkg/front_end/testcases/inference/bug32291.dart
+++ b/pkg/front_end/testcases/inference/bug32291.dart
@@ -1,21 +1,23 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void main() {
-  var /*@ type=List<List<String*>*>* */ l = /*@ typeArgs=List<String*>* */ [
-    /*@ typeArgs=String* */ ["hi", "world"]
+  var /*@type=List<List<String*>*>**/ l = /*@typeArgs=List<String*>**/ [
+    /*@typeArgs=String**/ ["hi", "world"]
   ];
-  var /*@ type=Iterable<List<String*>*>* */ i1 =
-      l. /*@target=Iterable.map*/ /*@ typeArgs=List<String*>* */ map(
-          /*@ returnType=List<String*>* */ (/*@ type=List<String*>* */ ll) =>
-              ll ?? /*@ typeArgs=String* */ []);
-  var /*@ type=Iterable<int*>* */ i2 =
-      i1. /*@target=Iterable.map*/ /*@ typeArgs=int* */ map(
-          /*@ returnType=int* */ (List<String> l) =>
+  var /*@type=Iterable<List<String*>*>**/ i1 =
+      l. /*@target=Iterable.map*/ /*@typeArgs=List<String*>**/ map(
+          /*@returnType=List<String*>**/ (/*@type=List<String*>**/ ll) =>
+              ll ?? /*@typeArgs=String**/ []);
+  var /*@type=Iterable<int*>**/ i2 =
+      i1. /*@target=Iterable.map*/ /*@typeArgs=int**/ map(
+          /*@returnType=int**/ (List<String> l) =>
               l. /*@target=List.length*/ length);
   print(i2);
 }
diff --git a/pkg/front_end/testcases/inference/bug32291_2.dart b/pkg/front_end/testcases/inference/bug32291_2.dart
new file mode 100644
index 0000000..6a78241
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug32291_2.dart
@@ -0,0 +1,22 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+void main() {
+  var /*@type=List<List<String>?>*/ l = /*@typeArgs=List<String>?*/ [
+    /*@typeArgs=String*/ ["hi", "world"],
+    null,
+  ];
+  var /*@type=Iterable<List<String>>*/ i1 =
+      l. /*@target=Iterable.map*/ /*@typeArgs=List<String>*/ map(
+          /*@returnType=List<String>*/ (/*@type=List<String>?*/ ll) =>
+              ll ?? /*@typeArgs=String*/ []);
+  var /*@type=Iterable<int>*/ i2 =
+      i1. /*@target=Iterable.map*/ /*@typeArgs=int*/ map(
+          /*@returnType=int*/ (List<String> l) =>
+              l. /*@target=List.length*/ length);
+  print(i2);
+}
diff --git a/pkg/front_end/testcases/inference/bug32291_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/bug32291_2.dart.textual_outline.expect
new file mode 100644
index 0000000..c07c403
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug32291_2.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+library test;
+
+void main() {}
diff --git a/pkg/front_end/testcases/inference/bug32291_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/bug32291_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c07c403
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug32291_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+library test;
+
+void main() {}
diff --git a/pkg/front_end/testcases/inference/bug32291_2.dart.weak.expect b/pkg/front_end/testcases/inference/bug32291_2.dart.weak.expect
new file mode 100644
index 0000000..9a1081e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug32291_2.dart.weak.expect
@@ -0,0 +1,10 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+  core::List<core::List<core::String>?> l = <core::List<core::String>?>[<core::String>["hi", "world"], null];
+  core::Iterable<core::List<core::String>> i1 = l.{core::Iterable::map}<core::List<core::String>>((core::List<core::String>? ll) → core::List<core::String> => let final core::List<core::String>? #t1 = ll in #t1 == null ?{core::List<core::String>} <core::String>[] : #t1{core::List<core::String>}){((core::List<core::String>?) → core::List<core::String>) → core::Iterable<core::List<core::String>>};
+  core::Iterable<core::int> i2 = i1.{core::Iterable::map}<core::int>((core::List<core::String> l) → core::int => l.{core::List::length}{core::int}){((core::List<core::String>) → core::int) → core::Iterable<core::int>};
+  core::print(i2);
+}
diff --git a/pkg/front_end/testcases/inference/bug32291_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug32291_2.dart.weak.modular.expect
new file mode 100644
index 0000000..9a1081e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug32291_2.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+  core::List<core::List<core::String>?> l = <core::List<core::String>?>[<core::String>["hi", "world"], null];
+  core::Iterable<core::List<core::String>> i1 = l.{core::Iterable::map}<core::List<core::String>>((core::List<core::String>? ll) → core::List<core::String> => let final core::List<core::String>? #t1 = ll in #t1 == null ?{core::List<core::String>} <core::String>[] : #t1{core::List<core::String>}){((core::List<core::String>?) → core::List<core::String>) → core::Iterable<core::List<core::String>>};
+  core::Iterable<core::int> i2 = i1.{core::Iterable::map}<core::int>((core::List<core::String> l) → core::int => l.{core::List::length}{core::int}){((core::List<core::String>) → core::int) → core::Iterable<core::int>};
+  core::print(i2);
+}
diff --git a/pkg/front_end/testcases/inference/bug32291_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bug32291_2.dart.weak.outline.expect
new file mode 100644
index 0000000..27fd207
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug32291_2.dart.weak.outline.expect
@@ -0,0 +1,5 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inference/bug32291_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug32291_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..8d76280
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug32291_2.dart.weak.transformed.expect
@@ -0,0 +1,10 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+  core::List<core::List<core::String>?> l = core::_GrowableList::_literal2<core::List<core::String>?>(core::_GrowableList::_literal2<core::String>("hi", "world"), null);
+  core::Iterable<core::List<core::String>> i1 = l.{core::Iterable::map}<core::List<core::String>>((core::List<core::String>? ll) → core::List<core::String> => let final core::List<core::String>? #t1 = ll in #t1 == null ?{core::List<core::String>} core::_GrowableList::•<core::String>(0) : #t1{core::List<core::String>}){((core::List<core::String>?) → core::List<core::String>) → core::Iterable<core::List<core::String>>};
+  core::Iterable<core::int> i2 = i1.{core::Iterable::map}<core::int>((core::List<core::String> l) → core::int => l.{core::List::length}{core::int}){((core::List<core::String>) → core::int) → core::Iterable<core::int>};
+  core::print(i2);
+}
diff --git a/pkg/front_end/testcases/inference/bug33324.dart b/pkg/front_end/testcases/inference/bug33324.dart
index a41574e..a0523a4 100644
--- a/pkg/front_end/testcases/inference/bug33324.dart
+++ b/pkg/front_end/testcases/inference/bug33324.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 // This test checks that the greatest closure uses 'dynamic' and not Object as
 // the top type.
 
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart b/pkg/front_end/testcases/inference/call_corner_cases.dart
index f1136a5..bcc84ad 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -21,14 +21,14 @@
 }
 
 test() {
-  var /*@ type=int* */ callA = new A() /*@target=A.call*/ ();
-  var /*@ type=int* */ callFieldA =
+  var /*@type=int*/ callA = new A() /*@target=A.call*/ ();
+  var /*@type=int*/ callFieldA =
       new D(). /*@target=D.fieldA*/ fieldA /*@target=A.call*/ ();
-  var /*@ type=int* */ callGetA =
+  var /*@type=int*/ callGetA =
       new D(). /*@target=D.getA*/ getA /*@target=A.call*/ ();
-  var /*@type=int**/ callFieldB = new D()
+  var /*@type=int*/ callFieldB = new D()
       . /*@target=D.fieldB*/ fieldB /*@target=B.call*/ /*@target=A.call*/ ();
-  var /*@type=int**/ callGetB =
+  var /*@type=int*/ callGetB =
       new D(). /*@target=D.getB*/ getB /*@target=B.call*/ /*@target=A.call*/ ();
 }
 
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.textual_outline.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.textual_outline.expect
index 540b48e..48e6f56 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.textual_outline_modelled.expect
index 55a3eed..73709ae 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.expect
index bc9a2a22..3b4218b 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.expect
@@ -1,67 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method call() → core::int*
+  method call() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get call() → self::A*
+  get call() → self::A
     return new self::A::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  field self::A* fieldA = new self::A::•();
-  field self::B* fieldB = new self::B::•();
-  synthetic constructor •() → self::D*
+  field self::A fieldA = new self::A::•();
+  field self::B fieldB = new self::B::•();
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  get getA() → self::A*
+  get getA() → self::A
     return new self::A::•();
-  get getB() → self::B*
+  get getB() → self::B
     return new self::B::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  core::int* callA = new self::A::•().{self::A::call}(){() →* core::int*};
-  core::int* callFieldA = new self::D::•().{self::D::fieldA}{self::A*}.{self::A::call}(){() →* core::int*};
-  core::int* callGetA = new self::D::•().{self::D::getA}{self::A*}.{self::A::call}(){() →* core::int*};
-  core::int* callFieldB = new self::D::•().{self::D::fieldB}{self::B*}.{self::B::call}{self::A*}.{self::A::call}(){() →* core::int*};
-  core::int* callGetB = new self::D::•().{self::D::getB}{self::B*}.{self::B::call}{self::A*}.{self::A::call}(){() →* core::int*};
+  core::int callA = new self::A::•().{self::A::call}(){() → core::int};
+  core::int callFieldA = new self::D::•().{self::D::fieldA}{self::A}.{self::A::call}(){() → core::int};
+  core::int callGetA = new self::D::•().{self::D::getA}{self::A}.{self::A::call}(){() → core::int};
+  core::int callFieldB = new self::D::•().{self::D::fieldB}{self::B}.{self::B::call}{self::A}.{self::A::call}(){() → core::int};
+  core::int callGetB = new self::D::•().{self::D::getB}{self::B}.{self::B::call}{self::A}.{self::A::call}(){() → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.modular.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.modular.expect
index bc9a2a22..3b4218b 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.modular.expect
@@ -1,67 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method call() → core::int*
+  method call() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get call() → self::A*
+  get call() → self::A
     return new self::A::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  field self::A* fieldA = new self::A::•();
-  field self::B* fieldB = new self::B::•();
-  synthetic constructor •() → self::D*
+  field self::A fieldA = new self::A::•();
+  field self::B fieldB = new self::B::•();
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  get getA() → self::A*
+  get getA() → self::A
     return new self::A::•();
-  get getB() → self::B*
+  get getB() → self::B
     return new self::B::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  core::int* callA = new self::A::•().{self::A::call}(){() →* core::int*};
-  core::int* callFieldA = new self::D::•().{self::D::fieldA}{self::A*}.{self::A::call}(){() →* core::int*};
-  core::int* callGetA = new self::D::•().{self::D::getA}{self::A*}.{self::A::call}(){() →* core::int*};
-  core::int* callFieldB = new self::D::•().{self::D::fieldB}{self::B*}.{self::B::call}{self::A*}.{self::A::call}(){() →* core::int*};
-  core::int* callGetB = new self::D::•().{self::D::getB}{self::B*}.{self::B::call}{self::A*}.{self::A::call}(){() →* core::int*};
+  core::int callA = new self::A::•().{self::A::call}(){() → core::int};
+  core::int callFieldA = new self::D::•().{self::D::fieldA}{self::A}.{self::A::call}(){() → core::int};
+  core::int callGetA = new self::D::•().{self::D::getA}{self::A}.{self::A::call}(){() → core::int};
+  core::int callFieldB = new self::D::•().{self::D::fieldB}{self::B}.{self::B::call}{self::A}.{self::A::call}(){() → core::int};
+  core::int callGetB = new self::D::•().{self::D::getB}{self::B}.{self::B::call}{self::A}.{self::A::call}(){() → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.outline.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.outline.expect
index 99b9e51..e0fae9a 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.outline.expect
@@ -1,58 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  method call() → core::int*
+  method call() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get call() → self::A*
+  get call() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  field self::A* fieldA;
-  field self::B* fieldB;
-  synthetic constructor •() → self::D*
+  field self::A fieldA;
+  field self::B fieldB;
+  synthetic constructor •() → self::D
     ;
-  get getA() → self::A*
+  get getA() → self::A
     ;
-  get getB() → self::B*
+  get getB() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.transformed.expect
index bc9a2a22..3b4218b 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.transformed.expect
@@ -1,67 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method call() → core::int*
+  method call() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get call() → self::A*
+  get call() → self::A
     return new self::A::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  field self::A* fieldA = new self::A::•();
-  field self::B* fieldB = new self::B::•();
-  synthetic constructor •() → self::D*
+  field self::A fieldA = new self::A::•();
+  field self::B fieldB = new self::B::•();
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  get getA() → self::A*
+  get getA() → self::A
     return new self::A::•();
-  get getB() → self::B*
+  get getB() → self::B
     return new self::B::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  core::int* callA = new self::A::•().{self::A::call}(){() →* core::int*};
-  core::int* callFieldA = new self::D::•().{self::D::fieldA}{self::A*}.{self::A::call}(){() →* core::int*};
-  core::int* callGetA = new self::D::•().{self::D::getA}{self::A*}.{self::A::call}(){() →* core::int*};
-  core::int* callFieldB = new self::D::•().{self::D::fieldB}{self::B*}.{self::B::call}{self::A*}.{self::A::call}(){() →* core::int*};
-  core::int* callGetB = new self::D::•().{self::D::getB}{self::B*}.{self::B::call}{self::A*}.{self::A::call}(){() →* core::int*};
+  core::int callA = new self::A::•().{self::A::call}(){() → core::int};
+  core::int callFieldA = new self::D::•().{self::D::fieldA}{self::A}.{self::A::call}(){() → core::int};
+  core::int callGetA = new self::D::•().{self::D::getA}{self::A}.{self::A::call}(){() → core::int};
+  core::int callFieldB = new self::D::•().{self::D::fieldB}{self::B}.{self::B::call}{self::A}.{self::A::call}(){() → core::int};
+  core::int callGetB = new self::D::•().{self::D::getB}{self::B}.{self::B::call}{self::A}.{self::A::call}(){() → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart b/pkg/front_end/testcases/inference/callable_generic_class.dart
index b6bc427..0c9a27c 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class ActionDispatcher<P> {
-  void call([P value]) {}
+  void call([P? value]) {}
 }
 
 class Bar {}
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.textual_outline.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.textual_outline.expect
index fcb2b47..404e3fc 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class ActionDispatcher<P> {
-  void call([P value]) {}
+  void call([P? value]) {}
 }
 
 class Bar {}
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.textual_outline_modelled.expect
index fcb2b47..404e3fc 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class ActionDispatcher<P> {
-  void call([P value]) {}
+  void call([P? value]) {}
 }
 
 class Bar {}
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.expect
index 36688cc..ffdd149 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.expect
@@ -1,59 +1,29 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class ActionDispatcher<P extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P*>*
+class ActionDispatcher<P extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P%>
     : super core::Object::•()
     ;
-  method call([covariant-by-class self::ActionDispatcher::P* value = #C1]) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method call([covariant-by-class self::ActionDispatcher::P? value = #C1]) → void {}
 }
 class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class FooActions extends core::Object {
-  synthetic constructor •() → self::FooActions*
+  synthetic constructor •() → self::FooActions
     : super core::Object::•()
     ;
-  get foo() → self::ActionDispatcher<self::Bar*>*
-    return new self::ActionDispatcher::•<self::Bar*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get foo() → self::ActionDispatcher<self::Bar>
+    return new self::ActionDispatcher::•<self::Bar>();
 }
 static method main() → void {
-  let final self::FooActions* #t1 = new self::FooActions::•() in let final self::Bar* #t2 = new self::Bar::•() in #t1.{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(#t2){([self::Bar*]) →* void};
-  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar*]) →* void};
-  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar*]) →* void};
+  let final self::FooActions #t1 = new self::FooActions::•() in let final self::Bar #t2 = new self::Bar::•() in #t1.{self::FooActions::foo}{self::ActionDispatcher<self::Bar>}.{self::ActionDispatcher::call}(#t2){([self::Bar?]) → void};
+  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar>}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar?]) → void};
+  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar>}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar?]) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.modular.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.modular.expect
index 36688cc..ffdd149 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.modular.expect
@@ -1,59 +1,29 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class ActionDispatcher<P extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P*>*
+class ActionDispatcher<P extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P%>
     : super core::Object::•()
     ;
-  method call([covariant-by-class self::ActionDispatcher::P* value = #C1]) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method call([covariant-by-class self::ActionDispatcher::P? value = #C1]) → void {}
 }
 class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class FooActions extends core::Object {
-  synthetic constructor •() → self::FooActions*
+  synthetic constructor •() → self::FooActions
     : super core::Object::•()
     ;
-  get foo() → self::ActionDispatcher<self::Bar*>*
-    return new self::ActionDispatcher::•<self::Bar*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get foo() → self::ActionDispatcher<self::Bar>
+    return new self::ActionDispatcher::•<self::Bar>();
 }
 static method main() → void {
-  let final self::FooActions* #t1 = new self::FooActions::•() in let final self::Bar* #t2 = new self::Bar::•() in #t1.{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(#t2){([self::Bar*]) →* void};
-  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar*]) →* void};
-  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar*]) →* void};
+  let final self::FooActions #t1 = new self::FooActions::•() in let final self::Bar #t2 = new self::Bar::•() in #t1.{self::FooActions::foo}{self::ActionDispatcher<self::Bar>}.{self::ActionDispatcher::call}(#t2){([self::Bar?]) → void};
+  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar>}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar?]) → void};
+  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar>}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar?]) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect
index 0e0f2e4..dfed9be 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect
@@ -1,52 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class ActionDispatcher<P extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P*>*
+class ActionDispatcher<P extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P%>
     ;
-  method call([covariant-by-class self::ActionDispatcher::P* value = null]) → void
+  method call([covariant-by-class self::ActionDispatcher::P? value = null]) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class FooActions extends core::Object {
-  synthetic constructor •() → self::FooActions*
+  synthetic constructor •() → self::FooActions
     ;
-  get foo() → self::ActionDispatcher<self::Bar*>*
+  get foo() → self::ActionDispatcher<self::Bar>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.transformed.expect
index 36688cc..ffdd149 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.transformed.expect
@@ -1,59 +1,29 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class ActionDispatcher<P extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P*>*
+class ActionDispatcher<P extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P%>
     : super core::Object::•()
     ;
-  method call([covariant-by-class self::ActionDispatcher::P* value = #C1]) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method call([covariant-by-class self::ActionDispatcher::P? value = #C1]) → void {}
 }
 class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class FooActions extends core::Object {
-  synthetic constructor •() → self::FooActions*
+  synthetic constructor •() → self::FooActions
     : super core::Object::•()
     ;
-  get foo() → self::ActionDispatcher<self::Bar*>*
-    return new self::ActionDispatcher::•<self::Bar*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get foo() → self::ActionDispatcher<self::Bar>
+    return new self::ActionDispatcher::•<self::Bar>();
 }
 static method main() → void {
-  let final self::FooActions* #t1 = new self::FooActions::•() in let final self::Bar* #t2 = new self::Bar::•() in #t1.{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(#t2){([self::Bar*]) →* void};
-  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar*]) →* void};
-  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar*]) →* void};
+  let final self::FooActions #t1 = new self::FooActions::•() in let final self::Bar #t2 = new self::Bar::•() in #t1.{self::FooActions::foo}{self::ActionDispatcher<self::Bar>}.{self::ActionDispatcher::call}(#t2){([self::Bar?]) → void};
+  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar>}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar?]) → void};
+  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar>}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar?]) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart b/pkg/front_end/testcases/inference/circular_method_inference.dart
index 4c2d890..73ac166 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.textual_outline.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.textual_outline.expect
index 248729d..10f2489 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A extends B {
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.textual_outline_modelled.expect
index 248729d..10f2489 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A extends B {
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.expect
index 1bacd22..38a3b4f 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,35 +14,15 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   abstract method f(dynamic x) → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   abstract method f(dynamic x) → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.modular.expect
index 1bacd22..38a3b4f 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,35 +14,15 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   abstract method f(dynamic x) → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   abstract method f(dynamic x) → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.outline.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.outline.expect
index 2de0dd6..2cb48cd 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,34 +14,14 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   abstract method f(dynamic x) → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   abstract method f(dynamic x) → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.transformed.expect
index 1bacd22..38a3b4f 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,35 +14,15 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   abstract method f(dynamic x) → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   abstract method f(dynamic x) → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart
index ef12128..f89da09 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-var x = /*@ returnType=() ->* invalid-type */ () => y;
+var x = /*@returnType=() -> invalid-type*/ () => y;
 var y = /*@ returnType=invalid-type */ () => x;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.textual_outline.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.textual_outline.expect
index 3abb754..34a8c28 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var x = () => y;
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.textual_outline_modelled.expect
index 220c601..1be8547 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.expect
index 189aa8d..0565fbb 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@ returnType=() ->* invalid-type */ () => y;
+// var x = /*@returnType=() -> invalid-type*/ () => y;
 //     ^
 //
 import self as self;
 
-static field invalid-type x = () → () →* invalid-type => self::y;
-static field () →* invalid-type y = () → invalid-type => self::x;
+static field invalid-type x = () → () → invalid-type => self::y;
+static field () → invalid-type y = () → invalid-type => self::x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.modular.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.modular.expect
index 189aa8d..0565fbb 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@ returnType=() ->* invalid-type */ () => y;
+// var x = /*@returnType=() -> invalid-type*/ () => y;
 //     ^
 //
 import self as self;
 
-static field invalid-type x = () → () →* invalid-type => self::y;
-static field () →* invalid-type y = () → invalid-type => self::x;
+static field invalid-type x = () → () → invalid-type => self::y;
+static field () → invalid-type y = () → invalid-type => self::x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.outline.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.outline.expect
index 97b8e80..e25ff08 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.outline.expect
@@ -1,15 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@ returnType=() ->* invalid-type */ () => y;
+// var x = /*@returnType=() -> invalid-type*/ () => y;
 //     ^
 //
 import self as self;
 
 static field invalid-type x;
-static field () →* invalid-type y;
+static field () → invalid-type y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.transformed.expect
index 189aa8d..0565fbb 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@ returnType=() ->* invalid-type */ () => y;
+// var x = /*@returnType=() -> invalid-type*/ () => y;
 //     ^
 //
 import self as self;
 
-static field invalid-type x = () → () →* invalid-type => self::y;
-static field () →* invalid-type y = () → invalid-type => self::x;
+static field invalid-type x = () → () → invalid-type => self::y;
+static field () → invalid-type y = () → invalid-type => self::x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart
index ef12128..f89da09 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-var x = /*@ returnType=() ->* invalid-type */ () => y;
+var x = /*@returnType=() -> invalid-type*/ () => y;
 var y = /*@ returnType=invalid-type */ () => x;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.textual_outline.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.textual_outline.expect
index 3abb754..34a8c28 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var x = () => y;
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.textual_outline_modelled.expect
index 220c601..1be8547 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.expect
index 2439199..9aa0028 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@ returnType=() ->* invalid-type */ () => y;
+// var x = /*@returnType=() -> invalid-type*/ () => y;
 //     ^
 //
 import self as self;
 
-static field invalid-type x = () → () →* invalid-type => self::y;
-static field () →* invalid-type y = () → invalid-type => self::x;
+static field invalid-type x = () → () → invalid-type => self::y;
+static field () → invalid-type y = () → invalid-type => self::x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.modular.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.modular.expect
index 2439199..9aa0028 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@ returnType=() ->* invalid-type */ () => y;
+// var x = /*@returnType=() -> invalid-type*/ () => y;
 //     ^
 //
 import self as self;
 
-static field invalid-type x = () → () →* invalid-type => self::y;
-static field () →* invalid-type y = () → invalid-type => self::x;
+static field invalid-type x = () → () → invalid-type => self::y;
+static field () → invalid-type y = () → invalid-type => self::x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.outline.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.outline.expect
index 947182a0..6178fe4 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.outline.expect
@@ -1,15 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@ returnType=() ->* invalid-type */ () => y;
+// var x = /*@returnType=() -> invalid-type*/ () => y;
 //     ^
 //
 import self as self;
 
 static field invalid-type x;
-static field () →* invalid-type y;
+static field () → invalid-type y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.transformed.expect
index 2439199..9aa0028 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@ returnType=() ->* invalid-type */ () => y;
+// var x = /*@returnType=() -> invalid-type*/ () => y;
 //     ^
 //
 import self as self;
 
-static field invalid-type x = () → () →* invalid-type => self::y;
-static field () →* invalid-type y = () → invalid-type => self::x;
+static field invalid-type x = () → () → invalid-type => self::y;
+static field () → invalid-type y = () → invalid-type => self::x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart
index 1aa3fa5..59ed3f1 100644
--- a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart
+++ b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void test() {
-  int Function(Null) f = /*@ returnType=int* */ (/*@ type=Object* */ x) => 1;
+  int Function(Null) f = /*@returnType=int*/ (/*@type=Object?*/ x) => 1;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.textual_outline.expect b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.textual_outline.expect
index dfdb7cb..a6bcf94 100644
--- a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void test() {}
diff --git a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.textual_outline_modelled.expect
index 7d0b674..72a3ba0 100644
--- a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.expect b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.expect
index 1937cae..283cd45 100644
--- a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  (Null) →* core::int* f = (core::Object* x) → core::int* => 1;
+  (Null) → core::int f = (core::Object? x) → core::int => 1;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.modular.expect b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.modular.expect
index 1937cae..283cd45 100644
--- a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  (Null) →* core::int* f = (core::Object* x) → core::int* => 1;
+  (Null) → core::int f = (core::Object? x) → core::int => 1;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.outline.expect b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.outline.expect
index c74ce2b..01b7bf5 100644
--- a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.transformed.expect
index 1937cae..283cd45 100644
--- a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  (Null) →* core::int* f = (core::Object* x) → core::int* => 1;
+  (Null) → core::int f = (core::Object? x) → core::int => 1;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart
index cfd02c8..2c89221 100644
--- a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart
+++ b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart
@@ -1,25 +1,25 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 f() {
-  var /*@ type=int* */ a = 0;
+  var /*@type=int*/ a = 0;
   var /*@ type=dynamic */ b = null;
-  var /*@ type=dynamic */ c = throw 'foo';
-  var /*@ type=() ->* int* */ d = /*@ returnType=int* */ () => 0;
-  var /*@ type=() ->* Null */ e = /*@ returnType=Null */ () => null;
-  var /*@ type=() ->* Null */ f = /*@ returnType=Null */ () =>
+  var /*@type=Never*/ c = throw 'foo';
+  var /*@type=() -> int*/ d = /*@returnType=int*/ () => 0;
+  var /*@type=() -> Null*/ e = /*@ returnType=Null */ () => null;
+  var /*@type=() -> Never*/ f = /*@returnType=Never*/ () =>
       throw 'foo';
-  var /*@ type=() ->* int* */ g = /*@ returnType=int* */ () {
+  var /*@type=() -> int*/ g = /*@returnType=int*/ () {
     return 0;
   };
-  var /*@ type=() ->* Null */ h = /*@ returnType=Null */ () {
+  var /*@type=() -> Null*/ h = /*@ returnType=Null */ () {
     return null;
   };
-  var /*@ type=() ->* Null */ i = /*@ returnType=Null */ () {
+  var /*@type=() -> Never*/ i = /*@returnType=Never*/ () {
     return (throw 'foo');
   };
 }
diff --git a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.textual_outline.expect b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.textual_outline.expect
index 54d3052..f59c3c4 100644
--- a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 f() {}
diff --git a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.textual_outline_modelled.expect
index 54d3052..f59c3c4 100644
--- a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 f() {}
diff --git a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.expect b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.expect
index 55c9d7f..435f8e6 100644
--- a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.expect
@@ -1,21 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method f() → dynamic {
-  core::int* a = 0;
+  core::int a = 0;
   has-declared-initializer dynamic b = null;
-  dynamic c = throw "foo";
-  () →* core::int* d = () → core::int* => 0;
-  () →* Null e = () → Null => null;
-  () →* Null f = () → Null => throw "foo";
-  () →* core::int* g = () → core::int* {
+  Never c = throw "foo";
+  () → core::int d = () → core::int => 0;
+  () → Null e = () → Null => null;
+  () → Never f = () → Never => throw "foo";
+  () → core::int g = () → core::int {
     return 0;
   };
-  () →* Null h = () → Null {
+  () → Null h = () → Null {
     return null;
   };
-  () →* Null i = () → Null {
+  () → Never i = () → Never {
     return throw "foo";
   };
 }
diff --git a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.modular.expect b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.modular.expect
index 55c9d7f..435f8e6 100644
--- a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.modular.expect
@@ -1,21 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method f() → dynamic {
-  core::int* a = 0;
+  core::int a = 0;
   has-declared-initializer dynamic b = null;
-  dynamic c = throw "foo";
-  () →* core::int* d = () → core::int* => 0;
-  () →* Null e = () → Null => null;
-  () →* Null f = () → Null => throw "foo";
-  () →* core::int* g = () → core::int* {
+  Never c = throw "foo";
+  () → core::int d = () → core::int => 0;
+  () → Null e = () → Null => null;
+  () → Never f = () → Never => throw "foo";
+  () → core::int g = () → core::int {
     return 0;
   };
-  () →* Null h = () → Null {
+  () → Null h = () → Null {
     return null;
   };
-  () →* Null i = () → Null {
+  () → Never i = () → Never {
     return throw "foo";
   };
 }
diff --git a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.outline.expect b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.outline.expect
index b08cbd0..b31e2f6 100644
--- a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method f() → dynamic
diff --git a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.transformed.expect
index 55c9d7f..435f8e6 100644
--- a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.transformed.expect
@@ -1,21 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method f() → dynamic {
-  core::int* a = 0;
+  core::int a = 0;
   has-declared-initializer dynamic b = null;
-  dynamic c = throw "foo";
-  () →* core::int* d = () → core::int* => 0;
-  () →* Null e = () → Null => null;
-  () →* Null f = () → Null => throw "foo";
-  () →* core::int* g = () → core::int* {
+  Never c = throw "foo";
+  () → core::int d = () → core::int => 0;
+  () → Null e = () → Null => null;
+  () → Never f = () → Never => throw "foo";
+  () → core::int g = () → core::int {
     return 0;
   };
-  () →* Null h = () → Null {
+  () → Null h = () → Null {
     return null;
   };
-  () →* Null i = () → Null {
+  () → Never i = () → Never {
     return throw "foo";
   };
 }
diff --git a/pkg/front_end/testcases/inference/complex_predecrement.dart b/pkg/front_end/testcases/inference/complex_predecrement.dart
index 541cf50..5452cb9 100644
--- a/pkg/front_end/testcases/inference/complex_predecrement.dart
+++ b/pkg/front_end/testcases/inference/complex_predecrement.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=List<int*>* */ foo = /*@ typeArgs=int* */ [1, 2, 3];
+  var /*@type=List<int>*/ foo = /*@typeArgs=int*/ [1, 2, 3];
   print(/*@target=num.-*/ --foo /*@target=List.[]*/ /*@target=List.[]=*/ [0]);
 }
diff --git a/pkg/front_end/testcases/inference/complex_predecrement.dart.textual_outline.expect b/pkg/front_end/testcases/inference/complex_predecrement.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/complex_predecrement.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/complex_predecrement.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/complex_predecrement.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/complex_predecrement.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/complex_predecrement.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/complex_predecrement.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.expect b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.expect
index a27510a..a8362c0 100644
--- a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* foo = <core::int*>[1, 2, 3];
-  core::print(let final core::List<core::int*>* #t1 = foo in let final core::int* #t2 = 0 in let final core::int* #t3 = #t1.{core::List::[]}(#t2){(core::int*) →* core::int*}.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, core::int*) →* void} in #t3);
+  core::List<core::int> foo = <core::int>[1, 2, 3];
+  core::print(let final core::List<core::int> #t1 = foo in let final core::int #t2 = 0 in let final core::int #t3 = #t1.{core::List::[]}(#t2){(core::int) → core::int}.{core::num::-}(1){(core::num) → core::int} in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int, core::int) → void} in #t3);
 }
diff --git a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.modular.expect b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.modular.expect
index a27510a..a8362c0 100644
--- a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* foo = <core::int*>[1, 2, 3];
-  core::print(let final core::List<core::int*>* #t1 = foo in let final core::int* #t2 = 0 in let final core::int* #t3 = #t1.{core::List::[]}(#t2){(core::int*) →* core::int*}.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, core::int*) →* void} in #t3);
+  core::List<core::int> foo = <core::int>[1, 2, 3];
+  core::print(let final core::List<core::int> #t1 = foo in let final core::int #t2 = 0 in let final core::int #t3 = #t1.{core::List::[]}(#t2){(core::int) → core::int}.{core::num::-}(1){(core::num) → core::int} in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int, core::int) → void} in #t3);
 }
diff --git a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.outline.expect b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.transformed.expect
index a3e1f12..c3920e8 100644
--- a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* foo = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
-  core::print(let final core::List<core::int*>* #t1 = foo in let final core::int* #t2 = 0 in let final core::int* #t3 = #t1.{core::List::[]}(#t2){(core::int*) →* core::int*}.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, core::int*) →* void} in #t3);
+  core::List<core::int> foo = core::_GrowableList::_literal3<core::int>(1, 2, 3);
+  core::print(let final core::List<core::int> #t1 = foo in let final core::int #t2 = 0 in let final core::int #t3 = #t1.{core::List::[]}(#t2){(core::int) → core::int}.{core::num::-}(1){(core::num) → core::int} in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int, core::int) → void} in #t3);
 }
 
 
diff --git a/pkg/front_end/testcases/inference/conditional_lub.dart b/pkg/front_end/testcases/inference/conditional_lub.dart
index 4e89e32..a6b43a6 100644
--- a/pkg/front_end/testcases/inference/conditional_lub.dart
+++ b/pkg/front_end/testcases/inference/conditional_lub.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,5 +11,5 @@
 var z = b ? x : y;
 
 main() {
-  var /*@ type=num* */ z = b ? x : y;
+  var /*@type=num*/ z = b ? x : y;
 }
diff --git a/pkg/front_end/testcases/inference/conditional_lub.dart.textual_outline.expect b/pkg/front_end/testcases/inference/conditional_lub.dart.textual_outline.expect
index 040fb14..8dcdc49 100644
--- a/pkg/front_end/testcases/inference/conditional_lub.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/conditional_lub.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 bool b = true;
diff --git a/pkg/front_end/testcases/inference/conditional_lub.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/conditional_lub.dart.textual_outline_modelled.expect
index e2e1230..2c98a8f 100644
--- a/pkg/front_end/testcases/inference/conditional_lub.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/conditional_lub.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 bool b = true;
diff --git a/pkg/front_end/testcases/inference/conditional_lub.dart.weak.expect b/pkg/front_end/testcases/inference/conditional_lub.dart.weak.expect
index 0d65f10..c3af9f6 100644
--- a/pkg/front_end/testcases/inference/conditional_lub.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/conditional_lub.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* b = true;
-static field core::int* x = 0;
-static field core::double* y = 0.0;
-static field core::num* z = self::b ?{core::num*} self::x : self::y;
+static field core::bool b = true;
+static field core::int x = 0;
+static field core::double y = 0.0;
+static field core::num z = self::b ?{core::num} self::x : self::y;
 static method main() → dynamic {
-  core::num* z = self::b ?{core::num*} self::x : self::y;
+  core::num z = self::b ?{core::num} self::x : self::y;
 }
diff --git a/pkg/front_end/testcases/inference/conditional_lub.dart.weak.modular.expect b/pkg/front_end/testcases/inference/conditional_lub.dart.weak.modular.expect
index 0d65f10..c3af9f6 100644
--- a/pkg/front_end/testcases/inference/conditional_lub.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/conditional_lub.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* b = true;
-static field core::int* x = 0;
-static field core::double* y = 0.0;
-static field core::num* z = self::b ?{core::num*} self::x : self::y;
+static field core::bool b = true;
+static field core::int x = 0;
+static field core::double y = 0.0;
+static field core::num z = self::b ?{core::num} self::x : self::y;
 static method main() → dynamic {
-  core::num* z = self::b ?{core::num*} self::x : self::y;
+  core::num z = self::b ?{core::num} self::x : self::y;
 }
diff --git a/pkg/front_end/testcases/inference/conditional_lub.dart.weak.outline.expect b/pkg/front_end/testcases/inference/conditional_lub.dart.weak.outline.expect
index a57d812..ee57c15 100644
--- a/pkg/front_end/testcases/inference/conditional_lub.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/conditional_lub.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* b;
-static field core::int* x;
-static field core::double* y;
-static field core::num* z;
+static field core::bool b;
+static field core::int x;
+static field core::double y;
+static field core::num z;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/conditional_lub.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/conditional_lub.dart.weak.transformed.expect
index 0d65f10..c3af9f6 100644
--- a/pkg/front_end/testcases/inference/conditional_lub.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/conditional_lub.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* b = true;
-static field core::int* x = 0;
-static field core::double* y = 0.0;
-static field core::num* z = self::b ?{core::num*} self::x : self::y;
+static field core::bool b = true;
+static field core::int x = 0;
+static field core::double y = 0.0;
+static field core::num z = self::b ?{core::num} self::x : self::y;
 static method main() → dynamic {
-  core::num* z = self::b ?{core::num*} self::x : self::y;
+  core::num z = self::b ?{core::num} self::x : self::y;
 }
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart
index 3502e34..f31287b 100644
--- a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,9 +11,9 @@
 
 main() {
   bool b = false;
-  List<int> l1 = /*@ typeArgs=int* */ [1];
-  List<int> l2 = /*@ typeArgs=int* */ [2];
-  var /*@ type=C<int*>* */ x = new /*@ typeArgs=int* */ C(l1);
-  var /*@ type=C<int*>* */ y = new /*@ typeArgs=int* */ C(l2);
-  var /*@ type=C<int*>* */ z = new /*@ typeArgs=int* */ C(b ? l1 : l2);
+  List<int> l1 = /*@typeArgs=int*/ [1];
+  List<int> l2 = /*@typeArgs=int*/ [2];
+  var /*@type=C<int>*/ x = new /*@typeArgs=int*/ C(l1);
+  var /*@type=C<int>*/ y = new /*@typeArgs=int*/ C(l2);
+  var /*@type=C<int>*/ z = new /*@typeArgs=int*/ C(b ? l1 : l2);
 }
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.textual_outline.expect b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.textual_outline.expect
index 2cf47d4..65185f2 100644
--- a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.textual_outline_modelled.expect
index 2cf47d4..65185f2 100644
--- a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.expect b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.expect
index c929f40..ba3159a 100644
--- a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::List<self::C::T*>* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::List<self::C::T%> x) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::bool* b = false;
-  core::List<core::int*>* l1 = <core::int*>[1];
-  core::List<core::int*>* l2 = <core::int*>[2];
-  self::C<core::int*>* x = new self::C::•<core::int*>(l1);
-  self::C<core::int*>* y = new self::C::•<core::int*>(l2);
-  self::C<core::int*>* z = new self::C::•<core::int*>(b ?{core::List<core::int*>*} l1 : l2);
+  core::bool b = false;
+  core::List<core::int> l1 = <core::int>[1];
+  core::List<core::int> l2 = <core::int>[2];
+  self::C<core::int> x = new self::C::•<core::int>(l1);
+  self::C<core::int> y = new self::C::•<core::int>(l2);
+  self::C<core::int> z = new self::C::•<core::int>(b ?{core::List<core::int>} l1 : l2);
 }
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.modular.expect
index c929f40..ba3159a 100644
--- a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::List<self::C::T*>* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::List<self::C::T%> x) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::bool* b = false;
-  core::List<core::int*>* l1 = <core::int*>[1];
-  core::List<core::int*>* l2 = <core::int*>[2];
-  self::C<core::int*>* x = new self::C::•<core::int*>(l1);
-  self::C<core::int*>* y = new self::C::•<core::int*>(l2);
-  self::C<core::int*>* z = new self::C::•<core::int*>(b ?{core::List<core::int*>*} l1 : l2);
+  core::bool b = false;
+  core::List<core::int> l1 = <core::int>[1];
+  core::List<core::int> l2 = <core::int>[2];
+  self::C<core::int> x = new self::C::•<core::int>(l1);
+  self::C<core::int> y = new self::C::•<core::int>(l2);
+  self::C<core::int> z = new self::C::•<core::int>(b ?{core::List<core::int>} l1 : l2);
 }
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.outline.expect b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.outline.expect
index 7597901..3be73ad 100644
--- a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::List<self::C::T*>* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::List<self::C::T%> x) → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.transformed.expect
index a0810b4..bd18d67 100644
--- a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::List<self::C::T*>* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::List<self::C::T%> x) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::bool* b = false;
-  core::List<core::int*>* l1 = core::_GrowableList::_literal1<core::int*>(1);
-  core::List<core::int*>* l2 = core::_GrowableList::_literal1<core::int*>(2);
-  self::C<core::int*>* x = new self::C::•<core::int*>(l1);
-  self::C<core::int*>* y = new self::C::•<core::int*>(l2);
-  self::C<core::int*>* z = new self::C::•<core::int*>(b ?{core::List<core::int*>*} l1 : l2);
+  core::bool b = false;
+  core::List<core::int> l1 = core::_GrowableList::_literal1<core::int>(1);
+  core::List<core::int> l2 = core::_GrowableList::_literal1<core::int>(2);
+  self::C<core::int> x = new self::C::•<core::int>(l1);
+  self::C<core::int> y = new self::C::•<core::int>(l2);
+  self::C<core::int> z = new self::C::•<core::int>(b ?{core::List<core::int>} l1 : l2);
 }
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart b/pkg/front_end/testcases/inference/conflicting_fields.dart
index 8aa0ffd..b26f836 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart
@@ -1,16 +1,16 @@
 // 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=2.9
+
 /*@testedFeatures=inference*/
 
 class A {
   dynamic field1;
-  int field2;
+  int? field2;
 }
 
 class I {
-  int field1;
+  int? field1;
   dynamic field2;
 }
 
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.textual_outline.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.textual_outline.expect
index 612dc70..a4fb5e6 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.textual_outline.expect
@@ -1,11 +1,10 @@
-// @dart = 2.9
 class A {
   dynamic field1;
-  int field2;
+  int? field2;
 }
 
 class I {
-  int field1;
+  int? field1;
   dynamic field2;
 }
 
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.textual_outline_modelled.expect
index 5953483..d8747e6 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 class A {
   dynamic field1;
-  int field2;
+  int? field2;
 }
 
 class B extends A implements I {
@@ -13,7 +12,7 @@
 
 class I {
   dynamic field2;
-  int field1;
+  int? field1;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.expect
index 24a2f0c..8bb5c6e 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.expect
@@ -1,48 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic field1 = null;
-  field core::int* field2 = null;
-  synthetic constructor •() → self::A*
+  field core::int? field2 = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I extends core::Object {
-  field core::int* field1 = null;
+  field core::int? field1 = null;
   field dynamic field2 = null;
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A implements self::I {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get field1() → core::int*
+  get field1() → core::int?
     return null;
-  get field2() → core::int*
+  get field2() → core::int?
     return null;
   set field1(dynamic value) → void {}
   set field2(dynamic value) → void {}
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.modular.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.modular.expect
index 24a2f0c..8bb5c6e 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.modular.expect
@@ -1,48 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic field1 = null;
-  field core::int* field2 = null;
-  synthetic constructor •() → self::A*
+  field core::int? field2 = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I extends core::Object {
-  field core::int* field1 = null;
+  field core::int? field1 = null;
   field dynamic field2 = null;
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A implements self::I {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get field1() → core::int*
+  get field1() → core::int?
     return null;
-  get field2() → core::int*
+  get field2() → core::int?
     return null;
   set field1(dynamic value) → void {}
   set field2(dynamic value) → void {}
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.outline.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.outline.expect
index 4fa520d..061368a 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.outline.expect
@@ -1,45 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic field1;
-  field core::int* field2;
-  synthetic constructor •() → self::A*
+  field core::int? field2;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I extends core::Object {
-  field core::int* field1;
+  field core::int? field1;
   field dynamic field2;
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A implements self::I {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get field1() → core::int*
+  get field1() → core::int?
     ;
-  get field2() → core::int*
+  get field2() → core::int?
     ;
   set field1(dynamic value) → void
     ;
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.transformed.expect
index 24a2f0c..8bb5c6e 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.transformed.expect
@@ -1,48 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic field1 = null;
-  field core::int* field2 = null;
-  synthetic constructor •() → self::A*
+  field core::int? field2 = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I extends core::Object {
-  field core::int* field1 = null;
+  field core::int? field1 = null;
   field dynamic field2 = null;
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A implements self::I {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get field1() → core::int*
+  get field1() → core::int?
     return null;
-  get field2() → core::int*
+  get field2() → core::int?
     return null;
   set field1(dynamic value) → void {}
   set field2(dynamic value) → void {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart b/pkg/front_end/testcases/inference/conflicts_can_happen.dart
index 9cff49b..4d8b95e 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart
@@ -1,33 +1,33 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class I1 {
-  int x;
+  int x = 0;
 }
 
 class I2 extends I1 {
-  int y;
+  int y = 0;
 }
 
 class A {
-  final I1 a = null;
+  final I1 a = throw '';
 }
 
 class B {
-  final I2 a = null;
+  final I2 a = throw '';
 }
 
 class C1 implements A, B {
-  get a => null;
+  get a => throw '';
 }
 
 // Still ambiguous
 class C2 implements B, A {
-  get a => null;
+  get a => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.textual_outline.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.textual_outline.expect
index 61de1e5..d521e4f 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.textual_outline.expect
@@ -1,28 +1,27 @@
-// @dart = 2.9
 library test;
 
 class I1 {
-  int x;
+  int x = 0;
 }
 
 class I2 extends I1 {
-  int y;
+  int y = 0;
 }
 
 class A {
-  final I1 a = null;
+  final I1 a = throw '';
 }
 
 class B {
-  final I2 a = null;
+  final I2 a = throw '';
 }
 
 class C1 implements A, B {
-  get a => null;
+  get a => throw '';
 }
 
 class C2 implements B, A {
-  get a => null;
+  get a => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.textual_outline_modelled.expect
index 042f496..85098d3 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.textual_outline_modelled.expect
@@ -1,28 +1,27 @@
-// @dart = 2.9
 library test;
 
 class A {
-  final I1 a = null;
+  final I1 a = throw '';
 }
 
 class B {
-  final I2 a = null;
+  final I2 a = throw '';
 }
 
 class C1 implements A, B {
-  get a => null;
+  get a => throw '';
 }
 
 class C2 implements B, A {
-  get a => null;
+  get a => throw '';
 }
 
 class I1 {
-  int x;
+  int x = 0;
 }
 
 class I2 extends I1 {
-  int y;
+  int y = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.expect
index edd05fe..7d8ad6a 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.expect
@@ -1,93 +1,43 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::I1*
+  field core::int x = 0;
+  synthetic constructor •() → self::I1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I2 extends self::I1 {
-  field core::int* y = null;
-  synthetic constructor •() → self::I2*
+  field core::int y = 0;
+  synthetic constructor •() → self::I2
     : super self::I1::•()
     ;
 }
 class A extends core::Object {
-  final field self::I1* a = null;
-  synthetic constructor •() → self::A*
+  final field self::I1 a = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  final field self::I2* a = null;
-  synthetic constructor •() → self::B*
+  final field self::I2 a = throw "";
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C1 extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  get a() → self::I2*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get a() → self::I2
+    return throw "";
 }
 class C2 extends core::Object implements self::B, self::A {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  get a() → self::I2*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get a() → self::I2
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.modular.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.modular.expect
index edd05fe..7d8ad6a 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.modular.expect
@@ -1,93 +1,43 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::I1*
+  field core::int x = 0;
+  synthetic constructor •() → self::I1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I2 extends self::I1 {
-  field core::int* y = null;
-  synthetic constructor •() → self::I2*
+  field core::int y = 0;
+  synthetic constructor •() → self::I2
     : super self::I1::•()
     ;
 }
 class A extends core::Object {
-  final field self::I1* a = null;
-  synthetic constructor •() → self::A*
+  final field self::I1 a = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  final field self::I2* a = null;
-  synthetic constructor •() → self::B*
+  final field self::I2 a = throw "";
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C1 extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  get a() → self::I2*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get a() → self::I2
+    return throw "";
 }
 class C2 extends core::Object implements self::B, self::A {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  get a() → self::I2*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get a() → self::I2
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.outline.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.outline.expect
index 904fd97..b525429 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.outline.expect
@@ -1,88 +1,38 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::I1*
+  field core::int x;
+  synthetic constructor •() → self::I1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I2 extends self::I1 {
-  field core::int* y;
-  synthetic constructor •() → self::I2*
+  field core::int y;
+  synthetic constructor •() → self::I2
     ;
 }
 class A extends core::Object {
-  final field self::I1* a;
-  synthetic constructor •() → self::A*
+  final field self::I1 a;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  final field self::I2* a;
-  synthetic constructor •() → self::B*
+  final field self::I2 a;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C1 extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     ;
-  get a() → self::I2*
+  get a() → self::I2
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends core::Object implements self::B, self::A {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     ;
-  get a() → self::I2*
+  get a() → self::I2
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.transformed.expect
index edd05fe..7d8ad6a 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.transformed.expect
@@ -1,93 +1,43 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::I1*
+  field core::int x = 0;
+  synthetic constructor •() → self::I1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I2 extends self::I1 {
-  field core::int* y = null;
-  synthetic constructor •() → self::I2*
+  field core::int y = 0;
+  synthetic constructor •() → self::I2
     : super self::I1::•()
     ;
 }
 class A extends core::Object {
-  final field self::I1* a = null;
-  synthetic constructor •() → self::A*
+  final field self::I1 a = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  final field self::I2* a = null;
-  synthetic constructor •() → self::B*
+  final field self::I2 a = throw "";
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C1 extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  get a() → self::I2*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get a() → self::I2
+    return throw "";
 }
 class C2 extends core::Object implements self::B, self::A {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
-  get a() → self::I2*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get a() → self::I2
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart
index 6ff6859..5b0d48a 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart
@@ -1,37 +1,37 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class I1 {
-  int x;
+  int x = 0;
 }
 
 class I2 {
-  int y;
+  int y = 0;
 }
 
 class I3 implements I1, I2 {
-  int x;
-  int y;
+  int x = 0;
+  int y = 0;
 }
 
 class A {
-  final I1 a = null;
+  final I1 a = throw '';
 }
 
 class B {
-  final I2 a = null;
+  final I2 a = throw '';
 }
 
 class C1 implements A, B {
-  I3 get a => null;
+  I3 get a => throw '';
 }
 
 class C2 implements A, B {
-  get a => null;
+  get a => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.textual_outline.expect
index 479d804..f30c906 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.textual_outline.expect
@@ -1,33 +1,32 @@
-// @dart = 2.9
 library test;
 
 class I1 {
-  int x;
+  int x = 0;
 }
 
 class I2 {
-  int y;
+  int y = 0;
 }
 
 class I3 implements I1, I2 {
-  int x;
-  int y;
+  int x = 0;
+  int y = 0;
 }
 
 class A {
-  final I1 a = null;
+  final I1 a = throw '';
 }
 
 class B {
-  final I2 a = null;
+  final I2 a = throw '';
 }
 
 class C1 implements A, B {
-  I3 get a => null;
+  I3 get a => throw '';
 }
 
 class C2 implements A, B {
-  get a => null;
+  get a => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.textual_outline_modelled.expect
index 5fe5310..8311ec9 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.textual_outline_modelled.expect
@@ -1,33 +1,32 @@
-// @dart = 2.9
 library test;
 
 class A {
-  final I1 a = null;
+  final I1 a = throw '';
 }
 
 class B {
-  final I2 a = null;
+  final I2 a = throw '';
 }
 
 class C1 implements A, B {
-  I3 get a => null;
+  I3 get a => throw '';
 }
 
 class C2 implements A, B {
-  get a => null;
+  get a => throw '';
 }
 
 class I1 {
-  int x;
+  int x = 0;
 }
 
 class I2 {
-  int y;
+  int y = 0;
 }
 
 class I3 implements I1, I2 {
-  int x;
-  int y;
+  int x = 0;
+  int y = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.expect
index f8a6f85..77e67b6 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.expect
@@ -1,134 +1,64 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
-//   get a => null;
+//   get a => throw '';
 //       ^
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the overridden members.
-//   final I1 a = null;
+//   final I1 a = throw '';
 //            ^
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the overridden members.
-//   final I2 a = null;
+//   final I2 a = throw '';
 //            ^
 //
 import self as self;
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::I1*
+  field core::int x = 0;
+  synthetic constructor •() → self::I1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I2 extends core::Object {
-  field core::int* y = null;
-  synthetic constructor •() → self::I2*
+  field core::int y = 0;
+  synthetic constructor •() → self::I2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I3 extends core::Object implements self::I1, self::I2 {
-  field core::int* x = null;
-  field core::int* y = null;
-  synthetic constructor •() → self::I3*
+  field core::int x = 0;
+  field core::int y = 0;
+  synthetic constructor •() → self::I3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  final field self::I1* a = null;
-  synthetic constructor •() → self::A*
+  final field self::I1 a = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  final field self::I2* a = null;
-  synthetic constructor •() → self::B*
+  final field self::I2 a = throw "";
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C1 extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  get a() → self::I3*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get a() → self::I3
+    return throw "";
 }
 class C2 extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
   get a() → invalid-type
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.modular.expect
index f8a6f85..77e67b6 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.modular.expect
@@ -1,134 +1,64 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
-//   get a => null;
+//   get a => throw '';
 //       ^
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the overridden members.
-//   final I1 a = null;
+//   final I1 a = throw '';
 //            ^
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the overridden members.
-//   final I2 a = null;
+//   final I2 a = throw '';
 //            ^
 //
 import self as self;
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::I1*
+  field core::int x = 0;
+  synthetic constructor •() → self::I1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I2 extends core::Object {
-  field core::int* y = null;
-  synthetic constructor •() → self::I2*
+  field core::int y = 0;
+  synthetic constructor •() → self::I2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I3 extends core::Object implements self::I1, self::I2 {
-  field core::int* x = null;
-  field core::int* y = null;
-  synthetic constructor •() → self::I3*
+  field core::int x = 0;
+  field core::int y = 0;
+  synthetic constructor •() → self::I3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  final field self::I1* a = null;
-  synthetic constructor •() → self::A*
+  final field self::I1 a = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  final field self::I2* a = null;
-  synthetic constructor •() → self::B*
+  final field self::I2 a = throw "";
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C1 extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  get a() → self::I3*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get a() → self::I3
+    return throw "";
 }
 class C2 extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
   get a() → invalid-type
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.outline.expect
index 19f0100..24991ea 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.outline.expect
@@ -1,128 +1,58 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
-//   get a => null;
+//   get a => throw '';
 //       ^
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the overridden members.
-//   final I1 a = null;
+//   final I1 a = throw '';
 //            ^
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the overridden members.
-//   final I2 a = null;
+//   final I2 a = throw '';
 //            ^
 //
 import self as self;
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::I1*
+  field core::int x;
+  synthetic constructor •() → self::I1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I2 extends core::Object {
-  field core::int* y;
-  synthetic constructor •() → self::I2*
+  field core::int y;
+  synthetic constructor •() → self::I2
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I3 extends core::Object implements self::I1, self::I2 {
-  field core::int* x;
-  field core::int* y;
-  synthetic constructor •() → self::I3*
+  field core::int x;
+  field core::int y;
+  synthetic constructor •() → self::I3
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  final field self::I1* a;
-  synthetic constructor •() → self::A*
+  final field self::I1 a;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  final field self::I2* a;
-  synthetic constructor •() → self::B*
+  final field self::I2 a;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C1 extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     ;
-  get a() → self::I3*
+  get a() → self::I3
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     ;
   get a() → invalid-type
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.transformed.expect
index f8a6f85..77e67b6 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.transformed.expect
@@ -1,134 +1,64 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
-//   get a => null;
+//   get a => throw '';
 //       ^
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the overridden members.
-//   final I1 a = null;
+//   final I1 a = throw '';
 //            ^
 // pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the overridden members.
-//   final I2 a = null;
+//   final I2 a = throw '';
 //            ^
 //
 import self as self;
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::I1*
+  field core::int x = 0;
+  synthetic constructor •() → self::I1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I2 extends core::Object {
-  field core::int* y = null;
-  synthetic constructor •() → self::I2*
+  field core::int y = 0;
+  synthetic constructor •() → self::I2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I3 extends core::Object implements self::I1, self::I2 {
-  field core::int* x = null;
-  field core::int* y = null;
-  synthetic constructor •() → self::I3*
+  field core::int x = 0;
+  field core::int y = 0;
+  synthetic constructor •() → self::I3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  final field self::I1* a = null;
-  synthetic constructor •() → self::A*
+  final field self::I1 a = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  final field self::I2* a = null;
-  synthetic constructor •() → self::B*
+  final field self::I2 a = throw "";
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C1 extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
-  get a() → self::I3*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get a() → self::I3
+    return throw "";
 }
 class C2 extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
   get a() → invalid-type
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart
index f5ab537..a2fdcfc 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -12,5 +12,5 @@
 class Foo<T extends A> {}
 
 void main() {
-  Foo<B> foo = new /*@ typeArgs=B* */ Foo();
+  Foo<B> foo = new /*@typeArgs=B*/ Foo();
 }
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.textual_outline.expect
index d0e5e69..3317fee 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {}
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.textual_outline_modelled.expect
index d0e5e69..3317fee 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {}
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.expect
index 7a1c1c0..c59de4a 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.expect
@@ -1,42 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class Foo<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+class Foo<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  self::Foo<self::B*>* foo = new self::Foo::•<self::B*>();
+  self::Foo<self::B> foo = new self::Foo::•<self::B>();
 }
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.modular.expect
index 7a1c1c0..c59de4a 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.modular.expect
@@ -1,42 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class Foo<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+class Foo<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  self::Foo<self::B*>* foo = new self::Foo::•<self::B*>();
+  self::Foo<self::B> foo = new self::Foo::•<self::B>();
 }
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.outline.expect
index 3f5622c..fc7299c 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
-class Foo<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+class Foo<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.transformed.expect
index 7a1c1c0..c59de4a 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.transformed.expect
@@ -1,42 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class Foo<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+class Foo<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  self::Foo<self::B*>* foo = new self::Foo::•<self::B*>();
+  self::Foo<self::B> foo = new self::Foo::•<self::B>();
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart
index de8faf4..d64cd7d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,18 +13,18 @@
 }
 
 test() {
-  var /*@ type=C<int*>* */ x = new /*@ typeArgs=int* */ C(42);
+  var /*@type=C<int*>**/ x = new /*@typeArgs=int**/ C(42);
 
   num y;
-  C<int> c_int = new /*@ typeArgs=int* */ C(
+  C<int> c_int = new /*@typeArgs=int**/ C(
       /*info:DOWN_CAST_IMPLICIT*/ y);
 
   // These hints are not reported because we resolve with a null error listener.
-  C<num> c_num = new /*@ typeArgs=num* */ C(123);
-  C<num> c_num2 = (new /*@ typeArgs=num* */ C(456)).. /*@target=C.t*/ t = 1.0;
+  C<num> c_num = new /*@typeArgs=num**/ C(123);
+  C<num> c_num2 = (new /*@typeArgs=num**/ C(456)).. /*@target=C.t*/ t = 1.0;
 
   // Don't infer from explicit dynamic.
-  var /*@ type=C<dynamic>* */ c_dynamic = new C<dynamic>(42);
+  var /*@type=C<dynamic>**/ c_dynamic = new C<dynamic>(42);
   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
 }
 
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.expect
index 1797fc0..6b104ea 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:28:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
 //                                                       ^
 //
@@ -34,7 +34,7 @@
     #t1.{self::C::t} = 1.0;
   } =>#t1;
   self::C<dynamic>* c_dynamic = new self::C::•<dynamic>(42);
-  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:28:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
                                                       ^" in "hello" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.modular.expect
index 1797fc0..6b104ea 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.modular.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:28:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
 //                                                       ^
 //
@@ -34,7 +34,7 @@
     #t1.{self::C::t} = 1.0;
   } =>#t1;
   self::C<dynamic>* c_dynamic = new self::C::•<dynamic>(42);
-  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:28:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
                                                       ^" in "hello" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.transformed.expect
index 1797fc0..6b104ea 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:28:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
 //                                                       ^
 //
@@ -34,7 +34,7 @@
     #t1.{self::C::t} = 1.0;
   } =>#t1;
   self::C<dynamic>* c_dynamic = new self::C::•<dynamic>(42);
-  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:28:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
                                                       ^" in "hello" as{TypeError} core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart
new file mode 100644
index 0000000..54da6da
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart
@@ -0,0 +1,27 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class C<T> {
+  T t;
+  C(this.t);
+}
+
+test(num y) {
+  var /*@type=C<int>*/ x = new /*@typeArgs=int*/ C(42);
+
+  C<int> c_int = new /*@typeArgs=int*/ C(/*info:DOWN_CAST_IMPLICIT*/ y);
+
+  // These hints are not reported because we resolve with a null error listener.
+  C<num> c_num = new /*@typeArgs=num*/ C(123);
+  C<num> c_num2 = (new /*@typeArgs=num*/ C(456)).. /*@target=C.t*/ t = 1.0;
+
+  // Don't infer from explicit dynamic.
+  var /*@type=C<dynamic>*/ c_dynamic = new C<dynamic>(42);
+  x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.textual_outline.expect
new file mode 100644
index 0000000..49b5d23
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+library test;
+
+class C<T> {
+  T t;
+  C(this.t);
+}
+
+test(num y) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..968dbe1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+library test;
+
+class C<T> {
+  C(this.t);
+  T t;
+}
+
+main() {}
+test(num y) {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.weak.expect
new file mode 100644
index 0000000..ef07c38
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.weak.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart:16:70: Error: The argument type 'num' can't be assigned to the parameter type 'int'.
+//   C<int> c_int = new /*@typeArgs=int*/ C(/*info:DOWN_CAST_IMPLICIT*/ y);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart:24:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+//                                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% t;
+  constructor •(self::C::T% t) → self::C<self::C::T%>
+    : self::C::t = t, super core::Object::•()
+    ;
+}
+static method test(core::num y) → dynamic {
+  self::C<core::int> x = new self::C::•<core::int>(42);
+  self::C<core::int> c_int = new self::C::•<core::int>(invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart:16:70: Error: The argument type 'num' can't be assigned to the parameter type 'int'.
+  C<int> c_int = new /*@typeArgs=int*/ C(/*info:DOWN_CAST_IMPLICIT*/ y);
+                                                                     ^" in y as{TypeError,ForNonNullableByDefault} core::int);
+  self::C<core::num> c_num = new self::C::•<core::num>(123);
+  self::C<core::num> c_num2 = let final self::C<core::num> #t1 = new self::C::•<core::num>(456) in block {
+    #t1.{self::C::t} = 1.0;
+  } =>#t1;
+  self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
+  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart:24:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+                                                      ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.weak.modular.expect
new file mode 100644
index 0000000..ef07c38
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart:16:70: Error: The argument type 'num' can't be assigned to the parameter type 'int'.
+//   C<int> c_int = new /*@typeArgs=int*/ C(/*info:DOWN_CAST_IMPLICIT*/ y);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart:24:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+//                                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% t;
+  constructor •(self::C::T% t) → self::C<self::C::T%>
+    : self::C::t = t, super core::Object::•()
+    ;
+}
+static method test(core::num y) → dynamic {
+  self::C<core::int> x = new self::C::•<core::int>(42);
+  self::C<core::int> c_int = new self::C::•<core::int>(invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart:16:70: Error: The argument type 'num' can't be assigned to the parameter type 'int'.
+  C<int> c_int = new /*@typeArgs=int*/ C(/*info:DOWN_CAST_IMPLICIT*/ y);
+                                                                     ^" in y as{TypeError,ForNonNullableByDefault} core::int);
+  self::C<core::num> c_num = new self::C::•<core::num>(123);
+  self::C<core::num> c_num2 = let final self::C<core::num> #t1 = new self::C::•<core::num>(456) in block {
+    #t1.{self::C::t} = 1.0;
+  } =>#t1;
+  self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
+  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart:24:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+                                                      ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.weak.outline.expect
new file mode 100644
index 0000000..356ef17
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.weak.outline.expect
@@ -0,0 +1,13 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% t;
+  constructor •(self::C::T% t) → self::C<self::C::T%>
+    ;
+}
+static method test(core::num y) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.weak.transformed.expect
new file mode 100644
index 0000000..ef07c38
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart.weak.transformed.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart:16:70: Error: The argument type 'num' can't be assigned to the parameter type 'int'.
+//   C<int> c_int = new /*@typeArgs=int*/ C(/*info:DOWN_CAST_IMPLICIT*/ y);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart:24:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+//                                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% t;
+  constructor •(self::C::T% t) → self::C<self::C::T%>
+    : self::C::t = t, super core::Object::•()
+    ;
+}
+static method test(core::num y) → dynamic {
+  self::C<core::int> x = new self::C::•<core::int>(42);
+  self::C<core::int> c_int = new self::C::•<core::int>(invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart:16:70: Error: The argument type 'num' can't be assigned to the parameter type 'int'.
+  C<int> c_int = new /*@typeArgs=int*/ C(/*info:DOWN_CAST_IMPLICIT*/ y);
+                                                                     ^" in y as{TypeError,ForNonNullableByDefault} core::int);
+  self::C<core::num> c_num = new self::C::•<core::num>(123);
+  self::C<core::num> c_num2 = let final self::C<core::num> #t1 = new self::C::•<core::num>(456) in block {
+    #t1.{self::C::t} = 1.0;
+  } =>#t1;
+  self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
+  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments2.dart:24:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+                                                      ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart
index 44b6475..5b49250 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -15,9 +15,9 @@
 
 class NotA {}
 
-NotA myF() => null;
+NotA myF() => throw '';
 
-main() {
-  var /*@ type=C<NotA*>* */ x =
-      new /*error:COULD_NOT_INFER*/ /*@ typeArgs=NotA* */ C(myF);
+test() {
+  var /*@type=C<NotA>*/ x =
+      new /*error:COULD_NOT_INFER*/ /*@typeArgs=NotA*/ C(myF);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.textual_outline.expect
index fba7458..ffc529d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {}
@@ -11,5 +10,5 @@
 
 class NotA {}
 
-NotA myF() => null;
-main() {}
+NotA myF() => throw '';
+test() {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.textual_outline_modelled.expect
index 3ea62c0..2220411 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-NotA myF() => null;
+NotA myF() => throw '';
 
 class A {}
 
@@ -11,5 +10,5 @@
 
 class NotA {}
 
-main() {}
+test() {}
 typedef T F<T>();
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.expect
index cdeaa48..6c16b75 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:22:59: Error: Inferred type argument 'NotA' doesn't conform to the bound 'A' of the type variable 'T' on 'C'.
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:22:56: Error: Inferred type argument 'NotA' doesn't conform to the bound 'A' of the type variable 'T' on 'C'.
 //  - 'NotA' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//       new /*error:COULD_NOT_INFER*/ /*@ typeArgs=NotA* */ C(myF);
-//                                                           ^
+//       new /*error:COULD_NOT_INFER*/ /*@typeArgs=NotA*/ C(myF);
+//                                                        ^
 // pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:12:9: Context: This is the type variable whose bound isn't conformed to.
 // class C<T extends A> {
 //         ^
@@ -15,56 +15,26 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object* = dynamic> = () →* T*;
+typedef F<T extends core::Object? = dynamic> = () → T%;
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends self::A*> extends core::Object {
-  constructor •(() →* self::C::T* f) → self::C<self::C::T*>*
+class C<T extends self::A> extends core::Object {
+  constructor •(() → self::C::T f) → self::C<self::C::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NotA extends core::Object {
-  synthetic constructor •() → self::NotA*
+  synthetic constructor •() → self::NotA
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method myF() → self::NotA*
-  return null;
-static method main() → dynamic {
-  self::C<self::NotA*>* x = new self::C::•<self::NotA*>(#C1);
+static method myF() → self::NotA
+  return throw "";
+static method test() → dynamic {
+  self::C<self::NotA> x = new self::C::•<self::NotA>(#C1);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.modular.expect
index cdeaa48..6c16b75 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:22:59: Error: Inferred type argument 'NotA' doesn't conform to the bound 'A' of the type variable 'T' on 'C'.
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:22:56: Error: Inferred type argument 'NotA' doesn't conform to the bound 'A' of the type variable 'T' on 'C'.
 //  - 'NotA' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//       new /*error:COULD_NOT_INFER*/ /*@ typeArgs=NotA* */ C(myF);
-//                                                           ^
+//       new /*error:COULD_NOT_INFER*/ /*@typeArgs=NotA*/ C(myF);
+//                                                        ^
 // pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:12:9: Context: This is the type variable whose bound isn't conformed to.
 // class C<T extends A> {
 //         ^
@@ -15,56 +15,26 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object* = dynamic> = () →* T*;
+typedef F<T extends core::Object? = dynamic> = () → T%;
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends self::A*> extends core::Object {
-  constructor •(() →* self::C::T* f) → self::C<self::C::T*>*
+class C<T extends self::A> extends core::Object {
+  constructor •(() → self::C::T f) → self::C<self::C::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NotA extends core::Object {
-  synthetic constructor •() → self::NotA*
+  synthetic constructor •() → self::NotA
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method myF() → self::NotA*
-  return null;
-static method main() → dynamic {
-  self::C<self::NotA*>* x = new self::C::•<self::NotA*>(#C1);
+static method myF() → self::NotA
+  return throw "";
+static method test() → dynamic {
+  self::C<self::NotA> x = new self::C::•<self::NotA>(#C1);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.outline.expect
index 9a32b9b..611f557 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.outline.expect
@@ -1,51 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object* = dynamic> = () →* T*;
+typedef F<T extends core::Object? = dynamic> = () → T%;
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends self::A*> extends core::Object {
-  constructor •(() →* self::C::T* f) → self::C<self::C::T*>*
+class C<T extends self::A> extends core::Object {
+  constructor •(() → self::C::T f) → self::C<self::C::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NotA extends core::Object {
-  synthetic constructor •() → self::NotA*
+  synthetic constructor •() → self::NotA
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method myF() → self::NotA*
+static method myF() → self::NotA
   ;
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart
index e6e973c..873d63e 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,5 +11,5 @@
 }
 
 main() {
-  var /*@ type=C<int*>* */ x = const /*@ typeArgs=int* */ C(42);
+  var /*@type=C<int>*/ x = const /*@typeArgs=int*/ C(42);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.textual_outline.expect
index e0d78b7..a3c6d99 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.textual_outline_modelled.expect
index 860ec7c..5d6c509 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.expect
index 5cf994f..1d13d5d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  final field self::C::T* t;
-  const constructor •(self::C::T* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field self::C::T% t;
+  const constructor •(self::C::T% t) → self::C<self::C::T%>
     : self::C::t = t, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = #C2;
+  self::C<core::int> x = #C2;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.modular.expect
index 5cf994f..1d13d5d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  final field self::C::T* t;
-  const constructor •(self::C::T* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field self::C::T% t;
+  const constructor •(self::C::T% t) → self::C<self::C::T%>
     : self::C::t = t, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = #C2;
+  self::C<core::int> x = #C2;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.outline.expect
index e1b38bd..601c5d1 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  final field self::C::T* t;
-  const constructor •(self::C::T* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field self::C::T% t;
+  const constructor •(self::C::T% t) → self::C<self::C::T%>
     : self::C::t = t, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.transformed.expect
index 5cf994f..1d13d5d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  final field self::C::T* t;
-  const constructor •(self::C::T* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field self::C::T% t;
+  const constructor •(self::C::T% t) → self::C<self::C::T%>
     : self::C::t = t, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = #C2;
+  self::C<core::int> x = #C2;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart
index e40dbdd..ca876a5 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -15,7 +15,7 @@
 }
 
 void main() {
-  const /*@ type=C<int*>* */ c = const /*@ typeArgs=int* */ C(0);
+  const /*@type=C<int>*/ c = const /*@typeArgs=int*/ C(0);
   C<int> c2 = c;
-  const D<int> d = const /*@ typeArgs=int* */ D();
+  const D<int> d = const /*@typeArgs=int*/ D();
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.textual_outline.expect
index 901fea0..228e705 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T extends num> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.textual_outline_modelled.expect
index 81054ee..df658a6 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T extends num> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.expect
index c79ff6d..6b607e5 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num*> extends core::Object /*hasConstConstructor*/  {
-  final field self::C::T* x;
-  const constructor •(self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::num> extends core::Object /*hasConstConstructor*/  {
+  final field self::C::T x;
+  const constructor •(self::C::T x) → self::C<self::C::T>
     : self::C::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<T extends core::num*> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::D<self::D::T*>*
+class D<T extends core::num> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::D<self::D::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  self::C<core::int*>* c2 = #C2;
+  self::C<core::int> c2 = #C2;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.modular.expect
index c79ff6d..6b607e5 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.modular.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num*> extends core::Object /*hasConstConstructor*/  {
-  final field self::C::T* x;
-  const constructor •(self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::num> extends core::Object /*hasConstConstructor*/  {
+  final field self::C::T x;
+  const constructor •(self::C::T x) → self::C<self::C::T>
     : self::C::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<T extends core::num*> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::D<self::D::T*>*
+class D<T extends core::num> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::D<self::D::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  self::C<core::int*>* c2 = #C2;
+  self::C<core::int> c2 = #C2;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.outline.expect
index 0b30da0d..6bdc87c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.outline.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num*> extends core::Object /*hasConstConstructor*/  {
-  final field self::C::T* x;
-  const constructor •(self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::num> extends core::Object /*hasConstConstructor*/  {
+  final field self::C::T x;
+  const constructor •(self::C::T x) → self::C<self::C::T>
     : self::C::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<T extends core::num*> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::D<self::D::T*>*
+class D<T extends core::num> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::D<self::D::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.transformed.expect
index c79ff6d..6b607e5 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.transformed.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num*> extends core::Object /*hasConstConstructor*/  {
-  final field self::C::T* x;
-  const constructor •(self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::num> extends core::Object /*hasConstConstructor*/  {
+  final field self::C::T x;
+  const constructor •(self::C::T x) → self::C<self::C::T>
     : self::C::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<T extends core::num*> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::D<self::D::T*>*
+class D<T extends core::num> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::D<self::D::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  self::C<core::int*>* c2 = #C2;
+  self::C<core::int> c2 = #C2;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart
index 80b1454..df712d2 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,11 +10,11 @@
 }
 
 main() {
-  var /*@ type=C<int*>* */ x = new /*@ typeArgs=int* */ C(/*@ typeArgs=int* */ [123]);
+  var /*@type=C<int>*/ x = new /*@typeArgs=int*/ C(/*@typeArgs=int*/ [123]);
   C<int> y = x;
 
-  var /*@ type=C<dynamic>* */ a = new C<dynamic>(/*@ typeArgs=dynamic */ [123]);
+  var /*@type=C<dynamic>*/ a = new C<dynamic>(/*@ typeArgs=dynamic */ [123]);
 
   // This one however works.
-  var /*@ type=C<Object*>* */ b = new C<Object>(/*@ typeArgs=Object* */ [123]);
+  var /*@type=C<Object>*/ b = new C<Object>(/*@typeArgs=Object*/ [123]);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.textual_outline.expect
index ca0af4f..af80416 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.textual_outline_modelled.expect
index ca0af4f..af80416 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.expect
index 760a01e..33cea17 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::List<self::C::T*>* list) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::List<self::C::T%> list) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = new self::C::•<core::int*>(<core::int*>[123]);
-  self::C<core::int*>* y = x;
-  self::C<dynamic>* a = new self::C::•<dynamic>(<dynamic>[123]);
-  self::C<core::Object*>* b = new self::C::•<core::Object*>(<core::Object*>[123]);
+  self::C<core::int> x = new self::C::•<core::int>(<core::int>[123]);
+  self::C<core::int> y = x;
+  self::C<dynamic> a = new self::C::•<dynamic>(<dynamic>[123]);
+  self::C<core::Object> b = new self::C::•<core::Object>(<core::Object>[123]);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.modular.expect
index 760a01e..33cea17 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::List<self::C::T*>* list) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::List<self::C::T%> list) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = new self::C::•<core::int*>(<core::int*>[123]);
-  self::C<core::int*>* y = x;
-  self::C<dynamic>* a = new self::C::•<dynamic>(<dynamic>[123]);
-  self::C<core::Object*>* b = new self::C::•<core::Object*>(<core::Object*>[123]);
+  self::C<core::int> x = new self::C::•<core::int>(<core::int>[123]);
+  self::C<core::int> y = x;
+  self::C<dynamic> a = new self::C::•<dynamic>(<dynamic>[123]);
+  self::C<core::Object> b = new self::C::•<core::Object>(<core::Object>[123]);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.outline.expect
index 80c12d2..17babf4 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::List<self::C::T*>* list) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::List<self::C::T%> list) → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.transformed.expect
index 48ed791..4449734 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::List<self::C::T*>* list) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::List<self::C::T%> list) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = new self::C::•<core::int*>(core::_GrowableList::_literal1<core::int*>(123));
-  self::C<core::int*>* y = x;
-  self::C<dynamic>* a = new self::C::•<dynamic>(core::_GrowableList::_literal1<dynamic>(123));
-  self::C<core::Object*>* b = new self::C::•<core::Object*>(core::_GrowableList::_literal1<core::Object*>(123));
+  self::C<core::int> x = new self::C::•<core::int>(core::_GrowableList::_literal1<core::int>(123));
+  self::C<core::int> y = x;
+  self::C<dynamic> a = new self::C::•<dynamic>(core::_GrowableList::_literal1<dynamic>(123));
+  self::C<core::Object> b = new self::C::•<core::Object>(core::_GrowableList::_literal1<core::Object>(123));
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart
index c90e241..3971b9c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart
@@ -1,25 +1,25 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C<T> {
-  T t;
+  T? t;
 
   C._();
 
   factory C(T t) {
-    var /*@ type=C<C::•::T*>* */ x = new C<T>._();
-    t = t;
+    var /*@type=C<C::•::T%>*/ x = new C<T>._();
+    x. /*@target=C.t*/ t = t;
     return x;
   }
 }
 
 test() {
-  var /*@ type=C<int*>* */ x = new /*@ typeArgs=int* */ C(42);
-  t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+  var /*@type=C<int>*/ x = new /*@typeArgs=int*/ C(42);
+  x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.textual_outline.expect
index 8a2b0f1..90f02bb 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
-  T t;
+  T? t;
   C._();
   factory C(T t) {}
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.textual_outline_modelled.expect
index ea74ff0..c4ff4f4 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
   C._();
-  T t;
+  T? t;
   factory C(T t) {}
 }
 
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.expect
index 32c7a0d..1c335e1 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.expect
@@ -1,39 +1,29 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:3: Error: Setter not found: 't'.
-//   t = /*error:INVALID_ASSIGNMENT*/ 'hello';
-//   ^
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:55: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+//                                                       ^
 //
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t = null;
-  constructor _() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? t = null;
+  constructor _() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>* {
-    self::C<self::C::•::T*>* x = new self::C::_<self::C::•::T*>();
-    t = t;
+  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%> {
+    self::C<self::C::•::T%> x = new self::C::_<self::C::•::T%>();
+    x.{self::C::t} = t;
     return x;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  self::C<core::int*>* x = self::C::•<core::int*>(42);
-  invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:3: Error: Setter not found: 't'.
-  t = /*error:INVALID_ASSIGNMENT*/ 'hello';
-  ^";
+  self::C<core::int> x = self::C::•<core::int>(42);
+  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:55: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+                                                      ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int?;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.modular.expect
index 32c7a0d..1c335e1 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.modular.expect
@@ -1,39 +1,29 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:3: Error: Setter not found: 't'.
-//   t = /*error:INVALID_ASSIGNMENT*/ 'hello';
-//   ^
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:55: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+//                                                       ^
 //
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t = null;
-  constructor _() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? t = null;
+  constructor _() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>* {
-    self::C<self::C::•::T*>* x = new self::C::_<self::C::•::T*>();
-    t = t;
+  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%> {
+    self::C<self::C::•::T%> x = new self::C::_<self::C::•::T%>();
+    x.{self::C::t} = t;
     return x;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  self::C<core::int*>* x = self::C::•<core::int*>(42);
-  invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:3: Error: Setter not found: 't'.
-  t = /*error:INVALID_ASSIGNMENT*/ 'hello';
-  ^";
+  self::C<core::int> x = self::C::•<core::int>(42);
+  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:55: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+                                                      ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int?;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.outline.expect
index 6553bf2..875bfab 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t;
-  constructor _() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? t;
+  constructor _() → self::C<self::C::T%>
     ;
-  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
+  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.transformed.expect
index 32c7a0d..1c335e1 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.transformed.expect
@@ -1,39 +1,29 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:3: Error: Setter not found: 't'.
-//   t = /*error:INVALID_ASSIGNMENT*/ 'hello';
-//   ^
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:55: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+//                                                       ^
 //
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t = null;
-  constructor _() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? t = null;
+  constructor _() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>* {
-    self::C<self::C::•::T*>* x = new self::C::_<self::C::•::T*>();
-    t = t;
+  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%> {
+    self::C<self::C::•::T%> x = new self::C::_<self::C::•::T%>();
+    x.{self::C::t} = t;
     return x;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  self::C<core::int*>* x = self::C::•<core::int*>(42);
-  invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:3: Error: Setter not found: 't'.
-  t = /*error:INVALID_ASSIGNMENT*/ 'hello';
-  ^";
+  self::C<core::int> x = self::C::•<core::int>(42);
+  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:55: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+                                                      ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int?;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart
index 1e23664..e2954a9 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A<T> {
-  A<T> f = new /*@ typeArgs=A::T* */ A();
+  A<T> f = new /*@typeArgs=A::T%*/ A();
   A();
-  factory A.factory() => new /*@ typeArgs=A::factory::T* */ A();
-  A<T> m() => new /*@ typeArgs=A::T* */ A();
+  factory A.factory() => new /*@typeArgs=A::factory::T%*/ A();
+  A<T> m() => new /*@typeArgs=A::T%*/ A();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.textual_outline.expect
index 717b03c..e3c1708 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.textual_outline_modelled.expect
index 0cfefa2..2f3f4f5 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.expect
index ba0e34d..e3935c7 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A<self::A::T*>* f = new self::A::•<self::A::T*>();
-  constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A<self::A::T%> f = new self::A::•<self::A::T%>();
+  constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  static factory factory<T extends core::Object* = dynamic>() → self::A<self::A::factory::T*>*
-    return new self::A::•<self::A::factory::T*>();
-  method m() → self::A<self::A::T*>*
-    return new self::A::•<self::A::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory factory<T extends core::Object? = dynamic>() → self::A<self::A::factory::T%>
+    return new self::A::•<self::A::factory::T%>();
+  method m() → self::A<self::A::T%>
+    return new self::A::•<self::A::T%>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.modular.expect
index ba0e34d..e3935c7 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A<self::A::T*>* f = new self::A::•<self::A::T*>();
-  constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A<self::A::T%> f = new self::A::•<self::A::T%>();
+  constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  static factory factory<T extends core::Object* = dynamic>() → self::A<self::A::factory::T*>*
-    return new self::A::•<self::A::factory::T*>();
-  method m() → self::A<self::A::T*>*
-    return new self::A::•<self::A::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory factory<T extends core::Object? = dynamic>() → self::A<self::A::factory::T%>
+    return new self::A::•<self::A::factory::T%>();
+  method m() → self::A<self::A::T%>
+    return new self::A::•<self::A::T%>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.outline.expect
index 72615ce..27d253d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A<self::A::T*>* f;
-  constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A<self::A::T%> f;
+  constructor •() → self::A<self::A::T%>
     ;
-  static factory factory<T extends core::Object* = dynamic>() → self::A<self::A::factory::T*>*
+  static factory factory<T extends core::Object? = dynamic>() → self::A<self::A::factory::T%>
     ;
-  method m() → self::A<self::A::T*>*
+  method m() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.transformed.expect
index ba0e34d..e3935c7 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A<self::A::T*>* f = new self::A::•<self::A::T*>();
-  constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A<self::A::T%> f = new self::A::•<self::A::T%>();
+  constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  static factory factory<T extends core::Object* = dynamic>() → self::A<self::A::factory::T*>*
-    return new self::A::•<self::A::factory::T*>();
-  method m() → self::A<self::A::T*>*
-    return new self::A::•<self::A::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory factory<T extends core::Object? = dynamic>() → self::A<self::A::factory::T%>
+    return new self::A::•<self::A::factory::T%>();
+  method m() → self::A<self::A::T%>
+    return new self::A::•<self::A::T%>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart
index 2ad9bf8..e7e4dba 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart
@@ -1,15 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C<T> {
-  T t;
   C.named(List<T> t);
 }
 
 main() {
-  var /*@ type=C<int*>* */ x = new /*@ typeArgs=int* */ C.named(<int>[]);
+  var /*@type=C<int>*/ x = new /*@typeArgs=int*/ C.named(<int>[]);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.textual_outline.expect
index 0d236fee..fb42f63 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.textual_outline.expect
@@ -1,8 +1,6 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
-  T t;
   C.named(List<T> t);
 }
 
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.textual_outline_modelled.expect
index ba064ef..fb42f63 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.textual_outline_modelled.expect
@@ -1,9 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
   C.named(List<T> t);
-  T t;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.expect
index adf0647..a4bb3ba 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.expect
@@ -1,23 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t = null;
-  constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor named(core::List<self::C::T%> t) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = new self::C::named<core::int*>(<core::int*>[]);
+  self::C<core::int> x = new self::C::named<core::int>(<core::int>[]);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.modular.expect
index adf0647..a4bb3ba 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.modular.expect
@@ -1,23 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t = null;
-  constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor named(core::List<self::C::T%> t) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = new self::C::named<core::int*>(<core::int*>[]);
+  self::C<core::int> x = new self::C::named<core::int>(<core::int>[]);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.outline.expect
index 20b7987..a9b6283 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.outline.expect
@@ -1,21 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t;
-  constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor named(core::List<self::C::T%> t) → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.transformed.expect
index dda1a71..6f0a3c9 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.transformed.expect
@@ -1,23 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t = null;
-  constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor named(core::List<self::C::T%> t) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = new self::C::named<core::int*>(core::_GrowableList::•<core::int*>(0));
+  self::C<core::int> x = new self::C::named<core::int>(core::_GrowableList::•<core::int>(0));
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart
index cfa49e8..d4c86f5 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart
@@ -1,21 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C<T> {
-  T t;
+  T? t;
   C();
 
   factory C.named(T t) {
-    var /*@ type=C<C::named::T*>* */ x = new C<T>();
+    var /*@type=C<C::named::T%>*/ x = new C<T>();
     x. /*@target=C.t*/ t = t;
     return x;
   }
 }
 
 main() {
-  var /*@ type=C<int*>* */ x = new /*@ typeArgs=int* */ C.named(42);
+  var /*@type=C<int>*/ x = new /*@typeArgs=int*/ C.named(42);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.textual_outline.expect
index 4894a2a..c01c3cc 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
-  T t;
+  T? t;
   C();
   factory C.named(T t) {}
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.textual_outline_modelled.expect
index 5230dc3..ae1caeb 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
   C();
-  T t;
+  T? t;
   factory C.named(T t) {}
 }
 
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.expect
index c030443..0706981 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t = null;
-  constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? t = null;
+  constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static factory named<T extends core::Object* = dynamic>(self::C::named::T* t) → self::C<self::C::named::T*>* {
-    self::C<self::C::named::T*>* x = new self::C::•<self::C::named::T*>();
+  static factory named<T extends core::Object? = dynamic>(self::C::named::T% t) → self::C<self::C::named::T%> {
+    self::C<self::C::named::T%> x = new self::C::•<self::C::named::T%>();
     x.{self::C::t} = t;
     return x;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = self::C::named<core::int*>(42);
+  self::C<core::int> x = self::C::named<core::int>(42);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.modular.expect
index c030443..0706981 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t = null;
-  constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? t = null;
+  constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static factory named<T extends core::Object* = dynamic>(self::C::named::T* t) → self::C<self::C::named::T*>* {
-    self::C<self::C::named::T*>* x = new self::C::•<self::C::named::T*>();
+  static factory named<T extends core::Object? = dynamic>(self::C::named::T% t) → self::C<self::C::named::T%> {
+    self::C<self::C::named::T%> x = new self::C::•<self::C::named::T%>();
     x.{self::C::t} = t;
     return x;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = self::C::named<core::int*>(42);
+  self::C<core::int> x = self::C::named<core::int>(42);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.outline.expect
index 42a6d2b..7f16f7c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t;
-  constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? t;
+  constructor •() → self::C<self::C::T%>
     ;
-  static factory named<T extends core::Object* = dynamic>(self::C::named::T* t) → self::C<self::C::named::T*>*
+  static factory named<T extends core::Object? = dynamic>(self::C::named::T% t) → self::C<self::C::named::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.transformed.expect
index c030443..0706981 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.transformed.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t = null;
-  constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T? t = null;
+  constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static factory named<T extends core::Object* = dynamic>(self::C::named::T* t) → self::C<self::C::named::T*>* {
-    self::C<self::C::named::T*>* x = new self::C::•<self::C::named::T*>();
+  static factory named<T extends core::Object? = dynamic>(self::C::named::T% t) → self::C<self::C::named::T%> {
+    self::C<self::C::named::T%> x = new self::C::•<self::C::named::T%>();
     x.{self::C::t} = t;
     return x;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = self::C::named<core::int*>(42);
+  self::C<core::int> x = self::C::named<core::int>(42);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart
index 9f4c5f5..13a8145 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -12,5 +12,5 @@
 }
 
 main() {
-  var /*@ type=C<int*>* */ x = new /*@ typeArgs=int* */ C.named(<int>[42]);
+  var /*@type=C<int>*/ x = new /*@typeArgs=int*/ C.named(<int>[42]);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.textual_outline.expect
index cc112fa..ca7d831 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.textual_outline_modelled.expect
index 46dfa95..010a7db 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.expect
index b9202f7..32a214f 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t;
-  constructor •(self::C::T* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% t;
+  constructor •(self::C::T% t) → self::C<self::C::T%>
     : self::C::t = t, super core::Object::•()
     ;
-  constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
-    : this self::C::•(t.{core::List::[]}(0){(core::int*) →* self::C::T*})
+  constructor named(core::List<self::C::T%> t) → self::C<self::C::T%>
+    : this self::C::•(t.{core::List::[]}(0){(core::int) → self::C::T%})
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = new self::C::named<core::int*>(<core::int*>[42]);
+  self::C<core::int> x = new self::C::named<core::int>(<core::int>[42]);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.modular.expect
index b9202f7..32a214f 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t;
-  constructor •(self::C::T* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% t;
+  constructor •(self::C::T% t) → self::C<self::C::T%>
     : self::C::t = t, super core::Object::•()
     ;
-  constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
-    : this self::C::•(t.{core::List::[]}(0){(core::int*) →* self::C::T*})
+  constructor named(core::List<self::C::T%> t) → self::C<self::C::T%>
+    : this self::C::•(t.{core::List::[]}(0){(core::int) → self::C::T%})
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = new self::C::named<core::int*>(<core::int*>[42]);
+  self::C<core::int> x = new self::C::named<core::int>(<core::int>[42]);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.outline.expect
index 0424549..26641dd 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t;
-  constructor •(self::C::T* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% t;
+  constructor •(self::C::T% t) → self::C<self::C::T%>
     ;
-  constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
+  constructor named(core::List<self::C::T%> t) → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.transformed.expect
index f41db2a..896d4a9 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t;
-  constructor •(self::C::T* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% t;
+  constructor •(self::C::T% t) → self::C<self::C::T%>
     : self::C::t = t, super core::Object::•()
     ;
-  constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
-    : this self::C::•(t.{core::List::[]}(0){(core::int*) →* self::C::T*})
+  constructor named(core::List<self::C::T%> t) → self::C<self::C::T%>
+    : this self::C::•(t.{core::List::[]}(0){(core::int) → self::C::T%})
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = new self::C::named<core::int*>(core::_GrowableList::_literal1<core::int*>(42));
+  self::C<core::int> x = new self::C::named<core::int>(core::_GrowableList::_literal1<core::int>(42));
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart
index 9c530b1..da3d4db 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -18,5 +18,5 @@
 }
 
 main() {
-  var /*@ type=C<int*>* */ x = new /*@ typeArgs=int* */ C(42);
+  var /*@type=C<int>*/ x = new /*@typeArgs=int*/ C(42);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.textual_outline.expect
index a657987..86de0c0 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class C<T> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.textual_outline_modelled.expect
index dca6c03..8bc935e 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class C<T> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
index 7f8c3dd..3a5146c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
@@ -1,42 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  abstract get t() → self::C::T*;
-  abstract set t(covariant-by-class self::C::T* x) → void;
-  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    return new self::CImpl::•<self::C::•::T*>(t);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+abstract class C<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get t() → self::C::T%;
+  abstract set t(covariant-by-class self::C::T% x) → void;
+  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%>
+    return new self::CImpl::•<self::C::•::T%>(t);
 }
-class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  covariant-by-class field self::CImpl::T* t;
-  constructor •(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
+class CImpl<T extends core::Object? = dynamic> extends core::Object implements self::C<self::CImpl::T%> {
+  covariant-by-class field self::CImpl::T% t;
+  constructor •(self::CImpl::T% t) → self::CImpl<self::CImpl::T%>
     : self::CImpl::t = t, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = new self::CImpl::•<core::int*>(42);
+  self::C<core::int> x = new self::CImpl::•<core::int>(42);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.modular.expect
index 7f8c3dd..3a5146c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.modular.expect
@@ -1,42 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  abstract get t() → self::C::T*;
-  abstract set t(covariant-by-class self::C::T* x) → void;
-  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    return new self::CImpl::•<self::C::•::T*>(t);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+abstract class C<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get t() → self::C::T%;
+  abstract set t(covariant-by-class self::C::T% x) → void;
+  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%>
+    return new self::CImpl::•<self::C::•::T%>(t);
 }
-class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  covariant-by-class field self::CImpl::T* t;
-  constructor •(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
+class CImpl<T extends core::Object? = dynamic> extends core::Object implements self::C<self::CImpl::T%> {
+  covariant-by-class field self::CImpl::T% t;
+  constructor •(self::CImpl::T% t) → self::CImpl<self::CImpl::T%>
     : self::CImpl::t = t, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = new self::CImpl::•<core::int*>(42);
+  self::C<core::int> x = new self::CImpl::•<core::int>(42);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
index f6167ed..fcaf9fe 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•];
-  abstract get t() → self::C::T*;
-  abstract set t(covariant-by-class self::C::T* x) → void;
-  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    return new self::CImpl::•<self::C::•::T*>(t);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+abstract class C<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  abstract get t() → self::C::T%;
+  abstract set t(covariant-by-class self::C::T% x) → void;
+  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%>
+    return new self::CImpl::•<self::C::•::T%>(t);
 }
-class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  covariant-by-class field self::CImpl::T* t;
-  constructor •(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
+class CImpl<T extends core::Object? = dynamic> extends core::Object implements self::C<self::CImpl::T%> {
+  covariant-by-class field self::CImpl::T% t;
+  constructor •(self::CImpl::T% t) → self::CImpl<self::CImpl::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
index 7f8c3dd..3a5146c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
@@ -1,42 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  abstract get t() → self::C::T*;
-  abstract set t(covariant-by-class self::C::T* x) → void;
-  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    return new self::CImpl::•<self::C::•::T*>(t);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+abstract class C<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get t() → self::C::T%;
+  abstract set t(covariant-by-class self::C::T% x) → void;
+  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%>
+    return new self::CImpl::•<self::C::•::T%>(t);
 }
-class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  covariant-by-class field self::CImpl::T* t;
-  constructor •(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
+class CImpl<T extends core::Object? = dynamic> extends core::Object implements self::C<self::CImpl::T%> {
+  covariant-by-class field self::CImpl::T% t;
+  constructor •(self::CImpl::T% t) → self::CImpl<self::CImpl::T%>
     : self::CImpl::t = t, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = new self::CImpl::•<core::int*>(42);
+  self::C<core::int> x = new self::CImpl::•<core::int>(42);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart
index b084bd2..a8e2eaf 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -15,9 +15,9 @@
 class CImpl<T> implements C<T> {
   T t;
   CImpl._(this.t);
-  factory CImpl(T t) => new /*@ typeArgs=CImpl::•::T* */ CImpl._(t);
+  factory CImpl(T t) => new /*@typeArgs=CImpl::•::T%*/ CImpl._(t);
 }
 
 main() {
-  var /*@ type=C<int*>* */ x = new /*@ typeArgs=int* */ C(42);
+  var /*@type=C<int>*/ x = new /*@typeArgs=int*/ C(42);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.textual_outline.expect
index 1980fe9..f75f8c2 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class C<T> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.textual_outline_modelled.expect
index 1b8090f..2ee205e 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class C<T> {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
index a2fd0ae..e01038c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  abstract get t() → self::C::T*;
-  abstract set t(covariant-by-class self::C::T* x) → void;
-  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    return self::CImpl::•<self::C::•::T*>(t);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+abstract class C<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get t() → self::C::T%;
+  abstract set t(covariant-by-class self::C::T% x) → void;
+  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%>
+    return self::CImpl::•<self::C::•::T%>(t);
 }
-class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  covariant-by-class field self::CImpl::T* t;
-  constructor _(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
+class CImpl<T extends core::Object? = dynamic> extends core::Object implements self::C<self::CImpl::T%> {
+  covariant-by-class field self::CImpl::T% t;
+  constructor _(self::CImpl::T% t) → self::CImpl<self::CImpl::T%>
     : self::CImpl::t = t, super core::Object::•()
     ;
-  static factory •<T extends core::Object* = dynamic>(self::CImpl::•::T* t) → self::CImpl<self::CImpl::•::T*>*
-    return new self::CImpl::_<self::CImpl::•::T*>(t);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •<T extends core::Object? = dynamic>(self::CImpl::•::T% t) → self::CImpl<self::CImpl::•::T%>
+    return new self::CImpl::_<self::CImpl::•::T%>(t);
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = self::CImpl::•<core::int*>(42);
+  self::C<core::int> x = self::CImpl::•<core::int>(42);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.modular.expect
index a2fd0ae..e01038c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.modular.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  abstract get t() → self::C::T*;
-  abstract set t(covariant-by-class self::C::T* x) → void;
-  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    return self::CImpl::•<self::C::•::T*>(t);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+abstract class C<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get t() → self::C::T%;
+  abstract set t(covariant-by-class self::C::T% x) → void;
+  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%>
+    return self::CImpl::•<self::C::•::T%>(t);
 }
-class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  covariant-by-class field self::CImpl::T* t;
-  constructor _(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
+class CImpl<T extends core::Object? = dynamic> extends core::Object implements self::C<self::CImpl::T%> {
+  covariant-by-class field self::CImpl::T% t;
+  constructor _(self::CImpl::T% t) → self::CImpl<self::CImpl::T%>
     : self::CImpl::t = t, super core::Object::•()
     ;
-  static factory •<T extends core::Object* = dynamic>(self::CImpl::•::T* t) → self::CImpl<self::CImpl::•::T*>*
-    return new self::CImpl::_<self::CImpl::•::T*>(t);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •<T extends core::Object? = dynamic>(self::CImpl::•::T% t) → self::CImpl<self::CImpl::•::T%>
+    return new self::CImpl::_<self::CImpl::•::T%>(t);
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = self::CImpl::•<core::int*>(42);
+  self::C<core::int> x = self::CImpl::•<core::int>(42);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
index 0980409..32423e6 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•];
-  abstract get t() → self::C::T*;
-  abstract set t(covariant-by-class self::C::T* x) → void;
-  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    return self::CImpl::•<self::C::•::T*>(t);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+abstract class C<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  abstract get t() → self::C::T%;
+  abstract set t(covariant-by-class self::C::T% x) → void;
+  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%>
+    return self::CImpl::•<self::C::•::T%>(t);
 }
-class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  covariant-by-class field self::CImpl::T* t;
-  constructor _(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
+class CImpl<T extends core::Object? = dynamic> extends core::Object implements self::C<self::CImpl::T%> {
+  covariant-by-class field self::CImpl::T% t;
+  constructor _(self::CImpl::T% t) → self::CImpl<self::CImpl::T%>
     ;
-  static factory •<T extends core::Object* = dynamic>(self::CImpl::•::T* t) → self::CImpl<self::CImpl::•::T*>*
+  static factory •<T extends core::Object? = dynamic>(self::CImpl::•::T% t) → self::CImpl<self::CImpl::•::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
index a2fd0ae..e01038c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  abstract get t() → self::C::T*;
-  abstract set t(covariant-by-class self::C::T* x) → void;
-  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    return self::CImpl::•<self::C::•::T*>(t);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+abstract class C<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get t() → self::C::T%;
+  abstract set t(covariant-by-class self::C::T% x) → void;
+  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%>
+    return self::CImpl::•<self::C::•::T%>(t);
 }
-class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  covariant-by-class field self::CImpl::T* t;
-  constructor _(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
+class CImpl<T extends core::Object? = dynamic> extends core::Object implements self::C<self::CImpl::T%> {
+  covariant-by-class field self::CImpl::T% t;
+  constructor _(self::CImpl::T% t) → self::CImpl<self::CImpl::T%>
     : self::CImpl::t = t, super core::Object::•()
     ;
-  static factory •<T extends core::Object* = dynamic>(self::CImpl::•::T* t) → self::CImpl<self::CImpl::•::T*>*
-    return new self::CImpl::_<self::CImpl::•::T*>(t);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •<T extends core::Object? = dynamic>(self::CImpl::•::T% t) → self::CImpl<self::CImpl::•::T%>
+    return new self::CImpl::_<self::CImpl::•::T%>(t);
 }
 static method main() → dynamic {
-  self::C<core::int*>* x = self::CImpl::•<core::int*>(42);
+  self::C<core::int> x = self::CImpl::•<core::int>(42);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart
index 00a371ba..e5dda42 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart
@@ -1,24 +1,23 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class Cloneable<T> {}
 
 class Pair<T extends Cloneable<T>, U extends Cloneable<U>> {
-  T t;
-  U u;
+  T? t;
+  U? u;
   Pair(this.t, this.u);
   Pair._();
-  Pair<U, T> get reversed => new /*@ typeArgs=Pair::U*, Pair::T* */ Pair(
-      /*@target=Pair.u*/ u,
-      /*@target=Pair.t*/ t);
+  Pair<U, T> get reversed => new /*@typeArgs=Pair::U, Pair::T*/ Pair(
+      /*@target=Pair.u*/ u, /*@target=Pair.t*/ t);
 }
 
 main() {
-  final /*@ type=Pair<Cloneable<dynamic>*, Cloneable<dynamic>*>* */ x =
-      new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@ typeArgs=Cloneable<dynamic>*, Cloneable<dynamic>* */ Pair
+  final /*@type=Pair<Cloneable<Object?>, Cloneable<Object?>>*/ x =
+      new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Cloneable<Object?>, Cloneable<Object?>*/ Pair
           ._();
 }
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.textual_outline.expect
index f4bb286..017f473 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.textual_outline.expect
@@ -1,11 +1,10 @@
-// @dart = 2.9
 library test;
 
 class Cloneable<T> {}
 
 class Pair<T extends Cloneable<T>, U extends Cloneable<U>> {
-  T t;
-  U u;
+  T? t;
+  U? u;
   Pair(this.t, this.u);
   Pair._();
   Pair<U, T> get reversed => new Pair(u, t);
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.textual_outline_modelled.expect
index 0e51936..abd5141 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Cloneable<T> {}
@@ -7,8 +6,8 @@
   Pair(this.t, this.u);
   Pair._();
   Pair<U, T> get reversed => new Pair(u, t);
-  T t;
-  U u;
+  T? t;
+  U? u;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.expect
index 5ef8772..2b7a760 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.expect
@@ -1,21 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:116: Error: Inferred type argument 'Cloneable<dynamic>' doesn't conform to the bound 'Cloneable<T>' of the type variable 'T' on 'Pair'.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:21:112: Error: Inferred type argument 'Cloneable<Object?>' doesn't conform to the bound 'Cloneable<T>' of the type variable 'T' on 'Pair'.
 //  - 'Cloneable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
+//  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@ typeArgs=Cloneable<dynamic>*, Cloneable<dynamic>* */ Pair
-//                                                                                                                    ^
+//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Cloneable<Object?>, Cloneable<Object?>*/ Pair
+//                                                                                                                ^
 // pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:10:12: Context: This is the type variable whose bound isn't conformed to.
 // class Pair<T extends Cloneable<T>, U extends Cloneable<U>> {
 //            ^
 //
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:116: Error: Inferred type argument 'Cloneable<dynamic>' doesn't conform to the bound 'Cloneable<U>' of the type variable 'U' on 'Pair'.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:21:112: Error: Inferred type argument 'Cloneable<Object?>' doesn't conform to the bound 'Cloneable<U>' of the type variable 'U' on 'Pair'.
 //  - 'Cloneable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
+//  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@ typeArgs=Cloneable<dynamic>*, Cloneable<dynamic>* */ Pair
-//                                                                                                                    ^
+//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Cloneable<Object?>, Cloneable<Object?>*/ Pair
+//                                                                                                                ^
 // pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:10:36: Context: This is the type variable whose bound isn't conformed to.
 // class Pair<T extends Cloneable<T>, U extends Cloneable<U>> {
 //                                    ^
@@ -23,43 +25,23 @@
 import self as self;
 import "dart:core" as core;
 
-class Cloneable<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Cloneable<self::Cloneable::T*>*
+class Cloneable<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Cloneable<self::Cloneable::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Pair<T extends self::Cloneable<self::Pair::T*>* = self::Cloneable<dynamic>*, U extends self::Cloneable<self::Pair::U*>* = self::Cloneable<dynamic>*> extends core::Object {
-  covariant-by-class field self::Pair::T* t;
-  covariant-by-class field self::Pair::U* u;
-  constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
+class Pair<T extends self::Cloneable<self::Pair::T> = self::Cloneable<dynamic>, U extends self::Cloneable<self::Pair::U> = self::Cloneable<dynamic>> extends core::Object {
+  covariant-by-class field self::Pair::T? t;
+  covariant-by-class field self::Pair::U? u;
+  constructor •(self::Pair::T? t, self::Pair::U? u) → self::Pair<self::Pair::T, self::Pair::U>
     : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
     ;
-  constructor _() → self::Pair<self::Pair::T*, self::Pair::U*>*
+  constructor _() → self::Pair<self::Pair::T, self::Pair::U>
     : self::Pair::u = null, self::Pair::t = null, super core::Object::•()
     ;
-  get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
-    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}{self::Pair::U*}, this.{self::Pair::t}{self::Pair::T*});
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get reversed() → self::Pair<self::Pair::U, self::Pair::T>
+    return new self::Pair::•<self::Pair::U, self::Pair::T>(this.{self::Pair::u}{self::Pair::U?}, this.{self::Pair::t}{self::Pair::T?});
 }
 static method main() → dynamic {
-  final self::Pair<self::Cloneable<dynamic>*, self::Cloneable<dynamic>*>* x = new self::Pair::_<self::Cloneable<dynamic>*, self::Cloneable<dynamic>*>();
+  final self::Pair<self::Cloneable<core::Object?>, self::Cloneable<core::Object?>> x = new self::Pair::_<self::Cloneable<core::Object?>, self::Cloneable<core::Object?>>();
 }
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.modular.expect
index 5ef8772..2b7a760 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.modular.expect
@@ -1,21 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:116: Error: Inferred type argument 'Cloneable<dynamic>' doesn't conform to the bound 'Cloneable<T>' of the type variable 'T' on 'Pair'.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:21:112: Error: Inferred type argument 'Cloneable<Object?>' doesn't conform to the bound 'Cloneable<T>' of the type variable 'T' on 'Pair'.
 //  - 'Cloneable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
+//  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@ typeArgs=Cloneable<dynamic>*, Cloneable<dynamic>* */ Pair
-//                                                                                                                    ^
+//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Cloneable<Object?>, Cloneable<Object?>*/ Pair
+//                                                                                                                ^
 // pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:10:12: Context: This is the type variable whose bound isn't conformed to.
 // class Pair<T extends Cloneable<T>, U extends Cloneable<U>> {
 //            ^
 //
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:116: Error: Inferred type argument 'Cloneable<dynamic>' doesn't conform to the bound 'Cloneable<U>' of the type variable 'U' on 'Pair'.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:21:112: Error: Inferred type argument 'Cloneable<Object?>' doesn't conform to the bound 'Cloneable<U>' of the type variable 'U' on 'Pair'.
 //  - 'Cloneable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
+//  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@ typeArgs=Cloneable<dynamic>*, Cloneable<dynamic>* */ Pair
-//                                                                                                                    ^
+//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Cloneable<Object?>, Cloneable<Object?>*/ Pair
+//                                                                                                                ^
 // pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:10:36: Context: This is the type variable whose bound isn't conformed to.
 // class Pair<T extends Cloneable<T>, U extends Cloneable<U>> {
 //                                    ^
@@ -23,43 +25,23 @@
 import self as self;
 import "dart:core" as core;
 
-class Cloneable<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Cloneable<self::Cloneable::T*>*
+class Cloneable<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Cloneable<self::Cloneable::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Pair<T extends self::Cloneable<self::Pair::T*>* = self::Cloneable<dynamic>*, U extends self::Cloneable<self::Pair::U*>* = self::Cloneable<dynamic>*> extends core::Object {
-  covariant-by-class field self::Pair::T* t;
-  covariant-by-class field self::Pair::U* u;
-  constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
+class Pair<T extends self::Cloneable<self::Pair::T> = self::Cloneable<dynamic>, U extends self::Cloneable<self::Pair::U> = self::Cloneable<dynamic>> extends core::Object {
+  covariant-by-class field self::Pair::T? t;
+  covariant-by-class field self::Pair::U? u;
+  constructor •(self::Pair::T? t, self::Pair::U? u) → self::Pair<self::Pair::T, self::Pair::U>
     : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
     ;
-  constructor _() → self::Pair<self::Pair::T*, self::Pair::U*>*
+  constructor _() → self::Pair<self::Pair::T, self::Pair::U>
     : self::Pair::u = null, self::Pair::t = null, super core::Object::•()
     ;
-  get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
-    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}{self::Pair::U*}, this.{self::Pair::t}{self::Pair::T*});
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get reversed() → self::Pair<self::Pair::U, self::Pair::T>
+    return new self::Pair::•<self::Pair::U, self::Pair::T>(this.{self::Pair::u}{self::Pair::U?}, this.{self::Pair::t}{self::Pair::T?});
 }
 static method main() → dynamic {
-  final self::Pair<self::Cloneable<dynamic>*, self::Cloneable<dynamic>*>* x = new self::Pair::_<self::Cloneable<dynamic>*, self::Cloneable<dynamic>*>();
+  final self::Pair<self::Cloneable<core::Object?>, self::Cloneable<core::Object?>> x = new self::Pair::_<self::Cloneable<core::Object?>, self::Cloneable<core::Object?>>();
 }
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.outline.expect
index e628b1f..b4fcb25 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.outline.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Cloneable<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Cloneable<self::Cloneable::T*>*
+class Cloneable<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Cloneable<self::Cloneable::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Pair<T extends self::Cloneable<self::Pair::T*>* = self::Cloneable<dynamic>*, U extends self::Cloneable<self::Pair::U*>* = self::Cloneable<dynamic>*> extends core::Object {
-  covariant-by-class field self::Pair::T* t;
-  covariant-by-class field self::Pair::U* u;
-  constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
+class Pair<T extends self::Cloneable<self::Pair::T> = self::Cloneable<dynamic>, U extends self::Cloneable<self::Pair::U> = self::Cloneable<dynamic>> extends core::Object {
+  covariant-by-class field self::Pair::T? t;
+  covariant-by-class field self::Pair::U? u;
+  constructor •(self::Pair::T? t, self::Pair::U? u) → self::Pair<self::Pair::T, self::Pair::U>
     ;
-  constructor _() → self::Pair<self::Pair::T*, self::Pair::U*>*
+  constructor _() → self::Pair<self::Pair::T, self::Pair::U>
     ;
-  get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
+  get reversed() → self::Pair<self::Pair::U, self::Pair::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.transformed.expect
index 5ef8772..2b7a760 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.transformed.expect
@@ -1,21 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:116: Error: Inferred type argument 'Cloneable<dynamic>' doesn't conform to the bound 'Cloneable<T>' of the type variable 'T' on 'Pair'.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:21:112: Error: Inferred type argument 'Cloneable<Object?>' doesn't conform to the bound 'Cloneable<T>' of the type variable 'T' on 'Pair'.
 //  - 'Cloneable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
+//  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@ typeArgs=Cloneable<dynamic>*, Cloneable<dynamic>* */ Pair
-//                                                                                                                    ^
+//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Cloneable<Object?>, Cloneable<Object?>*/ Pair
+//                                                                                                                ^
 // pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:10:12: Context: This is the type variable whose bound isn't conformed to.
 // class Pair<T extends Cloneable<T>, U extends Cloneable<U>> {
 //            ^
 //
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:116: Error: Inferred type argument 'Cloneable<dynamic>' doesn't conform to the bound 'Cloneable<U>' of the type variable 'U' on 'Pair'.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:21:112: Error: Inferred type argument 'Cloneable<Object?>' doesn't conform to the bound 'Cloneable<U>' of the type variable 'U' on 'Pair'.
 //  - 'Cloneable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
+//  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@ typeArgs=Cloneable<dynamic>*, Cloneable<dynamic>* */ Pair
-//                                                                                                                    ^
+//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Cloneable<Object?>, Cloneable<Object?>*/ Pair
+//                                                                                                                ^
 // pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:10:36: Context: This is the type variable whose bound isn't conformed to.
 // class Pair<T extends Cloneable<T>, U extends Cloneable<U>> {
 //                                    ^
@@ -23,43 +25,23 @@
 import self as self;
 import "dart:core" as core;
 
-class Cloneable<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Cloneable<self::Cloneable::T*>*
+class Cloneable<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Cloneable<self::Cloneable::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Pair<T extends self::Cloneable<self::Pair::T*>* = self::Cloneable<dynamic>*, U extends self::Cloneable<self::Pair::U*>* = self::Cloneable<dynamic>*> extends core::Object {
-  covariant-by-class field self::Pair::T* t;
-  covariant-by-class field self::Pair::U* u;
-  constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
+class Pair<T extends self::Cloneable<self::Pair::T> = self::Cloneable<dynamic>, U extends self::Cloneable<self::Pair::U> = self::Cloneable<dynamic>> extends core::Object {
+  covariant-by-class field self::Pair::T? t;
+  covariant-by-class field self::Pair::U? u;
+  constructor •(self::Pair::T? t, self::Pair::U? u) → self::Pair<self::Pair::T, self::Pair::U>
     : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
     ;
-  constructor _() → self::Pair<self::Pair::T*, self::Pair::U*>*
+  constructor _() → self::Pair<self::Pair::T, self::Pair::U>
     : self::Pair::u = null, self::Pair::t = null, super core::Object::•()
     ;
-  get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
-    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}{self::Pair::U*}, this.{self::Pair::t}{self::Pair::T*});
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get reversed() → self::Pair<self::Pair::U, self::Pair::T>
+    return new self::Pair::•<self::Pair::U, self::Pair::T>(this.{self::Pair::u}{self::Pair::U?}, this.{self::Pair::t}{self::Pair::T?});
 }
 static method main() → dynamic {
-  final self::Pair<self::Cloneable<dynamic>*, self::Cloneable<dynamic>*>* x = new self::Pair::_<self::Cloneable<dynamic>*, self::Cloneable<dynamic>*>();
+  final self::Pair<self::Cloneable<core::Object?>, self::Cloneable<core::Object?>> x = new self::Pair::_<self::Cloneable<core::Object?>, self::Cloneable<core::Object?>>();
 }
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart
index 3349db6..d968e39 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
   T t;
   U u;
   Pair(this.t, this.u);
-  Pair<U, T> get reversed => new /*@ typeArgs=Pair::U*, Pair::T* */ Pair(
+  Pair<U, T> get reversed => new /*@typeArgs=Pair::U%, Pair::T%*/ Pair(
       /*@target=Pair.u*/ u,
       /*@target=Pair.t*/ t);
 }
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.textual_outline.expect
index ebdd53b..08b5285 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Pair<T, U> {
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.textual_outline_modelled.expect
index d85d459..32b945d 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Pair<T, U> {
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.expect
index f36fcca..265bb28 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Pair<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::Pair::T* t;
-  covariant-by-class field self::Pair::U* u;
-  constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
+class Pair<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::Pair::T% t;
+  covariant-by-class field self::Pair::U% u;
+  constructor •(self::Pair::T% t, self::Pair::U% u) → self::Pair<self::Pair::T%, self::Pair::U%>
     : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
     ;
-  get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
-    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}{self::Pair::U*}, this.{self::Pair::t}{self::Pair::T*});
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get reversed() → self::Pair<self::Pair::U%, self::Pair::T%>
+    return new self::Pair::•<self::Pair::U%, self::Pair::T%>(this.{self::Pair::u}{self::Pair::U%}, this.{self::Pair::t}{self::Pair::T%});
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.modular.expect
index f36fcca..265bb28 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.modular.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Pair<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::Pair::T* t;
-  covariant-by-class field self::Pair::U* u;
-  constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
+class Pair<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::Pair::T% t;
+  covariant-by-class field self::Pair::U% u;
+  constructor •(self::Pair::T% t, self::Pair::U% u) → self::Pair<self::Pair::T%, self::Pair::U%>
     : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
     ;
-  get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
-    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}{self::Pair::U*}, this.{self::Pair::t}{self::Pair::T*});
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get reversed() → self::Pair<self::Pair::U%, self::Pair::T%>
+    return new self::Pair::•<self::Pair::U%, self::Pair::T%>(this.{self::Pair::u}{self::Pair::U%}, this.{self::Pair::t}{self::Pair::T%});
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.outline.expect
index cc30784..126b913 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Pair<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::Pair::T* t;
-  covariant-by-class field self::Pair::U* u;
-  constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
+class Pair<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::Pair::T% t;
+  covariant-by-class field self::Pair::U% u;
+  constructor •(self::Pair::T% t, self::Pair::U% u) → self::Pair<self::Pair::T%, self::Pair::U%>
     ;
-  get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
+  get reversed() → self::Pair<self::Pair::U%, self::Pair::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.transformed.expect
index f36fcca..265bb28 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.transformed.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Pair<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::Pair::T* t;
-  covariant-by-class field self::Pair::U* u;
-  constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
+class Pair<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::Pair::T% t;
+  covariant-by-class field self::Pair::U% u;
+  constructor •(self::Pair::T% t, self::Pair::U% u) → self::Pair<self::Pair::T%, self::Pair::U%>
     : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
     ;
-  get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
-    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}{self::Pair::U*}, this.{self::Pair::t}{self::Pair::T*});
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get reversed() → self::Pair<self::Pair::U%, self::Pair::T%>
+    return new self::Pair::•<self::Pair::U%, self::Pair::T%>(this.{self::Pair::u}{self::Pair::U%}, this.{self::Pair::t}{self::Pair::T%});
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart
index 4e6dac5..d86e54c 100644
--- a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.textual_outline.expect
index 6ad4007..d3ee256 100644
--- a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {}
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.textual_outline_modelled.expect
index d5f3bae..a4a2d50 100644
--- a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {}
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.expect
index 63ca562..9bebe19 100644
--- a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,20 +13,10 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
   invalid-type a = invalid-expression "pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:77: Error: Too many positional arguments: 0 allowed, but 1 found.
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.modular.expect
index 63ca562..9bebe19 100644
--- a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,20 +13,10 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
   invalid-type a = invalid-expression "pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:77: Error: Too many positional arguments: 0 allowed, but 1 found.
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.outline.expect
index 18fed36..b2e2f48 100644
--- a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.transformed.expect
index 63ca562..9bebe19 100644
--- a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,20 +13,10 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
   invalid-type a = invalid-expression "pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:77: Error: Too many positional arguments: 0 allowed, but 1 found.
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart
index 4a101da..fa6454f 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.textual_outline.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.textual_outline.expect
index a65782b..27f0e71 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.textual_outline_modelled.expect
index a65782b..27f0e71 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.expect
index 51015b3..dcc1780 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,41 +14,21 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  final field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   get x() → dynamic
     return 3;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  core::String y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.modular.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.modular.expect
index 51015b3..dcc1780 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,41 +14,21 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  final field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   get x() → dynamic
     return 3;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  core::String y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.outline.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.outline.expect
index 984aa8b..5051ad7 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,35 +14,15 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x;
-  synthetic constructor •() → self::A*
+  final field core::int x;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   get x() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart
index 4697354..3eacb18 100644
--- a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart
+++ b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.textual_outline.expect b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.textual_outline.expect
index 93c66f2..0114cbd 100644
--- a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var x = null;
diff --git a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.textual_outline_modelled.expect
index 93932dc..295e0ea 100644
--- a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.expect b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.expect
index 9adf7a2..2d8933a 100644
--- a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   static field dynamic x = null;
-  static field core::int* y = 3;
+  static field core::int y = 3;
   field dynamic x2 = null;
-  field core::int* y2 = 3;
-  synthetic constructor •() → self::A*
+  field core::int y2 = 3;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field dynamic x = null;
-static field core::int* y = 3;
+static field core::int y = 3;
 static method main() → dynamic {
   self::x;
   self::y;
diff --git a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.modular.expect b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.modular.expect
index 9adf7a2..2d8933a 100644
--- a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   static field dynamic x = null;
-  static field core::int* y = 3;
+  static field core::int y = 3;
   field dynamic x2 = null;
-  field core::int* y2 = 3;
-  synthetic constructor •() → self::A*
+  field core::int y2 = 3;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field dynamic x = null;
-static field core::int* y = 3;
+static field core::int y = 3;
 static method main() → dynamic {
   self::x;
   self::y;
diff --git a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.outline.expect b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.outline.expect
index 5a64a8d..918c34c 100644
--- a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   static field dynamic x;
-  static field core::int* y;
+  static field core::int y;
   field dynamic x2;
-  field core::int* y2;
-  synthetic constructor •() → self::A*
+  field core::int y2;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field dynamic x;
-static field core::int* y;
+static field core::int y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.transformed.expect
index 9adf7a2..2d8933a 100644
--- a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.transformed.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   static field dynamic x = null;
-  static field core::int* y = 3;
+  static field core::int y = 3;
   field dynamic x2 = null;
-  field core::int* y2 = 3;
-  synthetic constructor •() → self::A*
+  field core::int y2 = 3;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field dynamic x = null;
-static field core::int* y = 3;
+static field core::int y = 3;
 static method main() → dynamic {
   self::x;
   self::y;
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart
index 30e4cdb..7df2348 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart
+++ b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.textual_outline.expect b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.textual_outline.expect
index 84bb5b3..c70c84a 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 test() {}
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.textual_outline_modelled.expect
index 630ead4..10819ea 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.expect b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.expect
index 6fc489d..dca80ed 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.modular.expect
index 6fc489d..dca80ed 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.outline.expect b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.outline.expect
index 8e85697..100b8e9 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.transformed.expect
index 6fc489d..dca80ed 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart
index 20848d3..de4b6f0 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.textual_outline.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.textual_outline.expect
index 84bb5b3..c70c84a 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 test() {}
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.textual_outline_modelled.expect
index 630ead4..10819ea 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.expect
index 9364af3..a93c28a 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.modular.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.modular.expect
index 9364af3..a93c28a 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.outline.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.outline.expect
index 8e85697..100b8e9 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.transformed.expect
index 9364af3..a93c28a 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart
index 2e7f935..b66480a 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart
@@ -1,21 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:math';
 
 // T max<T extends num>(T x, T y);
-f() {
-  num x;
-  dynamic y;
-
-  num a = /*@ typeArgs=num* */ max(
+f(num x, dynamic y) {
+  num a = /*@typeArgs=num*/ max(
       x,
       /*info:DYNAMIC_CAST*/ y);
-  Object b = /*@ typeArgs=num* */ max(
+  Object b = /*@typeArgs=num*/ max(
       x,
       /*info:DYNAMIC_CAST*/ y);
   dynamic c = /*error:COULD_NOT_INFER*/ /*@ typeArgs=dynamic */ max(x, y);
diff --git a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.textual_outline.expect
index 27f2e8e..7c39dc6 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
 import 'dart:math';
 
-f() {}
+f(num x, dynamic y) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.textual_outline_modelled.expect
index 27f2e8e..7c39dc6 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
 import 'dart:math';
 
-f() {}
+f(num x, dynamic y) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.expect
index c7d6e17..a6aefc2 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:21:65: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:18:65: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   dynamic c = /*error:COULD_NOT_INFER*/ /*@ typeArgs=dynamic */ max(x, y);
 //                                                                 ^
 //
-// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:22:81: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:19:81: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   var /*@ type=dynamic */ d = /*error:COULD_NOT_INFER*/ /*@ typeArgs=dynamic */ max(
 //                                                                                 ^
@@ -18,11 +18,9 @@
 
 import "dart:math";
 
-static method f() → dynamic {
-  core::num* x;
-  dynamic y;
-  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*);
+static method f(core::num x, dynamic y) → dynamic {
+  core::num a = math::max<core::num>(x, y as{TypeError,ForDynamic,ForNonNullableByDefault} core::num);
+  core::Object b = math::max<core::num>(x, y as{TypeError,ForDynamic,ForNonNullableByDefault} 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.weak.modular.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.modular.expect
index c7d6e17..a6aefc2 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:21:65: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:18:65: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   dynamic c = /*error:COULD_NOT_INFER*/ /*@ typeArgs=dynamic */ max(x, y);
 //                                                                 ^
 //
-// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:22:81: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:19:81: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   var /*@ type=dynamic */ d = /*error:COULD_NOT_INFER*/ /*@ typeArgs=dynamic */ max(
 //                                                                                 ^
@@ -18,11 +18,9 @@
 
 import "dart:math";
 
-static method f() → dynamic {
-  core::num* x;
-  dynamic y;
-  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*);
+static method f(core::num x, dynamic y) → dynamic {
+  core::num a = math::max<core::num>(x, y as{TypeError,ForDynamic,ForNonNullableByDefault} core::num);
+  core::Object b = math::max<core::num>(x, y as{TypeError,ForDynamic,ForNonNullableByDefault} 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.weak.outline.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.outline.expect
index 4cd4875..1dc4a7a 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.outline.expect
@@ -1,9 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
 import "dart:math";
 
-static method f() → dynamic
+static method f(core::num x, dynamic y) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.transformed.expect
index c7d6e17..a6aefc2 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:21:65: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:18:65: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   dynamic c = /*error:COULD_NOT_INFER*/ /*@ typeArgs=dynamic */ max(x, y);
 //                                                                 ^
 //
-// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:22:81: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:19:81: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   var /*@ type=dynamic */ d = /*error:COULD_NOT_INFER*/ /*@ typeArgs=dynamic */ max(
 //                                                                                 ^
@@ -18,11 +18,9 @@
 
 import "dart:math";
 
-static method f() → dynamic {
-  core::num* x;
-  dynamic y;
-  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*);
+static method f(core::num x, dynamic y) → dynamic {
+  core::num a = math::max<core::num>(x, y as{TypeError,ForDynamic,ForNonNullableByDefault} core::num);
+  core::Object b = math::max<core::num>(x, y as{TypeError,ForDynamic,ForNonNullableByDefault} 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_miscellaneous.dart b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart
index 8aaf516..2795bc9 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -15,16 +15,16 @@
 void main() {
   {
     // Variables, nested literals
-    var /*@ type=String* */ x = "hello";
-    var /*@ type=int* */ y = 3;
+    var /*@type=String*/ x = "hello";
+    var /*@type=int*/ y = 3;
     void f(List<Map<int, String>> l) {}
     ;
-    f(/*@ typeArgs=Map<int*, String*>* */ [
-      /*@ typeArgs=int*, String* */ {y: x}
+    f(/*@typeArgs=Map<int, String>*/ [
+      /*@typeArgs=int, String*/ {y: x}
     ]);
   }
   {
     int f(int x) => 0;
-    A<int> a = new /*@ typeArgs=int* */ A(f);
+    A<int> a = new /*@typeArgs=int*/ A(f);
   }
 }
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.textual_outline.expect
index 9cf6047..f36fe08 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef T Function2<S, T>(S x);
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.textual_outline_modelled.expect
index 2349108..697ff80 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.expect
index 9ecd2a9..430da8b 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field (self::A::T*) →* self::A::T* x;
-  constructor •((self::A::T*) →* self::A::T* x) → self::A<self::A::T*>*
+typedef Function2<contravariant S extends core::Object? = dynamic, T extends core::Object? = dynamic> = (S%) → T%;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field (self::A::T%) → self::A::T% x;
+  constructor •((self::A::T%) → self::A::T% x) → self::A<self::A::T%>
     : self::A::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
   {
-    core::String* x = "hello";
-    core::int* y = 3;
-    function f(core::List<core::Map<core::int*, core::String*>*>* l) → void {}
+    core::String x = "hello";
+    core::int y = 3;
+    function f(core::List<core::Map<core::int, core::String>> l) → void {}
     ;
-    f(<core::Map<core::int*, core::String*>*>[<core::int*, core::String*>{y: x}]){(core::List<core::Map<core::int*, core::String*>*>*) →* void};
+    f(<core::Map<core::int, core::String>>[<core::int, core::String>{y: x}]){(core::List<core::Map<core::int, core::String>>) → void};
   }
   {
-    function f(core::int* x) → core::int*
+    function f(core::int x) → core::int
       return 0;
-    self::A<core::int*>* a = new self::A::•<core::int*>(f);
+    self::A<core::int> a = new self::A::•<core::int>(f);
   }
 }
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.modular.expect
index 9ecd2a9..430da8b 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.modular.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field (self::A::T*) →* self::A::T* x;
-  constructor •((self::A::T*) →* self::A::T* x) → self::A<self::A::T*>*
+typedef Function2<contravariant S extends core::Object? = dynamic, T extends core::Object? = dynamic> = (S%) → T%;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field (self::A::T%) → self::A::T% x;
+  constructor •((self::A::T%) → self::A::T% x) → self::A<self::A::T%>
     : self::A::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
   {
-    core::String* x = "hello";
-    core::int* y = 3;
-    function f(core::List<core::Map<core::int*, core::String*>*>* l) → void {}
+    core::String x = "hello";
+    core::int y = 3;
+    function f(core::List<core::Map<core::int, core::String>> l) → void {}
     ;
-    f(<core::Map<core::int*, core::String*>*>[<core::int*, core::String*>{y: x}]){(core::List<core::Map<core::int*, core::String*>*>*) →* void};
+    f(<core::Map<core::int, core::String>>[<core::int, core::String>{y: x}]){(core::List<core::Map<core::int, core::String>>) → void};
   }
   {
-    function f(core::int* x) → core::int*
+    function f(core::int x) → core::int
       return 0;
-    self::A<core::int*>* a = new self::A::•<core::int*>(f);
+    self::A<core::int> a = new self::A::•<core::int>(f);
   }
 }
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.outline.expect
index a40472f..55312ff 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field (self::A::T*) →* self::A::T* x;
-  constructor •((self::A::T*) →* self::A::T* x) → self::A<self::A::T*>*
+typedef Function2<contravariant S extends core::Object? = dynamic, T extends core::Object? = dynamic> = (S%) → T%;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field (self::A::T%) → self::A::T% x;
+  constructor •((self::A::T%) → self::A::T% x) → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.transformed.expect
index d687121..0898f40 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.transformed.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field (self::A::T*) →* self::A::T* x;
-  constructor •((self::A::T*) →* self::A::T* x) → self::A<self::A::T*>*
+typedef Function2<contravariant S extends core::Object? = dynamic, T extends core::Object? = dynamic> = (S%) → T%;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field (self::A::T%) → self::A::T% x;
+  constructor •((self::A::T%) → self::A::T% x) → self::A<self::A::T%>
     : self::A::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
   {
-    core::String* x = "hello";
-    core::int* y = 3;
-    function f(core::List<core::Map<core::int*, core::String*>*>* l) → void {}
+    core::String x = "hello";
+    core::int y = 3;
+    function f(core::List<core::Map<core::int, core::String>> l) → void {}
     ;
-    f(core::_GrowableList::_literal1<core::Map<core::int*, core::String*>*>(<core::int*, core::String*>{y: x})){(core::List<core::Map<core::int*, core::String*>*>*) →* void};
+    f(core::_GrowableList::_literal1<core::Map<core::int, core::String>>(<core::int, core::String>{y: x})){(core::List<core::Map<core::int, core::String>>) → void};
   }
   {
-    function f(core::int* x) → core::int*
+    function f(core::int x) → core::int
       return 0;
-    self::A<core::int*>* a = new self::A::•<core::int*>(f);
+    self::A<core::int> a = new self::A::•<core::int>(f);
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart
index 6da207b..a2a520c 100644
--- a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,7 +10,7 @@
 }
 
 class B implements A {
-  final foo = /*@ typeArgs=String* */ const [];
+  final foo = /*@typeArgs=String*/ const [];
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.textual_outline.expect
index b5cf4d6..16ed9ce 100644
--- a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.textual_outline_modelled.expect
index b5cf4d6..16ed9ce 100644
--- a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.expect
index 350439b..33f9e2a 100644
--- a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get foo() → core::Iterable<core::String*>*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get foo() → core::Iterable<core::String>;
 }
 class B extends core::Object implements self::A {
-  final field core::Iterable<core::String*>* foo = #C1;
-  synthetic constructor •() → self::B*
+  final field core::Iterable<core::String> foo = #C1;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.modular.expect
index 350439b..33f9e2a 100644
--- a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.modular.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get foo() → core::Iterable<core::String*>*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get foo() → core::Iterable<core::String>;
 }
 class B extends core::Object implements self::A {
-  final field core::Iterable<core::String*>* foo = #C1;
-  synthetic constructor •() → self::B*
+  final field core::Iterable<core::String> foo = #C1;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.outline.expect
index f44e1f0..b5dea20 100644
--- a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.outline.expect
@@ -1,36 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract get foo() → core::Iterable<core::String*>*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get foo() → core::Iterable<core::String>;
 }
 class B extends core::Object implements self::A {
-  final field core::Iterable<core::String*>* foo;
-  synthetic constructor •() → self::B*
+  final field core::Iterable<core::String> foo;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.transformed.expect
index 350439b..33f9e2a 100644
--- a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.transformed.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get foo() → core::Iterable<core::String*>*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get foo() → core::Iterable<core::String>;
 }
 class B extends core::Object implements self::A {
-  final field core::Iterable<core::String*>* foo = #C1;
-  synthetic constructor •() → self::B*
+  final field core::Iterable<core::String> foo = #C1;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart
index 1539c9e..24a4701 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,10 +10,10 @@
   const Foo.named(List<String> l);
 }
 
-@Foo(/*@ typeArgs=String* */ const [])
+@Foo(/*@typeArgs=String*/ const [])
 class Bar {}
 
-@Foo.named(/*@ typeArgs=String* */ const [])
+@Foo.named(/*@typeArgs=String*/ const [])
 class Baz {}
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.textual_outline.expect
index 588cdaf..fb5daf2 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.textual_outline_modelled.expect
index 80453be..af71307 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 @Foo(const [])
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.expect
index 5fdfe4d..d3633ff 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.expect
@@ -1,56 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  const constructor named(core::List<core::String*>* l) → self::Foo*
+  const constructor named(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @#C1
 class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @#C1
 class Baz extends core::Object {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.modular.expect
index 5fdfe4d..d3633ff 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.modular.expect
@@ -1,56 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  const constructor named(core::List<core::String*>* l) → self::Foo*
+  const constructor named(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @#C1
 class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @#C1
 class Baz extends core::Object {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.outline.expect
index 1cea698..9efa2e0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.outline.expect
@@ -1,54 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  const constructor named(core::List<core::String*>* l) → self::Foo*
+  const constructor named(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-@self::Foo::•(const <core::String*>[])
+@self::Foo::•(const <core::String>[])
 class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-@self::Foo::named(const <core::String*>[])
+@self::Foo::named(const <core::String>[])
 class Baz extends core::Object {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.transformed.expect
index 5fdfe4d..d3633ff 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.transformed.expect
@@ -1,56 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  const constructor named(core::List<core::String*>* l) → self::Foo*
+  const constructor named(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @#C1
 class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @#C1
 class Baz extends core::Object {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart
index 0282769..239edeb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,13 +10,13 @@
 }
 
 abstract class Bar {
-  @Foo(/*@ typeArgs=String* */ const [])
+  @Foo(/*@typeArgs=String*/ const [])
   Bar();
 
-  @Foo(/*@ typeArgs=String* */ const [])
+  @Foo(/*@typeArgs=String*/ const [])
   var x;
 
-  @Foo(/*@ typeArgs=String* */ const [])
+  @Foo(/*@typeArgs=String*/ const [])
   void f();
 }
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.textual_outline.expect
index d4b4367..3cc94f4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.textual_outline_modelled.expect
index d046fed..900fab8 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class Bar {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.expect
index bc1bc95..e89b037 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Bar extends core::Object {
   @#C1
   field dynamic x = null;
   @#C1
-  constructor •() → self::Bar*
+  constructor •() → self::Bar
     : super core::Object::•()
     ;
   @#C1
   abstract method f() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.modular.expect
index bc1bc95..e89b037 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.modular.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Bar extends core::Object {
   @#C1
   field dynamic x = null;
   @#C1
-  constructor •() → self::Bar*
+  constructor •() → self::Bar
     : super core::Object::•()
     ;
   @#C1
   abstract method f() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.outline.expect
index f6d0c76..53a65ad 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.outline.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Bar extends core::Object {
-  @self::Foo::•(const <core::String*>[])
+  @self::Foo::•(const <core::String>[])
   field dynamic x;
-  @self::Foo::•(const <core::String*>[])
-  constructor •() → self::Bar*
+  @self::Foo::•(const <core::String>[])
+  constructor •() → self::Bar
     ;
-  @self::Foo::•(const <core::String*>[])
+  @self::Foo::•(const <core::String>[])
   abstract method f() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.transformed.expect
index bc1bc95..e89b037 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.transformed.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Bar extends core::Object {
   @#C1
   field dynamic x = null;
   @#C1
-  constructor •() → self::Bar*
+  constructor •() → self::Bar
     : super core::Object::•()
     ;
   @#C1
   abstract method f() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart
index 494a5215..df9bd2f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,12 +10,11 @@
 }
 
 void test() {
-  for (@Foo(/*@ typeArgs=String* */ const [])
+  for (@Foo(/*@typeArgs=String*/ const [])
   int i = 0;
       i /*@target=num.<*/ < 1;
       i /*@target=num.+*/ ++) {}
-  for (@Foo(/*@ typeArgs=String* */ const [])
-      int i in /*@ typeArgs=int* */ [0]) {}
+  for (@Foo(/*@typeArgs=String*/ const []) int i in /*@typeArgs=int*/ [0]) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.textual_outline.expect
index 5d83904..d40f333 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.textual_outline_modelled.expect
index 92182d0..0818562 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.expect
index c56e8ad..f763483 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  for (@#C1 core::int* i = 0; i.{core::num::<}(1){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  for (@#C1 core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
-  for (@#C1 core::int* i in <core::int*>[0]) {
+  for (@#C1 core::int i in <core::int>[0]) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.modular.expect
index c56e8ad..f763483 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  for (@#C1 core::int* i = 0; i.{core::num::<}(1){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  for (@#C1 core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
-  for (@#C1 core::int* i in <core::int*>[0]) {
+  for (@#C1 core::int i in <core::int>[0]) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.outline.expect
index 434e2c5..1e4e2e1 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.transformed.expect
index 03d1390..aae71dc 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.transformed.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  for (@#C1 core::int* i = 0; i.{core::num::<}(1){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  for (@#C1 core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
   {
-    core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal1<core::int*>(0).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+    core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(0).{core::Iterable::iterator}{core::Iterator<core::int>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      @#C1 core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
+      @#C1 core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
       {}
     }
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart
index f554d74..f35daca 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,10 +10,10 @@
 }
 
 void test() {
-  @Foo(/*@ typeArgs=String* */ const [])
+  @Foo(/*@typeArgs=String*/ const [])
   var /*@ type=dynamic */ x;
 
-  @Foo(/*@ typeArgs=String* */ const [])
+  @Foo(/*@typeArgs=String*/ const [])
   void f() {}
 }
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.textual_outline.expect
index 5d83904..d40f333 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.textual_outline_modelled.expect
index 92182d0..0818562 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.expect
index bd79165..45a1c08 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
   @#C1 dynamic x;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.modular.expect
index bd79165..45a1c08 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
   @#C1 dynamic x;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.outline.expect
index 434e2c5..1e4e2e1 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.transformed.expect
index bd79165..45a1c08 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
   @#C1 dynamic x;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart
index 8afdbce..ccd993f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,15 +10,15 @@
 }
 
 void test() {
-  const /*@ type=int* */ x = 0;
+  const /*@type=int*/ x = 0;
 
-  @Foo(/*@ typeArgs=int* */ const [x])
+  @Foo(/*@typeArgs=int*/ const [x])
   var /*@ type=dynamic */ y;
 
-  @Foo(/*@ typeArgs=int* */ const [x])
+  @Foo(/*@typeArgs=int*/ const [x])
   void bar() {}
 
-  void baz(@Foo(/*@ typeArgs=int* */ const [x]) dynamic formal) {}
+  void baz(@Foo(/*@typeArgs=int*/ const [x]) dynamic formal) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.textual_outline.expect
index 5a9b8f3..45f63cd 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.textual_outline_modelled.expect
index f166401..109def4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.expect
index 4f025f27..2fe85fc 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(dynamic l) → self::Foo*
+  const constructor •(dynamic l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
   @#C1 dynamic y;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.modular.expect
index 4f025f27..2fe85fc 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(dynamic l) → self::Foo*
+  const constructor •(dynamic l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
   @#C1 dynamic y;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.outline.expect
index 263860e..5025006 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(dynamic l) → self::Foo*
+  const constructor •(dynamic l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.transformed.expect
index 4f025f27..2fe85fc 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(dynamic l) → self::Foo*
+  const constructor •(dynamic l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
   @#C1 dynamic y;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart
index cf8f7a3..7b0ab28 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,10 +9,10 @@
   const Foo(List<String> l);
 }
 
-void f(@Foo(/*@ typeArgs=String* */ const []) x) {}
+void f(@Foo(/*@typeArgs=String*/ const []) x) {}
 
 class C {
-  void m(@Foo(/*@ typeArgs=String* */ const []) x) {}
+  void m(@Foo(/*@typeArgs=String*/ const []) x) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.textual_outline.expect
index 7e7e66a..85424cc 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.textual_outline_modelled.expect
index a0810602..3d34b57 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.expect
index d7a402b..9ce8fd2 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method m(@#C1 dynamic x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method f(@#C1 dynamic x) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.modular.expect
index d7a402b..9ce8fd2 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.modular.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method m(@#C1 dynamic x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method f(@#C1 dynamic x) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.outline.expect
index 8d020a5..fc5afb5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.outline.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method m(dynamic x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method f(dynamic x) → void
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.transformed.expect
index d7a402b..9ce8fd2 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.transformed.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method m(@#C1 dynamic x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method f(@#C1 dynamic x) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart
index f0cc5f4..6c847b4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,8 +10,8 @@
 }
 
 void test() {
-  void f(@Foo(/*@ typeArgs=String* */ const []) /*@ type=dynamic */ x) {}
-  var /*@ type=(dynamic) ->* Null */ x = /*@ returnType=Null */ (@Foo(/*@ typeArgs=String* */ const []) /*@ type=dynamic */
+  void f(@Foo(/*@typeArgs=String*/ const []) /*@ type=dynamic */ x) {}
+  var /*@type=(dynamic) -> Null*/ x = /*@ returnType=Null */ (@Foo(/*@typeArgs=String*/ const []) /*@ type=dynamic */
       x) {};
 }
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.textual_outline.expect
index 5d83904..d40f333 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.textual_outline_modelled.expect
index 92182d0..0818562 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.expect
index b72210d..f909b9a 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
   function f(@#C1 dynamic x) → void {}
-  (dynamic) →* Null x = (@#C1 dynamic x) → Null {};
+  (dynamic) → Null x = (@#C1 dynamic x) → Null {};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.modular.expect
index b72210d..f909b9a 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
   function f(@#C1 dynamic x) → void {}
-  (dynamic) →* Null x = (@#C1 dynamic x) → Null {};
+  (dynamic) → Null x = (@#C1 dynamic x) → Null {};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.outline.expect
index 434e2c5..1e4e2e1 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.transformed.expect
index b72210d..f909b9a 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
   function f(@#C1 dynamic x) → void {}
-  (dynamic) →* Null x = (@#C1 dynamic x) → Null {};
+  (dynamic) → Null x = (@#C1 dynamic x) → Null {};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart
index 5937e4a..a5ecbcb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,14 +9,14 @@
   const Foo(List<String> l);
 }
 
-class C<@Foo(/*@typeArgs=String**/ const []) T> {}
+class C<@Foo(/*@typeArgs=String*/ const []) T> {}
 
-typedef void F<@Foo(/*@typeArgs=String**/ const []) T>();
+typedef void F<@Foo(/*@typeArgs=String*/ const []) T>();
 
-void f<@Foo(/*@typeArgs=String**/ const []) T>() {}
+void f<@Foo(/*@typeArgs=String*/ const []) T>() {}
 
 class D {
-  void m<@Foo(/*@typeArgs=String**/ const []) T>() {}
+  void m<@Foo(/*@typeArgs=String*/ const []) T>() {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.textual_outline.expect
index 0cfa516..fdc2d82 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.textual_outline_modelled.expect
index 6afcb3b..26f3f04 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<@Foo(const []) T> {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.expect
index 60436b4..32d9ea9 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<@#C1 unrelated T extends core::Object* = dynamic> = () →* void;
+typedef F<@#C1 unrelated T extends core::Object? = dynamic> = () → void;
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<@#C1 T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<@#C1 T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  method m<@#C1 T extends core::Object* = dynamic>() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m<@#C1 T extends core::Object? = dynamic>() → void {}
 }
-static method f<@#C1 T extends core::Object* = dynamic>() → void {}
+static method f<@#C1 T extends core::Object? = dynamic>() → void {}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.modular.expect
index 60436b4..32d9ea9 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.modular.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<@#C1 unrelated T extends core::Object* = dynamic> = () →* void;
+typedef F<@#C1 unrelated T extends core::Object? = dynamic> = () → void;
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<@#C1 T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<@#C1 T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  method m<@#C1 T extends core::Object* = dynamic>() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m<@#C1 T extends core::Object? = dynamic>() → void {}
 }
-static method f<@#C1 T extends core::Object* = dynamic>() → void {}
+static method f<@#C1 T extends core::Object? = dynamic>() → void {}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.outline.expect
index c523b74..f9bb47d 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.outline.expect
@@ -1,54 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<@self::Foo::•(const <core::String*>[]) unrelated T extends core::Object* = dynamic> = () →* void;
+typedef F<@self::Foo::•(const <core::String>[]) unrelated T extends core::Object? = dynamic> = () → void;
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<@self::Foo::•(const <core::String*>[]) T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<@self::Foo::•(const <core::String>[]) T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  method m<@self::Foo::•(const <core::String*>[]) T extends core::Object* = dynamic>() → void
+  method m<@self::Foo::•(const <core::String>[]) T extends core::Object? = dynamic>() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<@self::Foo::•(const <core::String*>[]) T extends core::Object* = dynamic>() → void
+static method f<@self::Foo::•(const <core::String>[]) T extends core::Object? = dynamic>() → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.transformed.expect
index 60436b4..32d9ea9 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.transformed.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<@#C1 unrelated T extends core::Object* = dynamic> = () →* void;
+typedef F<@#C1 unrelated T extends core::Object? = dynamic> = () → void;
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<@#C1 T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<@#C1 T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  method m<@#C1 T extends core::Object* = dynamic>() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m<@#C1 T extends core::Object? = dynamic>() → void {}
 }
-static method f<@#C1 T extends core::Object* = dynamic>() → void {}
+static method f<@#C1 T extends core::Object? = dynamic>() → void {}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart
index eb3ea6b..1d10efd 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,9 +10,9 @@
 }
 
 void test() {
-  void f<@Foo(/*@ typeArgs=String* */ const []) T>() {}
-  var /*@ type=<T extends Object* = dynamic>() ->* Null */ x =
-      <@Foo(/*@ typeArgs=String* */ const []) T> /*@ returnType=Null */ () {};
+  void f<@Foo(/*@typeArgs=String*/ const []) T>() {}
+  var /*@type=<T extends Object? = dynamic>() -> Null*/ x =
+      <@Foo(/*@typeArgs=String*/ const []) T> /*@ returnType=Null */ () {};
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.textual_outline.expect
index 5d83904..d40f333 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.textual_outline_modelled.expect
index 92182d0..0818562 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.expect
index 59529f1..b650eaa 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  function f<@#C1 T extends core::Object* = dynamic>() → void {}
-  <T extends core::Object* = dynamic>() →* Null x = <@#C1 T extends core::Object* = dynamic>() → Null {};
+  function f<@#C1 T extends core::Object? = dynamic>() → void {}
+  <T extends core::Object? = dynamic>() → Null x = <@#C1 T extends core::Object? = dynamic>() → Null {};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.modular.expect
index 59529f1..b650eaa 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  function f<@#C1 T extends core::Object* = dynamic>() → void {}
-  <T extends core::Object* = dynamic>() →* Null x = <@#C1 T extends core::Object* = dynamic>() → Null {};
+  function f<@#C1 T extends core::Object? = dynamic>() → void {}
+  <T extends core::Object? = dynamic>() → Null x = <@#C1 T extends core::Object? = dynamic>() → Null {};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.outline.expect
index 434e2c5..1e4e2e1 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.transformed.expect
index 59529f1..b650eaa 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  function f<@#C1 T extends core::Object* = dynamic>() → void {}
-  <T extends core::Object* = dynamic>() →* Null x = <@#C1 T extends core::Object* = dynamic>() → Null {};
+  function f<@#C1 T extends core::Object? = dynamic>() → void {}
+  <T extends core::Object? = dynamic>() → Null x = <@#C1 T extends core::Object? = dynamic>() → Null {};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart
index d23836f2..6158bc5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
   const Foo(List<String> l);
 }
 
-@Foo(/*@ typeArgs=String* */ const [])
+@Foo(/*@typeArgs=String*/ const [])
 typedef void F();
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.textual_outline.expect
index 8c597df..e7416ab 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.textual_outline_modelled.expect
index 47100a9..7d31ff1 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.expect
index 17384f4..b68c2bb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @#C1
-typedef F = () →* void;
+typedef F = () → void;
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.modular.expect
index 17384f4..b68c2bb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @#C1
-typedef F = () →* void;
+typedef F = () → void;
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.outline.expect
index a88013f..5e3500c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-@self::Foo::•(const <core::String*>[])
-typedef F = () →* void;
+@self::Foo::•(const <core::String>[])
+typedef F = () → void;
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.transformed.expect
index 17384f4..b68c2bb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @#C1
-typedef F = () →* void;
+typedef F = () → void;
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::List<core::String*>* l) → self::Foo*
+  const constructor •(core::List<core::String> l) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart
index d57ee4f..b294ba1 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void test() {
   List<int> l;
-  l = /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"];
-  l = (l = /*@ typeArgs=int* */ [1]);
+  l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"];
+  l = (l = /*@typeArgs=int*/ [1]);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.textual_outline.expect
index dfdb7cb..a6bcf94 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void test() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.textual_outline_modelled.expect
index 7d0b674..72a3ba0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.expect
index c16d9c4..377b16c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   l = /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"];
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"];
+//                                                                     ^
 //
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::List<core::int*>* l;
-  l = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  l = /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
-                                                                       ^" in "hello" as{TypeError} core::int*];
-  l = l = <core::int*>[1];
+  core::List<core::int> l;
+  l = <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int];
+  l = l = <core::int>[1];
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.modular.expect
index c16d9c4..377b16c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.modular.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   l = /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"];
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"];
+//                                                                     ^
 //
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::List<core::int*>* l;
-  l = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  l = /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
-                                                                       ^" in "hello" as{TypeError} core::int*];
-  l = l = <core::int*>[1];
+  core::List<core::int> l;
+  l = <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int];
+  l = l = <core::int>[1];
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.outline.expect
index c74ce2b..01b7bf5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.transformed.expect
index 4f1b279..1234982 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.transformed.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   l = /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"];
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"];
+//                                                                     ^
 //
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::List<core::int*>* l;
-  l = core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  l = /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
-                                                                       ^" in "hello" as{TypeError} core::int*);
-  l = l = core::_GrowableList::_literal1<core::int*>(1);
+  core::List<core::int> l;
+  l = core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
+  l = l = core::_GrowableList::_literal1<core::int>(1);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart
index 4ebd7ac..4baff59 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
 
 Future main() async {
   dynamic d;
-  List<int> l0 = await /*@ typeArgs=int* */ [/*info:DYNAMIC_CAST*/ d];
-  List<int> l1 = await new /*@ typeArgs=List<int*>* */ Future.value(
-      /*@ typeArgs=int* */ [d]);
+  List<int> l0 = await /*@typeArgs=int*/ [/*info:DYNAMIC_CAST*/ d];
+  List<int> l1 =
+      await new /*@typeArgs=List<int>*/ Future.value(/*@typeArgs=int*/ [d]);
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.textual_outline.expect
index 43e5899..122c5de 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.textual_outline_modelled.expect
index 43e5899..122c5de 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.expect
index 031ded2..52c1ca8 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method main() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
+static method main() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
   dynamic d;
-  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*]);
+  core::List<core::int> l0 = await<core::int>[d as{TypeError,ForDynamic,ForNonNullableByDefault} core::int];
+  core::List<core::int> l1 = await asy::Future::value<core::List<core::int>>(<core::int>[d as{TypeError,ForDynamic,ForNonNullableByDefault} core::int]);
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.modular.expect
index 031ded2..52c1ca8 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method main() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
+static method main() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
   dynamic d;
-  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*]);
+  core::List<core::int> l0 = await<core::int>[d as{TypeError,ForDynamic,ForNonNullableByDefault} core::int];
+  core::List<core::int> l1 = await asy::Future::value<core::List<core::int>>(<core::int>[d as{TypeError,ForDynamic,ForNonNullableByDefault} core::int]);
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.outline.expect
index 55795d5..e7fb778 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 
 import "dart:async";
 
-static method main() → asy::Future<dynamic>* async 
+static method main() → asy::Future<dynamic> async 
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect
index 9b9355c..80948f4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method main() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
+static method main() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
   dynamic d;
-  core::List<core::int*>* l0 = await core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*);
-  core::List<core::int*>* l1 = await asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*));
+  core::List<core::int> l0 = await core::_GrowableList::_literal1<core::int>(d as{TypeError,ForDynamic,ForNonNullableByDefault} core::int);
+  core::List<core::int> l1 = await asy::Future::value<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(d as{TypeError,ForDynamic,ForNonNullableByDefault} core::int));
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart
index ae50255..7718b3a 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart
@@ -1,37 +1,37 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
 abstract class MyStream<T> extends Stream<T> {
-  factory MyStream() => null;
+  factory MyStream() => throw '';
 }
 
-T F<T>() => null;
+T F<T>() => throw '';
 
 Future f() async {
   dynamic d;
   Object o;
-  for (var /*@ type=dynamic */ x in /*@ typeArgs=Iterable<dynamic>* */ F()) {}
-  for (dynamic x in /*@ typeArgs=Iterable<dynamic>* */ F()) {}
-  for (Object x in /*@ typeArgs=Iterable<Object*>* */ F()) {}
-  for (d in /*@ typeArgs=Iterable<dynamic>* */ F()) {}
-  for (o in /*@ typeArgs=Iterable<Object*>* */ F()) {}
-  await for (var /*@ type=dynamic */ x in /*@ typeArgs=Stream<dynamic>* */ F()) {}
-  await for (dynamic x in /*@ typeArgs=Stream<dynamic>* */ F()) {}
-  await for (Object x in /*@ typeArgs=Stream<Object*>* */ F()) {}
-  await for (d in /*@ typeArgs=Stream<dynamic>* */ F()) {}
-  await for (o in /*@ typeArgs=Stream<Object*>* */ F()) {}
+  for (var /*@type=Object?*/ x in /*@typeArgs=Iterable<Object?>*/ F()) {}
+  for (dynamic x in /*@typeArgs=Iterable<dynamic>*/ F()) {}
+  for (Object x in /*@typeArgs=Iterable<Object>*/ F()) {}
+  for (d in /*@typeArgs=Iterable<dynamic>*/ F()) {}
+  for (o in /*@typeArgs=Iterable<Object>*/ F()) {}
+  await for (var /*@type=Object?*/ x in /*@typeArgs=Stream<Object?>*/ F()) {}
+  await for (dynamic x in /*@typeArgs=Stream<dynamic>*/ F()) {}
+  await for (Object x in /*@typeArgs=Stream<Object>*/ F()) {}
+  await for (d in /*@typeArgs=Stream<dynamic>*/ F()) {}
+  await for (o in /*@typeArgs=Stream<Object>*/ F()) {}
 }
 
 Future main() async {
-  for (int x in /*@ typeArgs=int* */ [1, 2, 3]) {}
-  for (num x in /*@ typeArgs=num* */ [1, 2, 3]) {}
-  for (var /*@ type=int* */ x in /*@ typeArgs=int* */ [1, 2, 3]) {}
-  await for (int x in new /*@ typeArgs=int* */ MyStream()) {}
-  await for (var /*@ type=int* */ x in new MyStream<int>()) {}
+  for (int x in /*@typeArgs=int*/ [1, 2, 3]) {}
+  for (num x in /*@typeArgs=num*/ [1, 2, 3]) {}
+  for (var /*@type=int*/ x in /*@typeArgs=int*/ [1, 2, 3]) {}
+  await for (int x in new /*@typeArgs=int*/ MyStream()) {}
+  await for (var /*@type=int*/ x in new MyStream<int>()) {}
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.textual_outline.expect
index 8927e57..7acdb8a 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
 abstract class MyStream<T> extends Stream<T> {
-  factory MyStream() => null;
+  factory MyStream() => throw '';
 }
 
-T F<T>() => null;
+T F<T>() => throw '';
 Future f() async {}
 Future main() async {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.textual_outline_modelled.expect
index 036efeb..208f895 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
 Future f() async {}
 Future main() async {}
-T F<T>() => null;
+T F<T>() => throw '';
 
 abstract class MyStream<T> extends Stream<T> {
-  factory MyStream() => null;
+  factory MyStream() => throw '';
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.expect
index 6d06f17..c9c2491 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.expect
@@ -1,105 +1,53 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
-  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
-    return null;
-  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
-  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
-  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
-  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
-  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
-  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
-  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
-  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
-  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
-  abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
-  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
-  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
-  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
-  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
-  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
-  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
-  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
-  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
-  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
-  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
-  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
-  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
-  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
-  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
-  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
-  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
-  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
-  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
-  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
+abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
+  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
+    return throw "";
 }
-static method F<T extends core::Object* = dynamic>() → self::F::T*
-  return null;
-static method f() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
+static method F<T extends core::Object? = dynamic>() → self::F::T%
+  return throw "";
+static method f() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
   dynamic d;
-  core::Object* o;
-  for (dynamic x in self::F<core::Iterable<dynamic>*>()) {
+  core::Object o;
+  for (core::Object? x in self::F<core::Iterable<core::Object?>>()) {
   }
-  for (dynamic x in self::F<core::Iterable<dynamic>*>()) {
+  for (dynamic x in self::F<core::Iterable<dynamic>>()) {
   }
-  for (core::Object* x in self::F<core::Iterable<core::Object*>*>()) {
+  for (core::Object x in self::F<core::Iterable<core::Object>>()) {
   }
-  for (final dynamic #t1 in self::F<core::Iterable<dynamic>*>()) {
+  for (final dynamic #t1 in self::F<core::Iterable<dynamic>>()) {
     d = #t1;
   }
-  for (final core::Object* #t2 in self::F<core::Iterable<core::Object*>*>()) {
+  for (final core::Object #t2 in self::F<core::Iterable<core::Object>>()) {
     o = #t2;
   }
-  await for (dynamic x in self::F<asy::Stream<dynamic>*>()) {
+  await for (core::Object? x in self::F<asy::Stream<core::Object?>>()) {
   }
-  await for (dynamic x in self::F<asy::Stream<dynamic>*>()) {
+  await for (dynamic x in self::F<asy::Stream<dynamic>>()) {
   }
-  await for (core::Object* x in self::F<asy::Stream<core::Object*>*>()) {
+  await for (core::Object x in self::F<asy::Stream<core::Object>>()) {
   }
-  await for (final dynamic #t3 in self::F<asy::Stream<dynamic>*>()) {
+  await for (final dynamic #t3 in self::F<asy::Stream<dynamic>>()) {
     d = #t3;
   }
-  await for (final core::Object* #t4 in self::F<asy::Stream<core::Object*>*>()) {
+  await for (final core::Object #t4 in self::F<asy::Stream<core::Object>>()) {
     o = #t4;
   }
 }
-static method main() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
-  for (core::int* x in <core::int*>[1, 2, 3]) {
+static method main() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
+  for (core::int x in <core::int>[1, 2, 3]) {
   }
-  for (core::num* x in <core::num*>[1, 2, 3]) {
+  for (core::num x in <core::num>[1, 2, 3]) {
   }
-  for (core::int* x in <core::int*>[1, 2, 3]) {
+  for (core::int x in <core::int>[1, 2, 3]) {
   }
-  await for (core::int* x in self::MyStream::•<core::int*>()) {
+  await for (core::int x in self::MyStream::•<core::int>()) {
   }
-  await for (core::int* x in self::MyStream::•<core::int*>()) {
+  await for (core::int x in self::MyStream::•<core::int>()) {
   }
 }
-
-constants  {
-  #C1 = null
-  #C2 = ""
-}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.modular.expect
index 6d06f17..c9c2491 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.modular.expect
@@ -1,105 +1,53 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
-  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
-    return null;
-  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
-  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
-  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
-  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
-  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
-  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
-  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
-  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
-  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
-  abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
-  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
-  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
-  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
-  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
-  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
-  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
-  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
-  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
-  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
-  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
-  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
-  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
-  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
-  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
-  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
-  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
-  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
-  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
-  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
+abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
+  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
+    return throw "";
 }
-static method F<T extends core::Object* = dynamic>() → self::F::T*
-  return null;
-static method f() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
+static method F<T extends core::Object? = dynamic>() → self::F::T%
+  return throw "";
+static method f() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
   dynamic d;
-  core::Object* o;
-  for (dynamic x in self::F<core::Iterable<dynamic>*>()) {
+  core::Object o;
+  for (core::Object? x in self::F<core::Iterable<core::Object?>>()) {
   }
-  for (dynamic x in self::F<core::Iterable<dynamic>*>()) {
+  for (dynamic x in self::F<core::Iterable<dynamic>>()) {
   }
-  for (core::Object* x in self::F<core::Iterable<core::Object*>*>()) {
+  for (core::Object x in self::F<core::Iterable<core::Object>>()) {
   }
-  for (final dynamic #t1 in self::F<core::Iterable<dynamic>*>()) {
+  for (final dynamic #t1 in self::F<core::Iterable<dynamic>>()) {
     d = #t1;
   }
-  for (final core::Object* #t2 in self::F<core::Iterable<core::Object*>*>()) {
+  for (final core::Object #t2 in self::F<core::Iterable<core::Object>>()) {
     o = #t2;
   }
-  await for (dynamic x in self::F<asy::Stream<dynamic>*>()) {
+  await for (core::Object? x in self::F<asy::Stream<core::Object?>>()) {
   }
-  await for (dynamic x in self::F<asy::Stream<dynamic>*>()) {
+  await for (dynamic x in self::F<asy::Stream<dynamic>>()) {
   }
-  await for (core::Object* x in self::F<asy::Stream<core::Object*>*>()) {
+  await for (core::Object x in self::F<asy::Stream<core::Object>>()) {
   }
-  await for (final dynamic #t3 in self::F<asy::Stream<dynamic>*>()) {
+  await for (final dynamic #t3 in self::F<asy::Stream<dynamic>>()) {
     d = #t3;
   }
-  await for (final core::Object* #t4 in self::F<asy::Stream<core::Object*>*>()) {
+  await for (final core::Object #t4 in self::F<asy::Stream<core::Object>>()) {
     o = #t4;
   }
 }
-static method main() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
-  for (core::int* x in <core::int*>[1, 2, 3]) {
+static method main() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
+  for (core::int x in <core::int>[1, 2, 3]) {
   }
-  for (core::num* x in <core::num*>[1, 2, 3]) {
+  for (core::num x in <core::num>[1, 2, 3]) {
   }
-  for (core::int* x in <core::int*>[1, 2, 3]) {
+  for (core::int x in <core::int>[1, 2, 3]) {
   }
-  await for (core::int* x in self::MyStream::•<core::int*>()) {
+  await for (core::int x in self::MyStream::•<core::int>()) {
   }
-  await for (core::int* x in self::MyStream::•<core::int*>()) {
+  await for (core::int x in self::MyStream::•<core::int>()) {
   }
 }
-
-constants  {
-  #C1 = null
-  #C2 = ""
-}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.outline.expect
index 8b72842..5c80fc4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.outline.expect
@@ -1,64 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
-  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
+abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
+  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
     ;
-  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
-  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
-  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
-  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
-  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
-  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
-  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
-  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
-  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
-  abstract member-signature method join([core::String* separator]) → asy::Future<core::String*>*; -> asy::Stream::join
-  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
-  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
-  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
-  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
-  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
-  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
-  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
-  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
-  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
-  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
-  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
-  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
-  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
-  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
-  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
-  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
-  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
-  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
-  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError, () →* void onDone, core::bool* cancelOnError}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
 }
-static method F<T extends core::Object* = dynamic>() → self::F::T*
+static method F<T extends core::Object? = dynamic>() → self::F::T%
   ;
-static method f() → asy::Future<dynamic>* async 
+static method f() → asy::Future<dynamic> async 
   ;
-static method main() → asy::Future<dynamic>* async 
+static method main() → asy::Future<dynamic> async 
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
index e9a5f94..2973ad5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
@@ -1,89 +1,42 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
-  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
-    return null;
-  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
-  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
-  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
-  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
-  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
-  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
-  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
-  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
-  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
-  abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
-  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
-  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
-  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
-  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
-  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
-  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
-  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
-  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
-  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
-  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
-  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
-  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
-  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
-  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
-  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
-  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
-  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
-  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
-  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
+abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
+  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
+    return throw "";
 }
-static method F<T extends core::Object* = dynamic>() → self::F::T*
-  return null;
-static method f() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
+static method F<T extends core::Object? = dynamic>() → self::F::T%
+  return throw "";
+static method f() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
   dynamic d;
-  core::Object* o;
+  core::Object o;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = self::F<core::Iterable<dynamic>*>().{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<core::Object?> :sync-for-iterator = self::F<core::Iterable<core::Object?>>().{core::Iterable::iterator}{core::Iterator<core::Object?>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      core::Object? x = :sync-for-iterator.{core::Iterator::current}{core::Object?};
+      {}
+    }
+  }
+  {
+    core::Iterator<dynamic> :sync-for-iterator = self::F<core::Iterable<dynamic>>().{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {}
     }
   }
   {
-    core::Iterator<dynamic>* :sync-for-iterator = self::F<core::Iterable<dynamic>*>().{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<core::Object> :sync-for-iterator = self::F<core::Iterable<core::Object>>().{core::Iterable::iterator}{core::Iterator<core::Object>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      core::Object x = :sync-for-iterator.{core::Iterator::current}{core::Object};
       {}
     }
   }
   {
-    core::Iterator<core::Object*>* :sync-for-iterator = self::F<core::Iterable<core::Object*>*>().{core::Iterable::iterator}{core::Iterator<core::Object*>*};
-    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::Object* x = :sync-for-iterator.{core::Iterator::current}{core::Object*};
-      {}
-    }
-  }
-  {
-    core::Iterator<dynamic>* :sync-for-iterator = self::F<core::Iterable<dynamic>*>().{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = self::F<core::Iterable<dynamic>>().{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       final dynamic #t1 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
@@ -92,29 +45,29 @@
     }
   }
   {
-    core::Iterator<core::Object*>* :sync-for-iterator = self::F<core::Iterable<core::Object*>*>().{core::Iterable::iterator}{core::Iterator<core::Object*>*};
+    core::Iterator<core::Object> :sync-for-iterator = self::F<core::Iterable<core::Object>>().{core::Iterable::iterator}{core::Iterator<core::Object>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final core::Object* #t2 = :sync-for-iterator.{core::Iterator::current}{core::Object*};
+      final core::Object #t2 = :sync-for-iterator.{core::Iterator::current}{core::Object};
       {
         o = #t2;
       }
     }
   }
   {
-    asy::Stream<dynamic>* :stream = self::F<asy::Stream<dynamic>*>();
-    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    asy::Stream<core::Object?> :stream = self::F<asy::Stream<core::Object?>>();
+    asy::_StreamIterator<core::Object?>? :for-iterator = new asy::_StreamIterator::•<core::Object?>(:stream);
     try
       while (let dynamic #t3 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-        dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+        core::Object? x = :for-iterator.{asy::_StreamIterator::current}{core::Object?};
         {}
       }
     finally
-      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object?>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
   {
-    asy::Stream<dynamic>* :stream = self::F<asy::Stream<dynamic>*>();
-    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    asy::Stream<dynamic> :stream = self::F<asy::Stream<dynamic>>();
+    asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
     try
       while (let dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
         dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
@@ -125,20 +78,20 @@
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
   {
-    asy::Stream<core::Object*>* :stream = self::F<asy::Stream<core::Object*>*>();
-    asy::_StreamIterator<core::Object*>* :for-iterator = new asy::_StreamIterator::•<core::Object*>(:stream);
+    asy::Stream<core::Object> :stream = self::F<asy::Stream<core::Object>>();
+    asy::_StreamIterator<core::Object>? :for-iterator = new asy::_StreamIterator::•<core::Object>(:stream);
     try
       while (let dynamic #t5 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-        core::Object* x = :for-iterator.{asy::_StreamIterator::current}{core::Object*};
+        core::Object x = :for-iterator.{asy::_StreamIterator::current}{core::Object};
         {}
       }
     finally
-      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object*>?} == null))
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
   {
-    asy::Stream<dynamic>* :stream = self::F<asy::Stream<dynamic>*>();
-    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    asy::Stream<dynamic> :stream = self::F<asy::Stream<dynamic>>();
+    asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
     try
       while (let dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
         final dynamic #t7 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
@@ -151,69 +104,64 @@
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
   {
-    asy::Stream<core::Object*>* :stream = self::F<asy::Stream<core::Object*>*>();
-    asy::_StreamIterator<core::Object*>* :for-iterator = new asy::_StreamIterator::•<core::Object*>(:stream);
+    asy::Stream<core::Object> :stream = self::F<asy::Stream<core::Object>>();
+    asy::_StreamIterator<core::Object>? :for-iterator = new asy::_StreamIterator::•<core::Object>(:stream);
     try
       while (let dynamic #t8 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-        final core::Object* #t9 = :for-iterator.{asy::_StreamIterator::current}{core::Object*};
+        final core::Object #t9 = :for-iterator.{asy::_StreamIterator::current}{core::Object};
         {
           o = #t9;
         }
       }
     finally
-      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object*>?} == null))
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
 }
-static method main() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
+static method main() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
   {
-    core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+    core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal3<core::int>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::int* x = :sync-for-iterator.{core::Iterator::current}{core::int*};
+      core::int x = :sync-for-iterator.{core::Iterator::current}{core::int};
       {}
     }
   }
   {
-    core::Iterator<core::num*>* :sync-for-iterator = core::_GrowableList::_literal3<core::num*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::num*>*};
+    core::Iterator<core::num> :sync-for-iterator = core::_GrowableList::_literal3<core::num>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::num>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::num* x = :sync-for-iterator.{core::Iterator::current}{core::num*};
+      core::num x = :sync-for-iterator.{core::Iterator::current}{core::num};
       {}
     }
   }
   {
-    core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+    core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal3<core::int>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::int* x = :sync-for-iterator.{core::Iterator::current}{core::int*};
+      core::int x = :sync-for-iterator.{core::Iterator::current}{core::int};
       {}
     }
   }
   {
-    self::MyStream<core::int*>* :stream = self::MyStream::•<core::int*>();
-    asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
+    self::MyStream<core::int> :stream = self::MyStream::•<core::int>();
+    asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
     try
       while (let dynamic #t10 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-        core::int* x = :for-iterator.{asy::_StreamIterator::current}{core::int*};
+        core::int x = :for-iterator.{asy::_StreamIterator::current}{core::int};
         {}
       }
     finally
-      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null))
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
   {
-    self::MyStream<core::int*>* :stream = self::MyStream::•<core::int*>();
-    asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
+    self::MyStream<core::int> :stream = self::MyStream::•<core::int>();
+    asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
     try
       while (let dynamic #t11 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-        core::int* x = :for-iterator.{asy::_StreamIterator::current}{core::int*};
+        core::int x = :for-iterator.{asy::_StreamIterator::current}{core::int};
         {}
       }
     finally
-      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null))
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
 }
-
-constants  {
-  #C1 = null
-  #C2 = ""
-}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart
index 95feae8..ce900d0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,14 +9,14 @@
 
 class Foo {
   List<int> x;
-  Foo([this.x = /*@ typeArgs=int* */ const [1]]);
-  Foo.named([List<int> x = /*@ typeArgs=int* */ const [1]]);
+  Foo([this.x = /*@typeArgs=int*/ const [1]]);
+  Foo.named([List<int> x = /*@typeArgs=int*/ const [1]]) : this.x = x;
 }
 
-void f([List<int> l = /*@ typeArgs=int* */ const [1]]) {}
+void f([List<int> l = /*@typeArgs=int*/ const [1]]) {}
 // We do this inference in an early task but don't preserve the infos.
-Function2<List<int>, String> g = /*@ returnType=String* */ (
-        [/*@ type=List<int*>* */ llll = /*@ typeArgs=int* */ const [1]]) =>
+Function2<List<int>, String> g = /*@returnType=String*/ (
+        [/*@type=List<int>*/ llll = /*@typeArgs=int*/ const [1]]) =>
     "hello";
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.textual_outline.expect
index bdfd52e..27d0ae8 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef T Function2<S, T>([S x]);
@@ -6,7 +5,7 @@
 class Foo {
   List<int> x;
   Foo([this.x = const [1]]);
-  Foo.named([List<int> x = const [1]]);
+  Foo.named([List<int> x = const [1]]) : this.x = x;
 }
 
 void f([List<int> l = const [1]]) {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.textual_outline_modelled.expect
index 450e126..86b443e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.textual_outline_modelled.expect
@@ -1,11 +1,10 @@
-// @dart = 2.9
 library test;
 
 Function2<List<int>, String> g = ([llll = const [1]]) => "hello";
 
 class Foo {
   Foo([this.x = const [1]]);
-  Foo.named([List<int> x = const [1]]);
+  Foo.named([List<int> x = const [1]]) : this.x = x;
   List<int> x;
 }
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.expect
index 1283bb2..72f1d8b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = ([S*]) →* T*;
+typedef Function2<contravariant S extends core::Object? = dynamic, T extends core::Object? = dynamic> = ([S%]) → T%;
 class Foo extends core::Object {
-  field core::List<core::int*>* x;
-  constructor •([core::List<core::int*>* x = #C2]) → self::Foo*
+  field core::List<core::int> x;
+  constructor •([core::List<core::int> x = #C2]) → self::Foo
     : self::Foo::x = x, super core::Object::•()
     ;
-  constructor named([core::List<core::int*>* x = #C2]) → self::Foo*
-    : self::Foo::x = null, super core::Object::•()
+  constructor named([core::List<core::int> x = #C2]) → self::Foo
+    : self::Foo::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field ([core::List<core::int*>*]) →* core::String* g = ([core::List<core::int*>* llll = #C2]) → core::String* => "hello";
-static method f([core::List<core::int*>* l = #C2]) → void {}
+static field ([core::List<core::int>]) → core::String g = ([core::List<core::int> llll = #C2]) → core::String => "hello";
+static method f([core::List<core::int> l = #C2]) → void {}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.modular.expect
index 1283bb2..72f1d8b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.modular.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = ([S*]) →* T*;
+typedef Function2<contravariant S extends core::Object? = dynamic, T extends core::Object? = dynamic> = ([S%]) → T%;
 class Foo extends core::Object {
-  field core::List<core::int*>* x;
-  constructor •([core::List<core::int*>* x = #C2]) → self::Foo*
+  field core::List<core::int> x;
+  constructor •([core::List<core::int> x = #C2]) → self::Foo
     : self::Foo::x = x, super core::Object::•()
     ;
-  constructor named([core::List<core::int*>* x = #C2]) → self::Foo*
-    : self::Foo::x = null, super core::Object::•()
+  constructor named([core::List<core::int> x = #C2]) → self::Foo
+    : self::Foo::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field ([core::List<core::int*>*]) →* core::String* g = ([core::List<core::int*>* llll = #C2]) → core::String* => "hello";
-static method f([core::List<core::int*>* l = #C2]) → void {}
+static field ([core::List<core::int>]) → core::String g = ([core::List<core::int> llll = #C2]) → core::String => "hello";
+static method f([core::List<core::int> l = #C2]) → void {}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.outline.expect
index a132459..c298228 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.outline.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = ([S*]) →* T*;
+typedef Function2<contravariant S extends core::Object? = dynamic, T extends core::Object? = dynamic> = ([S%]) → T%;
 class Foo extends core::Object {
-  field core::List<core::int*>* x;
-  constructor •([core::List<core::int*>* x = const <core::int*>[1]]) → self::Foo*
+  field core::List<core::int> x;
+  constructor •([core::List<core::int> x = const <core::int>[1]]) → self::Foo
     ;
-  constructor named([core::List<core::int*>* x = const <core::int*>[1]]) → self::Foo*
+  constructor named([core::List<core::int> x = const <core::int>[1]]) → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field ([core::List<core::int*>*]) →* core::String* g;
-static method f([has-declared-initializer core::List<core::int*>* l]) → void
+static field ([core::List<core::int>]) → core::String g;
+static method f([has-declared-initializer core::List<core::int> l]) → void
   ;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: ListLiteral @ org-dartlang-testcase:///downwards_inference_initializing_formal_default_formal.dart:12:38 -> ListConstant(const <int*>[1])
-Evaluated: ListLiteral @ org-dartlang-testcase:///downwards_inference_initializing_formal_default_formal.dart:13:49 -> ListConstant(const <int*>[1])
+Evaluated: ListLiteral @ org-dartlang-testcase:///downwards_inference_initializing_formal_default_formal.dart:12:35 -> ListConstant(const <int*>[1])
+Evaluated: ListLiteral @ org-dartlang-testcase:///downwards_inference_initializing_formal_default_formal.dart:13:46 -> ListConstant(const <int*>[1])
 Extra constant evaluation: evaluated: 2, effectively constant: 2
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.transformed.expect
index 1283bb2..72f1d8b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.transformed.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = ([S*]) →* T*;
+typedef Function2<contravariant S extends core::Object? = dynamic, T extends core::Object? = dynamic> = ([S%]) → T%;
 class Foo extends core::Object {
-  field core::List<core::int*>* x;
-  constructor •([core::List<core::int*>* x = #C2]) → self::Foo*
+  field core::List<core::int> x;
+  constructor •([core::List<core::int> x = #C2]) → self::Foo
     : self::Foo::x = x, super core::Object::•()
     ;
-  constructor named([core::List<core::int*>* x = #C2]) → self::Foo*
-    : self::Foo::x = null, super core::Object::•()
+  constructor named([core::List<core::int> x = #C2]) → self::Foo
+    : self::Foo::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field ([core::List<core::int*>*]) →* core::String* g = ([core::List<core::int*>* llll = #C2]) → core::String* => "hello";
-static method f([core::List<core::int*>* l = #C2]) → void {}
+static field ([core::List<core::int>]) → core::String g = ([core::List<core::int> llll = #C2]) → core::String => "hello";
+static method f([core::List<core::int> l = #C2]) → void {}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart
index 5cba3e8..ff9d767 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart
@@ -1,19 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A {
-  B<int> b;
+  late B<int> b;
 }
 
 class B<T> {
   B(T x);
 }
 
-var t1 = new A().. /*@target=A.b*/ b = new /*@ typeArgs=int* */ B(1);
-var t2 = <B<int>>[new /*@ typeArgs=int* */ B(2)];
+var t1 = new A().. /*@target=A.b*/ b = new /*@typeArgs=int*/ B(1);
+var t2 = <B<int>>[new /*@typeArgs=int*/ B(2)];
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.textual_outline.expect
index 85e66f8..8ab9e1a 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class A {
-  B<int> b;
+  late B<int> b;
 }
 
 class B<T> {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.textual_outline_modelled.expect
index 142e356..5c360c1 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class A {
-  B<int> b;
+  late B<int> b;
 }
 
 class B<T> {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.expect
index c66599a..ddce8f7 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B<core::int*>* b = null;
-  synthetic constructor •() → self::A*
+  late field self::B<core::int> b;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B::T* x) → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B::T% x) → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* t1 = let final self::A* #t1 = new self::A::•() in block {
-  #t1.{self::A::b} = new self::B::•<core::int*>(1);
+static field self::A t1 = let final self::A #t1 = new self::A::•() in block {
+  #t1.{self::A::b} = new self::B::•<core::int>(1);
 } =>#t1;
-static field core::List<self::B<core::int*>*>* t2 = <self::B<core::int*>*>[new self::B::•<core::int*>(2)];
+static field core::List<self::B<core::int>> t2 = <self::B<core::int>>[new self::B::•<core::int>(2)];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.modular.expect
index c66599a..ddce8f7 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.modular.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B<core::int*>* b = null;
-  synthetic constructor •() → self::A*
+  late field self::B<core::int> b;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B::T* x) → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B::T% x) → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* t1 = let final self::A* #t1 = new self::A::•() in block {
-  #t1.{self::A::b} = new self::B::•<core::int*>(1);
+static field self::A t1 = let final self::A #t1 = new self::A::•() in block {
+  #t1.{self::A::b} = new self::B::•<core::int>(1);
 } =>#t1;
-static field core::List<self::B<core::int*>*>* t2 = <self::B<core::int*>*>[new self::B::•<core::int*>(2)];
+static field core::List<self::B<core::int>> t2 = <self::B<core::int>>[new self::B::•<core::int>(2)];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.outline.expect
index d5b65c4..5f8aff4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.outline.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B<core::int*>* b;
-  synthetic constructor •() → self::A*
+  late field self::B<core::int> b;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B::T* x) → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B::T% x) → self::B<self::B::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* t1;
-static field core::List<self::B<core::int*>*>* t2;
+static field self::A t1;
+static field core::List<self::B<core::int>> t2;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.transformed.expect
index dd5383b..af752dc 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.transformed.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B<core::int*>* b = null;
-  synthetic constructor •() → self::A*
+  late field self::B<core::int> b;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B::T* x) → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B::T% x) → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* t1 = let final self::A* #t1 = new self::A::•() in block {
-  #t1.{self::A::b} = new self::B::•<core::int*>(1);
+static field self::A t1 = let final self::A #t1 = new self::A::•() in block {
+  #t1.{self::A::b} = new self::B::•<core::int>(1);
 } =>#t1;
-static field core::List<self::B<core::int*>*>* t2 = core::_GrowableList::_literal1<self::B<core::int*>*>(new self::B::•<core::int*>(2));
+static field core::List<self::B<core::int>> t2 = core::_GrowableList::_literal1<self::B<core::int>>(new self::B::•<core::int>(2));
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart
index 358dccc..aec027f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,6 +9,6 @@
   A(T x);
 }
 
-var t1 = <A<int>>[new /*@ typeArgs=int* */ A(1)];
+var t1 = <A<int>>[new /*@typeArgs=int*/ A(1)];
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.textual_outline.expect
index db8f06b..0c60385 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.textual_outline_modelled.expect
index 4191a01..84d90fc 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.expect
index 69f8074..50e399e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::A::T* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::A::T% x) → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::A<core::int*>*>* t1 = <self::A<core::int*>*>[new self::A::•<core::int*>(1)];
+static field core::List<self::A<core::int>> t1 = <self::A<core::int>>[new self::A::•<core::int>(1)];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.modular.expect
index 69f8074..50e399e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::A::T* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::A::T% x) → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::A<core::int*>*>* t1 = <self::A<core::int*>*>[new self::A::•<core::int*>(1)];
+static field core::List<self::A<core::int>> t1 = <self::A<core::int>>[new self::A::•<core::int>(1)];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.outline.expect
index 73c7a83..372daf9 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::A::T* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::A::T% x) → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::A<core::int*>*>* t1;
+static field core::List<self::A<core::int>> t1;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.transformed.expect
index 425c3c2..3a0b539 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::A::T* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::A::T% x) → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::A<core::int*>*>* t1 = core::_GrowableList::_literal1<self::A<core::int*>*>(new self::A::•<core::int*>(1));
+static field core::List<self::A<core::int>> t1 = core::_GrowableList::_literal1<self::A<core::int>>(new self::A::•<core::int>(1));
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart
index 32cc135..c9e4eaa 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,7 +10,7 @@
 }
 
 class F1 {
-  F1({List<int> a}) {}
+  F1({required List<int> a}) {}
 }
 
 class F2 {
@@ -22,60 +22,60 @@
 }
 
 class F4 {
-  F4({Iterable<Iterable<int>> a}) {}
+  F4({required Iterable<Iterable<int>> a}) {}
 }
 
 void test() {
-  new F0(/*@ typeArgs=int* */ []);
-  new F0(/*@ typeArgs=int* */ [3]);
+  new F0(/*@typeArgs=int*/ []);
+  new F0(/*@typeArgs=int*/ [3]);
   new F0(
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-  new F0(/*@ typeArgs=int* */ [
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+  new F0(/*@typeArgs=int*/ [
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
     3
   ]);
 
-  new F1(a: /*@ typeArgs=int* */ []);
-  new F1(a: /*@ typeArgs=int* */ [3]);
-  new F1(a: /*@ typeArgs=int* */ [
+  new F1(a: /*@typeArgs=int*/ []);
+  new F1(a: /*@typeArgs=int*/ [3]);
+  new F1(a: /*@typeArgs=int*/ [
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
   ]);
-  new F1(a: /*@ typeArgs=int* */ [
+  new F1(a: /*@typeArgs=int*/ [
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
     3
   ]);
 
-  new F2(/*@ typeArgs=int* */ []);
-  new F2(/*@ typeArgs=int* */ [3]);
+  new F2(/*@typeArgs=int*/ []);
+  new F2(/*@typeArgs=int*/ [3]);
   new F2(
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-  new F2(/*@ typeArgs=int* */ [
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+  new F2(/*@typeArgs=int*/ [
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
     3
   ]);
 
-  new F3(/*@ typeArgs=Iterable<int*>* */ []);
-  new F3(/*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [3]
+  new F3(/*@typeArgs=Iterable<int>*/ []);
+  new F3(/*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [3]
   ]);
-  new F3(/*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+  new F3(/*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
   ]);
-  new F3(/*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-    /*@ typeArgs=int* */ [3]
+  new F3(/*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+    /*@typeArgs=int*/ [3]
   ]);
 
-  new F4(a: /*@ typeArgs=Iterable<int*>* */ []);
-  new F4(a: /*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [3]
+  new F4(a: /*@typeArgs=Iterable<int>*/ []);
+  new F4(a: /*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [3]
   ]);
-  new F4(a: /*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+  new F4(a: /*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
   ]);
-  new F4(a: /*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-    /*@ typeArgs=int* */ [3]
+  new F4(a: /*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+    /*@typeArgs=int*/ [3]
   ]);
 }
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.textual_outline.expect
index 46e2c41..8f6abae 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class F0 {
@@ -6,7 +5,7 @@
 }
 
 class F1 {
-  F1({List<int> a}) {}
+  F1({required List<int> a}) {}
 }
 
 class F2 {
@@ -18,7 +17,7 @@
 }
 
 class F4 {
-  F4({Iterable<Iterable<int>> a}) {}
+  F4({required Iterable<Iterable<int>> a}) {}
 }
 
 void test() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.textual_outline_modelled.expect
index 80a1502..ab2e691 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class F0 {
@@ -6,7 +5,7 @@
 }
 
 class F1 {
-  F1({List<int> a}) {}
+  F1({required List<int> a}) {}
 }
 
 class F2 {
@@ -18,7 +17,7 @@
 }
 
 class F4 {
-  F4({Iterable<Iterable<int>> a}) {}
+  F4({required Iterable<Iterable<int>> a}) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.expect
index 3550c19..c762419 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
@@ -18,144 +18,94 @@
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
 import self as self;
 import "dart:core" as core;
 
 class F0 extends core::Object {
-  constructor •(core::List<core::int*>* a) → self::F0*
+  constructor •(core::List<core::int> a) → self::F0
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F1 extends core::Object {
-  constructor •({core::List<core::int*>* a = #C1}) → self::F1*
+  constructor •({required core::List<core::int> a = #C1}) → self::F1
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F2 extends core::Object {
-  constructor •(core::Iterable<core::int*>* a) → self::F2*
+  constructor •(core::Iterable<core::int> a) → self::F2
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F3 extends core::Object {
-  constructor •(core::Iterable<core::Iterable<core::int*>*>* a) → self::F3*
+  constructor •(core::Iterable<core::Iterable<core::int>> a) → self::F3
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F4 extends core::Object {
-  constructor •({core::Iterable<core::Iterable<core::int*>*>* a = #C1}) → self::F4*
+  constructor •({required core::Iterable<core::Iterable<core::int>> a = #C1}) → self::F4
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  new self::F0::•(<core::int*>[]);
-  new self::F0::•(<core::int*>[3]);
-  new self::F0::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                       ^" in "hello" as{TypeError} core::int*]);
-  new self::F0::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•(<core::int>[]);
+  new self::F0::•(<core::int>[3]);
+  new self::F0::•(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  new self::F0::•(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  new self::F1::•(a: <core::int*>[]);
-  new self::F1::•(a: <core::int*>[3]);
-  new self::F1::•(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  new self::F1::•(a: <core::int>[]);
+  new self::F1::•(a: <core::int>[3]);
+  new self::F1::•(a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                               ^" in "hello" as{TypeError} core::int*]);
-  new self::F1::•(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  new self::F1::•(a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  new self::F2::•(<core::int*>[]);
-  new self::F2::•(<core::int*>[3]);
-  new self::F2::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                       ^" in "hello" as{TypeError} core::int*]);
-  new self::F2::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  new self::F2::•(<core::int>[]);
+  new self::F2::•(<core::int>[3]);
+  new self::F2::•(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  new self::F2::•(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  new self::F3::•(<core::Iterable<core::int*>*>[]);
-  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[3]]);
-  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*]]);
-  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
-  new self::F4::•(a: <core::Iterable<core::int*>*>[]);
-  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[3]]);
-  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*]]);
-  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  new self::F3::•(<core::Iterable<core::int>>[]);
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[3]]);
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]]);
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], <core::int>[3]]);
+  new self::F4::•(a: <core::Iterable<core::int>>[]);
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[3]]);
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]]);
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], <core::int>[3]]);
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.modular.expect
index 3550c19..c762419 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
@@ -18,144 +18,94 @@
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
 import self as self;
 import "dart:core" as core;
 
 class F0 extends core::Object {
-  constructor •(core::List<core::int*>* a) → self::F0*
+  constructor •(core::List<core::int> a) → self::F0
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F1 extends core::Object {
-  constructor •({core::List<core::int*>* a = #C1}) → self::F1*
+  constructor •({required core::List<core::int> a = #C1}) → self::F1
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F2 extends core::Object {
-  constructor •(core::Iterable<core::int*>* a) → self::F2*
+  constructor •(core::Iterable<core::int> a) → self::F2
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F3 extends core::Object {
-  constructor •(core::Iterable<core::Iterable<core::int*>*>* a) → self::F3*
+  constructor •(core::Iterable<core::Iterable<core::int>> a) → self::F3
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F4 extends core::Object {
-  constructor •({core::Iterable<core::Iterable<core::int*>*>* a = #C1}) → self::F4*
+  constructor •({required core::Iterable<core::Iterable<core::int>> a = #C1}) → self::F4
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  new self::F0::•(<core::int*>[]);
-  new self::F0::•(<core::int*>[3]);
-  new self::F0::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                       ^" in "hello" as{TypeError} core::int*]);
-  new self::F0::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•(<core::int>[]);
+  new self::F0::•(<core::int>[3]);
+  new self::F0::•(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  new self::F0::•(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  new self::F1::•(a: <core::int*>[]);
-  new self::F1::•(a: <core::int*>[3]);
-  new self::F1::•(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  new self::F1::•(a: <core::int>[]);
+  new self::F1::•(a: <core::int>[3]);
+  new self::F1::•(a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                               ^" in "hello" as{TypeError} core::int*]);
-  new self::F1::•(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  new self::F1::•(a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  new self::F2::•(<core::int*>[]);
-  new self::F2::•(<core::int*>[3]);
-  new self::F2::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                       ^" in "hello" as{TypeError} core::int*]);
-  new self::F2::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  new self::F2::•(<core::int>[]);
+  new self::F2::•(<core::int>[3]);
+  new self::F2::•(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  new self::F2::•(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  new self::F3::•(<core::Iterable<core::int*>*>[]);
-  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[3]]);
-  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*]]);
-  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
-  new self::F4::•(a: <core::Iterable<core::int*>*>[]);
-  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[3]]);
-  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*]]);
-  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  new self::F3::•(<core::Iterable<core::int>>[]);
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[3]]);
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]]);
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], <core::int>[3]]);
+  new self::F4::•(a: <core::Iterable<core::int>>[]);
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[3]]);
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]]);
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], <core::int>[3]]);
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.outline.expect
index f77a3ad..72e6292 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.outline.expect
@@ -1,76 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class F0 extends core::Object {
-  constructor •(core::List<core::int*>* a) → self::F0*
+  constructor •(core::List<core::int> a) → self::F0
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F1 extends core::Object {
-  constructor •({core::List<core::int*>* a = null}) → self::F1*
+  constructor •({required core::List<core::int> a = null}) → self::F1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F2 extends core::Object {
-  constructor •(core::Iterable<core::int*>* a) → self::F2*
+  constructor •(core::Iterable<core::int> a) → self::F2
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F3 extends core::Object {
-  constructor •(core::Iterable<core::Iterable<core::int*>*>* a) → self::F3*
+  constructor •(core::Iterable<core::Iterable<core::int>> a) → self::F3
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F4 extends core::Object {
-  constructor •({core::Iterable<core::Iterable<core::int*>*>* a = null}) → self::F4*
+  constructor •({required core::Iterable<core::Iterable<core::int>> a = null}) → self::F4
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.transformed.expect
index e7bd5e3..95174f5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
@@ -18,144 +18,94 @@
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
 import self as self;
 import "dart:core" as core;
 
 class F0 extends core::Object {
-  constructor •(core::List<core::int*>* a) → self::F0*
+  constructor •(core::List<core::int> a) → self::F0
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F1 extends core::Object {
-  constructor •({core::List<core::int*>* a = #C1}) → self::F1*
+  constructor •({required core::List<core::int> a = #C1}) → self::F1
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F2 extends core::Object {
-  constructor •(core::Iterable<core::int*>* a) → self::F2*
+  constructor •(core::Iterable<core::int> a) → self::F2
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F3 extends core::Object {
-  constructor •(core::Iterable<core::Iterable<core::int*>*>* a) → self::F3*
+  constructor •(core::Iterable<core::Iterable<core::int>> a) → self::F3
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F4 extends core::Object {
-  constructor •({core::Iterable<core::Iterable<core::int*>*>* a = #C1}) → self::F4*
+  constructor •({required core::Iterable<core::Iterable<core::int>> a = #C1}) → self::F4
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  new self::F0::•(core::_GrowableList::•<core::int*>(0));
-  new self::F0::•(core::_GrowableList::_literal1<core::int*>(3));
-  new self::F0::•(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                       ^" in "hello" as{TypeError} core::int*));
-  new self::F0::•(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•(core::_GrowableList::•<core::int>(0));
+  new self::F0::•(core::_GrowableList::_literal1<core::int>(3));
+  new self::F0::•(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int));
+  new self::F0::•(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3));
-  new self::F1::•(a: core::_GrowableList::•<core::int*>(0));
-  new self::F1::•(a: core::_GrowableList::_literal1<core::int*>(3));
-  new self::F1::•(a: core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3));
+  new self::F1::•(a: core::_GrowableList::•<core::int>(0));
+  new self::F1::•(a: core::_GrowableList::_literal1<core::int>(3));
+  new self::F1::•(a: core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                               ^" in "hello" as{TypeError} core::int*));
-  new self::F1::•(a: core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int));
+  new self::F1::•(a: core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3));
-  new self::F2::•(core::_GrowableList::•<core::int*>(0));
-  new self::F2::•(core::_GrowableList::_literal1<core::int*>(3));
-  new self::F2::•(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                       ^" in "hello" as{TypeError} core::int*));
-  new self::F2::•(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3));
+  new self::F2::•(core::_GrowableList::•<core::int>(0));
+  new self::F2::•(core::_GrowableList::_literal1<core::int>(3));
+  new self::F2::•(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int));
+  new self::F2::•(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3));
-  new self::F3::•(core::_GrowableList::•<core::Iterable<core::int*>*>(0));
-  new self::F3::•(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F3::•(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*)));
-  new self::F3::•(core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*), core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F4::•(a: core::_GrowableList::•<core::Iterable<core::int*>*>(0));
-  new self::F4::•(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F4::•(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*)));
-  new self::F4::•(a: core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*), core::_GrowableList::_literal1<core::int*>(3)));
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3));
+  new self::F3::•(core::_GrowableList::•<core::Iterable<core::int>>(0));
+  new self::F3::•(core::_GrowableList::_literal1<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(3)));
+  new self::F3::•(core::_GrowableList::_literal1<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int)));
+  new self::F3::•(core::_GrowableList::_literal2<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int), core::_GrowableList::_literal1<core::int>(3)));
+  new self::F4::•(a: core::_GrowableList::•<core::Iterable<core::int>>(0));
+  new self::F4::•(a: core::_GrowableList::_literal1<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(3)));
+  new self::F4::•(a: core::_GrowableList::_literal1<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int)));
+  new self::F4::•(a: core::_GrowableList::_literal2<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int), core::_GrowableList::_literal1<core::int>(3)));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart
index e783c2b..07da96e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart
@@ -1,56 +1,56 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void f0(List<int> a) {}
-void f1({List<int> a}) {}
+void f1({required List<int> a}) {}
 void f2(Iterable<int> a) {}
 void f3(Iterable<Iterable<int>> a) {}
-void f4({Iterable<Iterable<int>> a}) {}
+void f4({required Iterable<Iterable<int>> a}) {}
 void test() {
-  f0(/*@ typeArgs=int* */ []);
-  f0(/*@ typeArgs=int* */ [3]);
-  f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-  f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
+  f0(/*@typeArgs=int*/ []);
+  f0(/*@typeArgs=int*/ [3]);
+  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
 
-  f1(a: /*@ typeArgs=int* */ []);
-  f1(a: /*@ typeArgs=int* */ [3]);
-  f1(a: /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-  f1(a: /*@ typeArgs=int* */ [
+  f1(a: /*@typeArgs=int*/ []);
+  f1(a: /*@typeArgs=int*/ [3]);
+  f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+  f1(a: /*@typeArgs=int*/ [
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
     3
   ]);
 
-  f2(/*@ typeArgs=int* */ []);
-  f2(/*@ typeArgs=int* */ [3]);
-  f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-  f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
+  f2(/*@typeArgs=int*/ []);
+  f2(/*@typeArgs=int*/ [3]);
+  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
 
-  f3(/*@ typeArgs=Iterable<int*>* */ []);
-  f3(/*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [3]
+  f3(/*@typeArgs=Iterable<int>*/ []);
+  f3(/*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [3]
   ]);
-  f3(/*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+  f3(/*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
   ]);
-  f3(/*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-    /*@ typeArgs=int* */ [3]
+  f3(/*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+    /*@typeArgs=int*/ [3]
   ]);
 
-  f4(a: /*@ typeArgs=Iterable<int*>* */ []);
-  f4(a: /*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [3]
+  f4(a: /*@typeArgs=Iterable<int>*/ []);
+  f4(a: /*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [3]
   ]);
-  f4(a: /*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+  f4(a: /*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
   ]);
-  f4(a: /*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-    /*@ typeArgs=int* */ [3]
+  f4(a: /*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+    /*@typeArgs=int*/ [3]
   ]);
 }
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.textual_outline.expect
index d154090..ca0da7e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 void f0(List<int> a) {}
-void f1({List<int> a}) {}
+void f1({required List<int> a}) {}
 void f2(Iterable<int> a) {}
 void f3(Iterable<Iterable<int>> a) {}
-void f4({Iterable<Iterable<int>> a}) {}
+void f4({required Iterable<Iterable<int>> a}) {}
 void test() {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.textual_outline_modelled.expect
index ba53e1c..8ce3846 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 main() {}
 void f0(List<int> a) {}
-void f1({List<int> a}) {}
+void f1({required List<int> a}) {}
 void f2(Iterable<int> a) {}
 void f3(Iterable<Iterable<int>> a) {}
-void f4({Iterable<Iterable<int>> a}) {}
+void f4({required Iterable<Iterable<int>> a}) {}
 void test() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.expect
index 5fd719d..e591145 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.expect
@@ -1,96 +1,96 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                       ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
-//                                                                       ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
+//                                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:74: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f1(a: /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                          ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                       ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                       ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
-//                                                                       ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
+//                                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method f0(core::List<core::int*>* a) → void {}
-static method f1({core::List<core::int*>* a = #C1}) → void {}
-static method f2(core::Iterable<core::int*>* a) → void {}
-static method f3(core::Iterable<core::Iterable<core::int*>*>* a) → void {}
-static method f4({core::Iterable<core::Iterable<core::int*>*>* a = #C1}) → void {}
+static method f0(core::List<core::int> a) → void {}
+static method f1({required core::List<core::int> a = #C1}) → void {}
+static method f2(core::Iterable<core::int> a) → void {}
+static method f3(core::Iterable<core::Iterable<core::int>> a) → void {}
+static method f4({required core::Iterable<core::Iterable<core::int>> a = #C1}) → void {}
 static method test() → void {
-  self::f0(<core::int*>[]);
-  self::f0(<core::int*>[3]);
-  self::f0(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                      ^" in "hello" as{TypeError} core::int*]);
-  self::f0(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
-                                                                      ^" in "hello" as{TypeError} core::int*, 3]);
-  self::f1(a: <core::int*>[]);
-  self::f1(a: <core::int*>[3]);
-  self::f1(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:74: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f1(a: /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                         ^" in "hello" as{TypeError} core::int*]);
-  self::f1(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f0(<core::int>[]);
+  self::f0(<core::int>[3]);
+  self::f0(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  self::f0(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
+                                                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  self::f1(a: <core::int>[]);
+  self::f1(a: <core::int>[3]);
+  self::f1(a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                      ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  self::f1(a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  self::f2(<core::int*>[]);
-  self::f2(<core::int*>[3]);
-  self::f2(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                      ^" in "hello" as{TypeError} core::int*]);
-  self::f2(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
-                                                                      ^" in "hello" as{TypeError} core::int*, 3]);
-  self::f3(<core::Iterable<core::int*>*>[]);
-  self::f3(<core::Iterable<core::int*>*>[<core::int*>[3]]);
-  self::f3(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*]]);
-  self::f3(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
-  self::f4(a: <core::Iterable<core::int*>*>[]);
-  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[3]]);
-  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*]]);
-  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  self::f2(<core::int>[]);
+  self::f2(<core::int>[3]);
+  self::f2(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  self::f2(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
+                                                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  self::f3(<core::Iterable<core::int>>[]);
+  self::f3(<core::Iterable<core::int>>[<core::int>[3]]);
+  self::f3(<core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]]);
+  self::f3(<core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], <core::int>[3]]);
+  self::f4(a: <core::Iterable<core::int>>[]);
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[3]]);
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]]);
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], <core::int>[3]]);
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.modular.expect
index 5fd719d..e591145 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.modular.expect
@@ -1,96 +1,96 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                       ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
-//                                                                       ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
+//                                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:74: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f1(a: /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                          ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                       ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                       ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
-//                                                                       ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
+//                                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method f0(core::List<core::int*>* a) → void {}
-static method f1({core::List<core::int*>* a = #C1}) → void {}
-static method f2(core::Iterable<core::int*>* a) → void {}
-static method f3(core::Iterable<core::Iterable<core::int*>*>* a) → void {}
-static method f4({core::Iterable<core::Iterable<core::int*>*>* a = #C1}) → void {}
+static method f0(core::List<core::int> a) → void {}
+static method f1({required core::List<core::int> a = #C1}) → void {}
+static method f2(core::Iterable<core::int> a) → void {}
+static method f3(core::Iterable<core::Iterable<core::int>> a) → void {}
+static method f4({required core::Iterable<core::Iterable<core::int>> a = #C1}) → void {}
 static method test() → void {
-  self::f0(<core::int*>[]);
-  self::f0(<core::int*>[3]);
-  self::f0(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                      ^" in "hello" as{TypeError} core::int*]);
-  self::f0(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
-                                                                      ^" in "hello" as{TypeError} core::int*, 3]);
-  self::f1(a: <core::int*>[]);
-  self::f1(a: <core::int*>[3]);
-  self::f1(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:74: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f1(a: /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                         ^" in "hello" as{TypeError} core::int*]);
-  self::f1(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f0(<core::int>[]);
+  self::f0(<core::int>[3]);
+  self::f0(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  self::f0(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
+                                                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  self::f1(a: <core::int>[]);
+  self::f1(a: <core::int>[3]);
+  self::f1(a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                      ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  self::f1(a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  self::f2(<core::int*>[]);
-  self::f2(<core::int*>[3]);
-  self::f2(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                      ^" in "hello" as{TypeError} core::int*]);
-  self::f2(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
-                                                                      ^" in "hello" as{TypeError} core::int*, 3]);
-  self::f3(<core::Iterable<core::int*>*>[]);
-  self::f3(<core::Iterable<core::int*>*>[<core::int*>[3]]);
-  self::f3(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*]]);
-  self::f3(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
-  self::f4(a: <core::Iterable<core::int*>*>[]);
-  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[3]]);
-  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*]]);
-  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  self::f2(<core::int>[]);
+  self::f2(<core::int>[3]);
+  self::f2(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  self::f2(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
+                                                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  self::f3(<core::Iterable<core::int>>[]);
+  self::f3(<core::Iterable<core::int>>[<core::int>[3]]);
+  self::f3(<core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]]);
+  self::f3(<core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], <core::int>[3]]);
+  self::f4(a: <core::Iterable<core::int>>[]);
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[3]]);
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]]);
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], <core::int>[3]]);
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.outline.expect
index 2037825..bc4be5e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.outline.expect
@@ -1,16 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f0(core::List<core::int*>* a) → void
+static method f0(core::List<core::int> a) → void
   ;
-static method f1({core::List<core::int*>* a}) → void
+static method f1({required core::List<core::int> a}) → void
   ;
-static method f2(core::Iterable<core::int*>* a) → void
+static method f2(core::Iterable<core::int> a) → void
   ;
-static method f3(core::Iterable<core::Iterable<core::int*>*>* a) → void
+static method f3(core::Iterable<core::Iterable<core::int>> a) → void
   ;
-static method f4({core::Iterable<core::Iterable<core::int*>*>* a}) → void
+static method f4({required core::Iterable<core::Iterable<core::int>> a}) → void
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.transformed.expect
index 8b9a883..64e0ec6 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.transformed.expect
@@ -1,96 +1,96 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                       ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
-//                                                                       ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
+//                                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:74: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f1(a: /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                          ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                       ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                       ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//   f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
-//                                                                       ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
+//                                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method f0(core::List<core::int*>* a) → void {}
-static method f1({core::List<core::int*>* a = #C1}) → void {}
-static method f2(core::Iterable<core::int*>* a) → void {}
-static method f3(core::Iterable<core::Iterable<core::int*>*>* a) → void {}
-static method f4({core::Iterable<core::Iterable<core::int*>*>* a = #C1}) → void {}
+static method f0(core::List<core::int> a) → void {}
+static method f1({required core::List<core::int> a = #C1}) → void {}
+static method f2(core::Iterable<core::int> a) → void {}
+static method f3(core::Iterable<core::Iterable<core::int>> a) → void {}
+static method f4({required core::Iterable<core::Iterable<core::int>> a = #C1}) → void {}
 static method test() → void {
-  self::f0(core::_GrowableList::•<core::int*>(0));
-  self::f0(core::_GrowableList::_literal1<core::int*>(3));
-  self::f0(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                      ^" in "hello" as{TypeError} core::int*));
-  self::f0(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
-                                                                      ^" in "hello" as{TypeError} core::int*, 3));
-  self::f1(a: core::_GrowableList::•<core::int*>(0));
-  self::f1(a: core::_GrowableList::_literal1<core::int*>(3));
-  self::f1(a: core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:74: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f1(a: /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                         ^" in "hello" as{TypeError} core::int*));
-  self::f1(a: core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  self::f0(core::_GrowableList::•<core::int>(0));
+  self::f0(core::_GrowableList::_literal1<core::int>(3));
+  self::f0(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int));
+  self::f0(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
+                                                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3));
+  self::f1(a: core::_GrowableList::•<core::int>(0));
+  self::f1(a: core::_GrowableList::_literal1<core::int>(3));
+  self::f1(a: core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                      ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int));
+  self::f1(a: core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3));
-  self::f2(core::_GrowableList::•<core::int*>(0));
-  self::f2(core::_GrowableList::_literal1<core::int*>(3));
-  self::f2(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                      ^" in "hello" as{TypeError} core::int*));
-  self::f2(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-  f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
-                                                                      ^" in "hello" as{TypeError} core::int*, 3));
-  self::f3(core::_GrowableList::•<core::Iterable<core::int*>*>(0));
-  self::f3(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  self::f3(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*)));
-  self::f3(core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*), core::_GrowableList::_literal1<core::int*>(3)));
-  self::f4(a: core::_GrowableList::•<core::Iterable<core::int*>*>(0));
-  self::f4(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  self::f4(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*)));
-  self::f4(a: core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*), core::_GrowableList::_literal1<core::int*>(3)));
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3));
+  self::f2(core::_GrowableList::•<core::int>(0));
+  self::f2(core::_GrowableList::_literal1<core::int>(3));
+  self::f2(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int));
+  self::f2(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
+                                                                   ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3));
+  self::f3(core::_GrowableList::•<core::Iterable<core::int>>(0));
+  self::f3(core::_GrowableList::_literal1<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(3)));
+  self::f3(core::_GrowableList::_literal1<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int)));
+  self::f3(core::_GrowableList::_literal2<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int), core::_GrowableList::_literal1<core::int>(3)));
+  self::f4(a: core::_GrowableList::•<core::Iterable<core::int>>(0));
+  self::f4(a: core::_GrowableList::_literal1<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(3)));
+  self::f4(a: core::_GrowableList::_literal1<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int)));
+  self::f4(a: core::_GrowableList::_literal2<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int), core::_GrowableList::_literal1<core::int>(3)));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart
index a183cd0..b54bfa4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,60 +9,62 @@
 
 void test() {
   {
-    Function2<int, String> l0 = /*@ returnType=Null */ (int x) => null;
-    Function2<int, String> l1 = /*@ returnType=String* */ (int x) => "hello";
+    Function2<int, String> l0 = /*@returnType=Never*/ (int x) => throw '';
+    Function2<int, String> l1 = /*@returnType=String*/ (int x) => "hello";
     Function2<int, String>
-        l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (String x) =>
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
             "hello";
     Function2<int, String>
-        l3 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (int x) => 3;
-    Function2<int, String> l4 = /*@ returnType=String* */ (int x) {
+        l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
+    Function2<int, String> l4 = /*@returnType=String*/ (int x) {
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
     };
   }
   {
-    Function2<int, String> l0 = /*@ returnType=Null */ (/*@ type=int* */ x) => null;
-    Function2<int, String> l1 = /*@ returnType=String* */ (/*@ type=int* */ x) =>
+    Function2<int, String> l0 = /*@returnType=Never*/ (/*@type=int*/ x) =>
+        throw '';
+    Function2<int, String> l1 = /*@returnType=String*/ (/*@type=int*/ x) =>
         "hello";
     Function2<int, String>
-        l2 = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (/*@ type=int* */ x) =>
+        l2 = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (/*@type=int*/ x) =>
             3;
-    Function2<int, String> l3 = /*@ returnType=String* */ (/*@ type=int* */ x) {
+    Function2<int, String> l3 = /*@returnType=String*/ (/*@type=int*/ x) {
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
     };
-    Function2<int, String> l4 = /*@ returnType=String* */ (/*@ type=int* */ x) {
+    Function2<int, String> l4 = /*@returnType=String*/ (/*@type=int*/ x) {
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
     };
   }
   {
-    Function2<int, List<String>> l0 = /*@ returnType=Null */ (int x) => null;
-    Function2<int, List<String>> l1 = /*@ returnType=List<String*>* */ (int
-        x) => /*@ typeArgs=String* */ ["hello"];
+    Function2<int, List<String>> l0 = /*@returnType=Never*/ (int x) =>
+        throw '';
+    Function2<int, List<String>> l1 = /*@returnType=List<String>*/ (int
+        x) => /*@typeArgs=String*/ ["hello"];
     Function2<int, List<String>>
-        l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=List<String*>* */ (String
-            x) => /*@ typeArgs=String* */ ["hello"];
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
+            x) => /*@typeArgs=String*/ ["hello"];
     Function2<int, List<String>>
-        l3 = /*@ returnType=List<String*>* */ (int x) => /*@ typeArgs=String* */ [
+        l3 = /*@returnType=List<String>*/ (int x) => /*@typeArgs=String*/ [
               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
             ];
-    Function2<int, List<String>> l4 = /*@ returnType=List<String*>* */ (int x) {
-      return /*@ typeArgs=String* */ [
+    Function2<int, List<String>> l4 = /*@returnType=List<String>*/ (int x) {
+      return /*@typeArgs=String*/ [
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
       ];
     };
   }
   {
-    Function2<int, int> l0 = /*@ returnType=int* */ (/*@ type=int* */ x) => x;
-    Function2<int, int> l1 = /*@ returnType=int* */ (/*@ type=int* */ x) =>
+    Function2<int, int> l0 = /*@returnType=int*/ (/*@type=int*/ x) => x;
+    Function2<int, int> l1 = /*@returnType=int*/ (/*@type=int*/ x) =>
         x /*@target=num.+*/ + 1;
     Function2<int, String>
-        l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (/*@ type=int* */ x) =>
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (/*@type=int*/ x) =>
             x;
     Function2<int, String>
-        l3 = /*@ returnType=String* */ (/*@ type=int* */ x) => /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/ x
+        l3 = /*@returnType=String*/ (/*@type=int*/ x) => /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/ x
             .substring(3);
     Function2<String, String>
-        l4 = /*@ returnType=String* */ (/*@ type=String* */ x) =>
+        l4 = /*@returnType=String*/ (/*@type=String*/ x) =>
             x. /*@target=String.substring*/ substring(3);
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.textual_outline.expect
index 03e8557..c66b28f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef T Function2<S, T>(S x);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.textual_outline_modelled.expect
index 65dac34..894e031 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.expect
index f4f3e7f..325a143 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.expect
@@ -1,49 +1,49 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:69: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
-//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (String x) =>
-//                                                                     ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
+//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
+//                                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:80: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-//         l3 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (int x) => 3;
-//                                                                                ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'int' can't be returned from a function with return type 'String'.
+//         l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
+//                                                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:30:13: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //             3;
 //             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:32:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:35:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ x;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:76: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:44:72: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
 //  - 'List' is from 'dart:core'.
-//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=List<String*>* */ (String
-//                                                                            ^
+//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
+//                                                                        ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:48:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                          ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:52:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:62:13: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //             x;
 //             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:65: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);
 //              ^^^^^^^^^
@@ -51,67 +51,67 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
+typedef Function2<contravariant S extends core::Object? = dynamic, T extends core::Object? = dynamic> = (S%) → T%;
 static method test() → void {
   {
-    (core::int*) →* core::String* l0 = (core::int* x) → Null => null;
-    (core::int*) →* core::String* l1 = (core::int* x) → core::String* => "hello";
-    (core::int*) →* core::String* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:69: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
-        l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (String x) =>
-                                                                    ^" in ((core::String* x) → core::String* => "hello") as{TypeError} (core::int*) →* core::String*;
-    (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:80: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-        l3 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (int x) => 3;
-                                                                               ^" in 3 as{TypeError} core::String*;
-    (core::int*) →* core::String* l4 = (core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int) → core::String l0 = (core::int x) → Never => throw "";
+    (core::int) → core::String l1 = (core::int x) → core::String => "hello";
+    (core::int) → core::String l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
+                                                                 ^" in ((core::String x) → core::String => "hello") as{TypeError,ForNonNullableByDefault} (core::int) → core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'int' can't be returned from a function with return type 'String'.
+        l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
+                                                                            ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
+    (core::int) → core::String l4 = (core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in 3 as{TypeError} core::String*;
+                                              ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
     };
   }
   {
-    (core::int*) →* core::String* l0 = (core::int* x) → Null => null;
-    (core::int*) →* core::String* l1 = (core::int* x) → core::String* => "hello";
-    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int) → core::String l0 = (core::int x) → Never => throw "";
+    (core::int) → core::String l1 = (core::int x) → core::String => "hello";
+    (core::int) → core::String l2 = (core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:30:13: Error: A value of type 'int' can't be returned from a function with return type 'String'.
             3;
-            ^" in 3 as{TypeError} core::String*;
-    (core::int*) →* core::String* l3 = (core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+            ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:32:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in 3 as{TypeError} core::String*;
+                                              ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
     };
-    (core::int*) →* core::String* l4 = (core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int) → core::String l4 = (core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:35:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
-                                              ^" in x as{TypeError} core::String*;
+                                              ^" in x as{TypeError,ForNonNullableByDefault} core::String;
     };
   }
   {
-    (core::int*) →* core::List<core::String*>* l0 = (core::int* x) → Null => null;
-    (core::int*) →* core::List<core::String*>* l1 = (core::int* x) → core::List<core::String*>* => <core::String*>["hello"];
-    (core::int*) →* core::List<core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:76: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
+    (core::int) → core::List<core::String> l0 = (core::int x) → Never => throw "";
+    (core::int) → core::List<core::String> l1 = (core::int x) → core::List<core::String> => <core::String>["hello"];
+    (core::int) → core::List<core::String> l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:44:72: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
  - 'List' is from 'dart:core'.
-        l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=List<String*>* */ (String
-                                                                           ^" in ((core::String* x) → core::List<core::String*>* => <core::String*>["hello"]) as{TypeError} (core::int*) →* core::List<core::String*>*;
-    (core::int*) →* core::List<core::String*>* l3 = (core::int* x) → core::List<core::String*>* => <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
+                                                                       ^" in ((core::String x) → core::List<core::String> => <core::String>["hello"]) as{TypeError,ForNonNullableByDefault} (core::int) → core::List<core::String>;
+    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:48:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                         ^" in 3 as{TypeError} core::String*];
-    (core::int*) →* core::List<core::String*>* l4 = (core::int* x) → core::List<core::String*>* {
-      return <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                                         ^" in 3 as{TypeError,ForNonNullableByDefault} core::String];
+    (core::int) → core::List<core::String> l4 = (core::int x) → core::List<core::String> {
+      return <core::String>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:52:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                   ^" in 3 as{TypeError} core::String*];
+                                                   ^" in 3 as{TypeError,ForNonNullableByDefault} core::String];
     };
   }
   {
-    (core::int*) →* core::int* l0 = (core::int* x) → core::int* => x;
-    (core::int*) →* core::int* l1 = (core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
-    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int) → core::int l0 = (core::int x) → core::int => x;
+    (core::int) → core::int l1 = (core::int x) → core::int => x.{core::num::+}(1){(core::num) → core::int};
+    (core::int) → core::String l2 = (core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:62:13: Error: A value of type 'int' can't be returned from a function with return type 'String'.
             x;
-            ^" in x as{TypeError} core::String*;
-    (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'.
+            ^" in x as{TypeError,ForNonNullableByDefault} core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:65: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);
-             ^^^^^^^^^" in x{<unresolved>}.substring(3) as{TypeError,ForDynamic} core::String*;
-    (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
+             ^^^^^^^^^" in x{<unresolved>}.substring(3) as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+    (core::String) → core::String l4 = (core::String x) → core::String => x.{core::String::substring}(3){(core::int, [core::int?]) → core::String};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.modular.expect
index f4f3e7f..325a143 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.modular.expect
@@ -1,49 +1,49 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:69: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
-//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (String x) =>
-//                                                                     ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
+//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
+//                                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:80: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-//         l3 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (int x) => 3;
-//                                                                                ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'int' can't be returned from a function with return type 'String'.
+//         l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
+//                                                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:30:13: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //             3;
 //             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:32:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:35:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ x;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:76: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:44:72: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
 //  - 'List' is from 'dart:core'.
-//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=List<String*>* */ (String
-//                                                                            ^
+//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
+//                                                                        ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:48:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                          ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:52:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:62:13: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //             x;
 //             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:65: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);
 //              ^^^^^^^^^
@@ -51,67 +51,67 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
+typedef Function2<contravariant S extends core::Object? = dynamic, T extends core::Object? = dynamic> = (S%) → T%;
 static method test() → void {
   {
-    (core::int*) →* core::String* l0 = (core::int* x) → Null => null;
-    (core::int*) →* core::String* l1 = (core::int* x) → core::String* => "hello";
-    (core::int*) →* core::String* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:69: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
-        l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (String x) =>
-                                                                    ^" in ((core::String* x) → core::String* => "hello") as{TypeError} (core::int*) →* core::String*;
-    (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:80: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-        l3 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (int x) => 3;
-                                                                               ^" in 3 as{TypeError} core::String*;
-    (core::int*) →* core::String* l4 = (core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int) → core::String l0 = (core::int x) → Never => throw "";
+    (core::int) → core::String l1 = (core::int x) → core::String => "hello";
+    (core::int) → core::String l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
+                                                                 ^" in ((core::String x) → core::String => "hello") as{TypeError,ForNonNullableByDefault} (core::int) → core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'int' can't be returned from a function with return type 'String'.
+        l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
+                                                                            ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
+    (core::int) → core::String l4 = (core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in 3 as{TypeError} core::String*;
+                                              ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
     };
   }
   {
-    (core::int*) →* core::String* l0 = (core::int* x) → Null => null;
-    (core::int*) →* core::String* l1 = (core::int* x) → core::String* => "hello";
-    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int) → core::String l0 = (core::int x) → Never => throw "";
+    (core::int) → core::String l1 = (core::int x) → core::String => "hello";
+    (core::int) → core::String l2 = (core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:30:13: Error: A value of type 'int' can't be returned from a function with return type 'String'.
             3;
-            ^" in 3 as{TypeError} core::String*;
-    (core::int*) →* core::String* l3 = (core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+            ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:32:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in 3 as{TypeError} core::String*;
+                                              ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
     };
-    (core::int*) →* core::String* l4 = (core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int) → core::String l4 = (core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:35:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
-                                              ^" in x as{TypeError} core::String*;
+                                              ^" in x as{TypeError,ForNonNullableByDefault} core::String;
     };
   }
   {
-    (core::int*) →* core::List<core::String*>* l0 = (core::int* x) → Null => null;
-    (core::int*) →* core::List<core::String*>* l1 = (core::int* x) → core::List<core::String*>* => <core::String*>["hello"];
-    (core::int*) →* core::List<core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:76: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
+    (core::int) → core::List<core::String> l0 = (core::int x) → Never => throw "";
+    (core::int) → core::List<core::String> l1 = (core::int x) → core::List<core::String> => <core::String>["hello"];
+    (core::int) → core::List<core::String> l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:44:72: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
  - 'List' is from 'dart:core'.
-        l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=List<String*>* */ (String
-                                                                           ^" in ((core::String* x) → core::List<core::String*>* => <core::String*>["hello"]) as{TypeError} (core::int*) →* core::List<core::String*>*;
-    (core::int*) →* core::List<core::String*>* l3 = (core::int* x) → core::List<core::String*>* => <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
+                                                                       ^" in ((core::String x) → core::List<core::String> => <core::String>["hello"]) as{TypeError,ForNonNullableByDefault} (core::int) → core::List<core::String>;
+    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:48:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                         ^" in 3 as{TypeError} core::String*];
-    (core::int*) →* core::List<core::String*>* l4 = (core::int* x) → core::List<core::String*>* {
-      return <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                                         ^" in 3 as{TypeError,ForNonNullableByDefault} core::String];
+    (core::int) → core::List<core::String> l4 = (core::int x) → core::List<core::String> {
+      return <core::String>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:52:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                   ^" in 3 as{TypeError} core::String*];
+                                                   ^" in 3 as{TypeError,ForNonNullableByDefault} core::String];
     };
   }
   {
-    (core::int*) →* core::int* l0 = (core::int* x) → core::int* => x;
-    (core::int*) →* core::int* l1 = (core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
-    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int) → core::int l0 = (core::int x) → core::int => x;
+    (core::int) → core::int l1 = (core::int x) → core::int => x.{core::num::+}(1){(core::num) → core::int};
+    (core::int) → core::String l2 = (core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:62:13: Error: A value of type 'int' can't be returned from a function with return type 'String'.
             x;
-            ^" in x as{TypeError} core::String*;
-    (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'.
+            ^" in x as{TypeError,ForNonNullableByDefault} core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:65: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);
-             ^^^^^^^^^" in x{<unresolved>}.substring(3) as{TypeError,ForDynamic} core::String*;
-    (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
+             ^^^^^^^^^" in x{<unresolved>}.substring(3) as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+    (core::String) → core::String l4 = (core::String x) → core::String => x.{core::String::substring}(3){(core::int, [core::int?]) → core::String};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.outline.expect
index 86b1ec1..3d540b7 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
+typedef Function2<contravariant S extends core::Object? = dynamic, T extends core::Object? = dynamic> = (S%) → T%;
 static method test() → void
   ;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.transformed.expect
index 35a455f..237bf02 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.transformed.expect
@@ -1,49 +1,49 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:69: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
-//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (String x) =>
-//                                                                     ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
+//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
+//                                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:80: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-//         l3 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (int x) => 3;
-//                                                                                ^
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'int' can't be returned from a function with return type 'String'.
+//         l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
+//                                                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:30:13: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //             3;
 //             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:32:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:35:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ x;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:76: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:44:72: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
 //  - 'List' is from 'dart:core'.
-//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=List<String*>* */ (String
-//                                                                            ^
+//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
+//                                                                        ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:48:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                          ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:52:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:62:13: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //             x;
 //             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:65: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);
 //              ^^^^^^^^^
@@ -51,67 +51,67 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
+typedef Function2<contravariant S extends core::Object? = dynamic, T extends core::Object? = dynamic> = (S%) → T%;
 static method test() → void {
   {
-    (core::int*) →* core::String* l0 = (core::int* x) → Null => null;
-    (core::int*) →* core::String* l1 = (core::int* x) → core::String* => "hello";
-    (core::int*) →* core::String* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:69: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
-        l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (String x) =>
-                                                                    ^" in ((core::String* x) → core::String* => "hello") as{TypeError} (core::int*) →* core::String*;
-    (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:80: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-        l3 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (int x) => 3;
-                                                                               ^" in 3 as{TypeError} core::String*;
-    (core::int*) →* core::String* l4 = (core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int) → core::String l0 = (core::int x) → Never => throw "";
+    (core::int) → core::String l1 = (core::int x) → core::String => "hello";
+    (core::int) → core::String l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
+                                                                 ^" in ((core::String x) → core::String => "hello") as{TypeError,ForNonNullableByDefault} (core::int) → core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'int' can't be returned from a function with return type 'String'.
+        l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
+                                                                            ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
+    (core::int) → core::String l4 = (core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in 3 as{TypeError} core::String*;
+                                              ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
     };
   }
   {
-    (core::int*) →* core::String* l0 = (core::int* x) → Null => null;
-    (core::int*) →* core::String* l1 = (core::int* x) → core::String* => "hello";
-    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int) → core::String l0 = (core::int x) → Never => throw "";
+    (core::int) → core::String l1 = (core::int x) → core::String => "hello";
+    (core::int) → core::String l2 = (core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:30:13: Error: A value of type 'int' can't be returned from a function with return type 'String'.
             3;
-            ^" in 3 as{TypeError} core::String*;
-    (core::int*) →* core::String* l3 = (core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+            ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:32:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in 3 as{TypeError} core::String*;
+                                              ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
     };
-    (core::int*) →* core::String* l4 = (core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int) → core::String l4 = (core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:35:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
-                                              ^" in x as{TypeError} core::String*;
+                                              ^" in x as{TypeError,ForNonNullableByDefault} core::String;
     };
   }
   {
-    (core::int*) →* core::List<core::String*>* l0 = (core::int* x) → Null => null;
-    (core::int*) →* core::List<core::String*>* l1 = (core::int* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>("hello");
-    (core::int*) →* core::List<core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:76: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
+    (core::int) → core::List<core::String> l0 = (core::int x) → Never => throw "";
+    (core::int) → core::List<core::String> l1 = (core::int x) → core::List<core::String> => core::_GrowableList::_literal1<core::String>("hello");
+    (core::int) → core::List<core::String> l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:44:72: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
  - 'List' is from 'dart:core'.
-        l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=List<String*>* */ (String
-                                                                           ^" in ((core::String* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>("hello")) as{TypeError} (core::int*) →* core::List<core::String*>*;
-    (core::int*) →* core::List<core::String*>* l3 = (core::int* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
+                                                                       ^" in ((core::String x) → core::List<core::String> => core::_GrowableList::_literal1<core::String>("hello")) as{TypeError,ForNonNullableByDefault} (core::int) → core::List<core::String>;
+    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => core::_GrowableList::_literal1<core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:48:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                         ^" in 3 as{TypeError} core::String*);
-    (core::int*) →* core::List<core::String*>* l4 = (core::int* x) → core::List<core::String*>* {
-      return core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                                         ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
+    (core::int) → core::List<core::String> l4 = (core::int x) → core::List<core::String> {
+      return core::_GrowableList::_literal1<core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:52:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                   ^" in 3 as{TypeError} core::String*);
+                                                   ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
     };
   }
   {
-    (core::int*) →* core::int* l0 = (core::int* x) → core::int* => x;
-    (core::int*) →* core::int* l1 = (core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
-    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    (core::int) → core::int l0 = (core::int x) → core::int => x;
+    (core::int) → core::int l1 = (core::int x) → core::int => x.{core::num::+}(1){(core::num) → core::int};
+    (core::int) → core::String l2 = (core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:62:13: Error: A value of type 'int' can't be returned from a function with return type 'String'.
             x;
-            ^" in x as{TypeError} core::String*;
-    (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'.
+            ^" in x as{TypeError,ForNonNullableByDefault} core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:65: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);
              ^^^^^^^^^" in x{<unresolved>}.substring(3);
-    (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
+    (core::String) → core::String l4 = (core::String x) → core::String => x.{core::String::substring}(3){(core::int, [core::int?]) → core::String};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart
index 4fdbfdb..709fdec 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart
@@ -1,25 +1,25 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void main() {
   {
-    T f<T>(T x) => null;
-    var /*@type=<T extends Object* = dynamic>(T*) ->* T**/ v1 = f;
-    v1 = <S> /*@returnType=S**/ (/*@type=S**/ x) => x;
+    T f<T>(T x) => throw '';
+    var /*@type=<T extends Object? = dynamic>(T%) -> T%*/ v1 = f;
+    v1 = <S> /*@returnType=S%*/ (/*@type=S%*/ x) => x;
   }
   {
-    List<T> f<T>(T x) => null;
-    var /*@type=<T extends Object* = dynamic>(T*) ->* List<T*>**/ v2 = f;
-    v2 = <S> /*@returnType=List<S*>**/
-        (/*@type=S**/ x) => /*@typeArgs=S**/ [x];
-    Iterable<int> r = v2 /*@typeArgs=int**/ (42);
-    Iterable<String> s = v2 /*@typeArgs=String**/ ('hello');
-    Iterable<List<int>> t = v2 /*@typeArgs=List<int*>**/ (<int>[]);
-    Iterable<num> u = v2 /*@typeArgs=num**/ (42);
+    List<T> f<T>(T x) => throw '';
+    var /*@type=<T extends Object? = dynamic>(T%) -> List<T%>*/ v2 = f;
+    v2 = <S> /*@returnType=List<S%>*/
+        (/*@type=S%*/ x) => /*@typeArgs=S%*/ [x];
+    Iterable<int> r = v2 /*@typeArgs=int*/ (42);
+    Iterable<String> s = v2 /*@typeArgs=String*/ ('hello');
+    Iterable<List<int>> t = v2 /*@typeArgs=List<int>*/ (<int>[]);
+    Iterable<num> u = v2 /*@typeArgs=num*/ (42);
     Iterable<num> v = v2<num>(42);
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.textual_outline.expect
index 91e6295..c07c403 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.textual_outline_modelled.expect
index 91e6295..c07c403 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.expect
index a686107..3818c27 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.expect
@@ -1,23 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → void {
   {
-    function f<T extends core::Object* = dynamic>(T* x) → T*
-      return null;
-    <T extends core::Object* = dynamic>(T*) →* T* v1 = f;
-    v1 = <S extends core::Object* = dynamic>(S* x) → S* => x;
+    function f<T extends core::Object? = dynamic>(T% x) → T%
+      return throw "";
+    <T extends core::Object? = dynamic>(T%) → T% v1 = f;
+    v1 = <S extends core::Object? = dynamic>(S% x) → S% => x;
   }
   {
-    function f<T extends core::Object* = dynamic>(T* x) → core::List<T*>*
-      return null;
-    <T extends core::Object* = dynamic>(T*) →* core::List<T*>* v2 = f;
-    v2 = <S extends core::Object* = dynamic>(S* x) → core::List<S*>* => <S*>[x];
-    core::Iterable<core::int*>* r = v2<core::int*>(42){(core::int*) →* core::List<core::int*>*};
-    core::Iterable<core::String*>* s = v2<core::String*>("hello"){(core::String*) →* core::List<core::String*>*};
-    core::Iterable<core::List<core::int*>*>* t = v2<core::List<core::int*>*>(<core::int*>[]){(core::List<core::int*>*) →* core::List<core::List<core::int*>*>*};
-    core::Iterable<core::num*>* u = v2<core::num*>(42){(core::num*) →* core::List<core::num*>*};
-    core::Iterable<core::num*>* v = v2<core::num*>(42){(core::num*) →* core::List<core::num*>*};
+    function f<T extends core::Object? = dynamic>(T% x) → core::List<T%>
+      return throw "";
+    <T extends core::Object? = dynamic>(T%) → core::List<T%> v2 = f;
+    v2 = <S extends core::Object? = dynamic>(S% x) → core::List<S%> => <S%>[x];
+    core::Iterable<core::int> r = v2<core::int>(42){(core::int) → core::List<core::int>};
+    core::Iterable<core::String> s = v2<core::String>("hello"){(core::String) → core::List<core::String>};
+    core::Iterable<core::List<core::int>> t = v2<core::List<core::int>>(<core::int>[]){(core::List<core::int>) → core::List<core::List<core::int>>};
+    core::Iterable<core::num> u = v2<core::num>(42){(core::num) → core::List<core::num>};
+    core::Iterable<core::num> v = v2<core::num>(42){(core::num) → core::List<core::num>};
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.modular.expect
index a686107..3818c27 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.modular.expect
@@ -1,23 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → void {
   {
-    function f<T extends core::Object* = dynamic>(T* x) → T*
-      return null;
-    <T extends core::Object* = dynamic>(T*) →* T* v1 = f;
-    v1 = <S extends core::Object* = dynamic>(S* x) → S* => x;
+    function f<T extends core::Object? = dynamic>(T% x) → T%
+      return throw "";
+    <T extends core::Object? = dynamic>(T%) → T% v1 = f;
+    v1 = <S extends core::Object? = dynamic>(S% x) → S% => x;
   }
   {
-    function f<T extends core::Object* = dynamic>(T* x) → core::List<T*>*
-      return null;
-    <T extends core::Object* = dynamic>(T*) →* core::List<T*>* v2 = f;
-    v2 = <S extends core::Object* = dynamic>(S* x) → core::List<S*>* => <S*>[x];
-    core::Iterable<core::int*>* r = v2<core::int*>(42){(core::int*) →* core::List<core::int*>*};
-    core::Iterable<core::String*>* s = v2<core::String*>("hello"){(core::String*) →* core::List<core::String*>*};
-    core::Iterable<core::List<core::int*>*>* t = v2<core::List<core::int*>*>(<core::int*>[]){(core::List<core::int*>*) →* core::List<core::List<core::int*>*>*};
-    core::Iterable<core::num*>* u = v2<core::num*>(42){(core::num*) →* core::List<core::num*>*};
-    core::Iterable<core::num*>* v = v2<core::num*>(42){(core::num*) →* core::List<core::num*>*};
+    function f<T extends core::Object? = dynamic>(T% x) → core::List<T%>
+      return throw "";
+    <T extends core::Object? = dynamic>(T%) → core::List<T%> v2 = f;
+    v2 = <S extends core::Object? = dynamic>(S% x) → core::List<S%> => <S%>[x];
+    core::Iterable<core::int> r = v2<core::int>(42){(core::int) → core::List<core::int>};
+    core::Iterable<core::String> s = v2<core::String>("hello"){(core::String) → core::List<core::String>};
+    core::Iterable<core::List<core::int>> t = v2<core::List<core::int>>(<core::int>[]){(core::List<core::int>) → core::List<core::List<core::int>>};
+    core::Iterable<core::num> u = v2<core::num>(42){(core::num) → core::List<core::num>};
+    core::Iterable<core::num> v = v2<core::num>(42){(core::num) → core::List<core::num>};
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.outline.expect
index 27b374a..27fd207 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → void
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.transformed.expect
index 6660189..86411e5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.transformed.expect
@@ -1,23 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → void {
   {
-    function f<T extends core::Object* = dynamic>(T* x) → T*
-      return null;
-    <T extends core::Object* = dynamic>(T*) →* T* v1 = f;
-    v1 = <S extends core::Object* = dynamic>(S* x) → S* => x;
+    function f<T extends core::Object? = dynamic>(T% x) → T%
+      return throw "";
+    <T extends core::Object? = dynamic>(T%) → T% v1 = f;
+    v1 = <S extends core::Object? = dynamic>(S% x) → S% => x;
   }
   {
-    function f<T extends core::Object* = dynamic>(T* x) → core::List<T*>*
-      return null;
-    <T extends core::Object* = dynamic>(T*) →* core::List<T*>* v2 = f;
-    v2 = <S extends core::Object* = dynamic>(S* x) → core::List<S*>* => core::_GrowableList::_literal1<S*>(x);
-    core::Iterable<core::int*>* r = v2<core::int*>(42){(core::int*) →* core::List<core::int*>*};
-    core::Iterable<core::String*>* s = v2<core::String*>("hello"){(core::String*) →* core::List<core::String*>*};
-    core::Iterable<core::List<core::int*>*>* t = v2<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::List<core::List<core::int*>*>*};
-    core::Iterable<core::num*>* u = v2<core::num*>(42){(core::num*) →* core::List<core::num*>*};
-    core::Iterable<core::num*>* v = v2<core::num*>(42){(core::num*) →* core::List<core::num*>*};
+    function f<T extends core::Object? = dynamic>(T% x) → core::List<T%>
+      return throw "";
+    <T extends core::Object? = dynamic>(T%) → core::List<T%> v2 = f;
+    v2 = <S extends core::Object? = dynamic>(S% x) → core::List<S%> => core::_GrowableList::_literal1<S%>(x);
+    core::Iterable<core::int> r = v2<core::int>(42){(core::int) → core::List<core::int>};
+    core::Iterable<core::String> s = v2<core::String>("hello"){(core::String) → core::List<core::String>};
+    core::Iterable<core::List<core::int>> t = v2<core::List<core::int>>(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → core::List<core::List<core::int>>};
+    core::Iterable<core::num> u = v2<core::num>(42){(core::num) → core::List<core::num>};
+    core::Iterable<core::num> v = v2<core::num>(42){(core::num) → core::List<core::num>};
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart
index 55b4fa9..c8d4f0f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,10 +10,10 @@
 }
 
 class F4<T> {
-  F4({Iterable<Iterable<T>> a}) {}
+  F4({required Iterable<Iterable<T>> a}) {}
 }
 
 void main() {
-  new /*@ typeArgs=dynamic */ F3(/*@ typeArgs=Iterable<dynamic>* */ []);
-  new /*@ typeArgs=dynamic */ F4(a: /*@ typeArgs=Iterable<dynamic>* */ []);
+  new /*@typeArgs=Object?*/ F3(/*@typeArgs=Iterable<Object?>*/ []);
+  new /*@typeArgs=Object?*/ F4(a: /*@typeArgs=Iterable<Object?>*/ []);
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.textual_outline.expect
index efe4677..e53cfca 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class F3<T> {
@@ -6,7 +5,7 @@
 }
 
 class F4<T> {
-  F4({Iterable<Iterable<T>> a}) {}
+  F4({required Iterable<Iterable<T>> a}) {}
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.textual_outline_modelled.expect
index efe4677..e53cfca 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class F3<T> {
@@ -6,7 +5,7 @@
 }
 
 class F4<T> {
-  F4({Iterable<Iterable<T>> a}) {}
+  F4({required Iterable<Iterable<T>> a}) {}
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.expect
index 81acf78..0fc19cb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class F3<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+class F3<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::Iterable<core::Iterable<self::F3::T%>> a) → self::F3<self::F3::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F4<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = #C1}) → self::F4<self::F4::T*>*
+class F4<T extends core::Object? = dynamic> extends core::Object {
+  constructor •({required core::Iterable<core::Iterable<self::F4::T%>> a = #C1}) → self::F4<self::F4::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  new self::F3::•<dynamic>(<core::Iterable<dynamic>*>[]);
-  new self::F4::•<dynamic>(a: <core::Iterable<dynamic>*>[]);
+  new self::F3::•<core::Object?>(<core::Iterable<core::Object?>>[]);
+  new self::F4::•<core::Object?>(a: <core::Iterable<core::Object?>>[]);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.modular.expect
index 81acf78..0fc19cb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.modular.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class F3<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+class F3<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::Iterable<core::Iterable<self::F3::T%>> a) → self::F3<self::F3::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F4<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = #C1}) → self::F4<self::F4::T*>*
+class F4<T extends core::Object? = dynamic> extends core::Object {
+  constructor •({required core::Iterable<core::Iterable<self::F4::T%>> a = #C1}) → self::F4<self::F4::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  new self::F3::•<dynamic>(<core::Iterable<dynamic>*>[]);
-  new self::F4::•<dynamic>(a: <core::Iterable<dynamic>*>[]);
+  new self::F3::•<core::Object?>(<core::Iterable<core::Object?>>[]);
+  new self::F4::•<core::Object?>(a: <core::Iterable<core::Object?>>[]);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.outline.expect
index 568d09d..fd072ec 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.outline.expect
@@ -1,34 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class F3<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+class F3<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::Iterable<core::Iterable<self::F3::T%>> a) → self::F3<self::F3::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F4<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = null}) → self::F4<self::F4::T*>*
+class F4<T extends core::Object? = dynamic> extends core::Object {
+  constructor •({required core::Iterable<core::Iterable<self::F4::T%>> a = null}) → self::F4<self::F4::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.transformed.expect
index 70d6890..c863dec 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.transformed.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class F3<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+class F3<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::Iterable<core::Iterable<self::F3::T%>> a) → self::F3<self::F3::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F4<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = #C1}) → self::F4<self::F4::T*>*
+class F4<T extends core::Object? = dynamic> extends core::Object {
+  constructor •({required core::Iterable<core::Iterable<self::F4::T%>> a = #C1}) → self::F4<self::F4::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  new self::F3::•<dynamic>(core::_GrowableList::•<core::Iterable<dynamic>*>(0));
-  new self::F4::•<dynamic>(a: core::_GrowableList::•<core::Iterable<dynamic>*>(0));
+  new self::F3::•<core::Object?>(core::_GrowableList::•<core::Iterable<core::Object?>>(0));
+  new self::F4::•<core::Object?>(a: core::_GrowableList::•<core::Iterable<core::Object?>>(0));
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart
index ef16150..4d367e0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,7 +10,7 @@
 }
 
 class F1<T> {
-  F1({List<T> a}) {}
+  F1({required List<T> a}) {}
 }
 
 class F2<T> {
@@ -22,86 +22,86 @@
 }
 
 class F4<T> {
-  F4({Iterable<Iterable<T>> a}) {}
+  F4({required Iterable<Iterable<T>> a}) {}
 }
 
 void test() {
-  new F0<int>(/*@ typeArgs=int* */ []);
-  new F0<int>(/*@ typeArgs=int* */ [3]);
+  new F0<int>(/*@typeArgs=int*/ []);
+  new F0<int>(/*@typeArgs=int*/ [3]);
   new F0<int>(
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-  new F0<int>(/*@ typeArgs=int* */ [
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+  new F0<int>(/*@typeArgs=int*/ [
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
     3
   ]);
 
-  new F1<int>(a: /*@ typeArgs=int* */ []);
-  new F1<int>(a: /*@ typeArgs=int* */ [3]);
-  new F1<int>(a: /*@ typeArgs=int* */ [
+  new F1<int>(a: /*@typeArgs=int*/ []);
+  new F1<int>(a: /*@typeArgs=int*/ [3]);
+  new F1<int>(a: /*@typeArgs=int*/ [
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
   ]);
-  new F1<int>(a: /*@ typeArgs=int* */ [
+  new F1<int>(a: /*@typeArgs=int*/ [
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
     3
   ]);
 
-  new F2<int>(/*@ typeArgs=int* */ []);
-  new F2<int>(/*@ typeArgs=int* */ [3]);
+  new F2<int>(/*@typeArgs=int*/ []);
+  new F2<int>(/*@typeArgs=int*/ [3]);
   new F2<int>(
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-  new F2<int>(/*@ typeArgs=int* */ [
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+  new F2<int>(/*@typeArgs=int*/ [
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
     3
   ]);
 
-  new F3<int>(/*@ typeArgs=Iterable<int*>* */ []);
-  new F3<int>(/*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [3]
+  new F3<int>(/*@typeArgs=Iterable<int>*/ []);
+  new F3<int>(/*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [3]
   ]);
-  new F3<int>(/*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+  new F3<int>(/*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
   ]);
-  new F3<int>(/*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-    /*@ typeArgs=int* */ [3]
+  new F3<int>(/*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+    /*@typeArgs=int*/ [3]
   ]);
 
-  new F4<int>(a: /*@ typeArgs=Iterable<int*>* */ []);
-  new F4<int>(a: /*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [3]
+  new F4<int>(a: /*@typeArgs=Iterable<int>*/ []);
+  new F4<int>(a: /*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [3]
   ]);
-  new F4<int>(a: /*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+  new F4<int>(a: /*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
   ]);
-  new F4<int>(a: /*@ typeArgs=Iterable<int*>* */ [
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-    /*@ typeArgs=int* */ [3]
+  new F4<int>(a: /*@typeArgs=Iterable<int>*/ [
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+    /*@typeArgs=int*/ [3]
   ]);
 
-  new /*@ typeArgs=dynamic */ F3(/*@ typeArgs=Iterable<dynamic>* */ []);
-  var /*@ type=F3<int*>* */ f31 = new /*@ typeArgs=int* */ F3(/*@ typeArgs=List<int*>* */ [
-    /*@ typeArgs=int* */ [3]
+  new /*@typeArgs=Object?*/ F3(/*@typeArgs=Iterable<Object?>*/ []);
+  var /*@type=F3<int>*/ f31 = new /*@typeArgs=int*/ F3(/*@typeArgs=List<int>*/ [
+    /*@typeArgs=int*/ [3]
   ]);
-  var /*@ type=F3<String*>* */ f32 =
-      new /*@ typeArgs=String* */ F3(/*@ typeArgs=List<String*>* */ [
-    /*@ typeArgs=String* */ ["hello"]
+  var /*@type=F3<String>*/ f32 =
+      new /*@typeArgs=String*/ F3(/*@typeArgs=List<String>*/ [
+    /*@typeArgs=String*/ ["hello"]
   ]);
-  var /*@ type=F3<Object*>* */ f33 =
-      new /*@ typeArgs=Object* */ F3(/*@ typeArgs=List<Object*>* */ [
-    /*@ typeArgs=String* */ ["hello"],
-    /*@ typeArgs=int* */ [3]
+  var /*@type=F3<Object>*/ f33 =
+      new /*@typeArgs=Object*/ F3(/*@typeArgs=List<Object>*/ [
+    /*@typeArgs=String*/ ["hello"],
+    /*@typeArgs=int*/ [3]
   ]);
 
-  new /*@ typeArgs=dynamic */ F4(a: /*@ typeArgs=Iterable<dynamic>* */ []);
-  new /*@ typeArgs=int* */ F4(a: /*@ typeArgs=List<int*>* */ [
-    /*@ typeArgs=int* */ [3]
+  new /*@typeArgs=Object?*/ F4(a: /*@typeArgs=Iterable<Object?>*/ []);
+  new /*@typeArgs=int*/ F4(a: /*@typeArgs=List<int>*/ [
+    /*@typeArgs=int*/ [3]
   ]);
-  new /*@ typeArgs=String* */ F4(a: /*@ typeArgs=List<String*>* */ [
-    /*@ typeArgs=String* */ ["hello"]
+  new /*@typeArgs=String*/ F4(a: /*@typeArgs=List<String>*/ [
+    /*@typeArgs=String*/ ["hello"]
   ]);
-  new /*@ typeArgs=Object* */ F4(a: /*@ typeArgs=List<Object*>* */ [
-    /*@ typeArgs=String* */ ["hello"],
-    /*@ typeArgs=int* */ [3]
+  new /*@typeArgs=Object*/ F4(a: /*@typeArgs=List<Object>*/ [
+    /*@typeArgs=String*/ ["hello"],
+    /*@typeArgs=int*/ [3]
   ]);
 }
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.textual_outline.expect
index f8fc25b..0416911 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class F0<T> {
@@ -6,7 +5,7 @@
 }
 
 class F1<T> {
-  F1({List<T> a}) {}
+  F1({required List<T> a}) {}
 }
 
 class F2<T> {
@@ -18,7 +17,7 @@
 }
 
 class F4<T> {
-  F4({Iterable<Iterable<T>> a}) {}
+  F4({required Iterable<Iterable<T>> a}) {}
 }
 
 void test() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.textual_outline_modelled.expect
index 4b8ade4..ca29a79 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class F0<T> {
@@ -6,7 +5,7 @@
 }
 
 class F1<T> {
-  F1({List<T> a}) {}
+  F1({required List<T> a}) {}
 }
 
 class F2<T> {
@@ -18,7 +17,7 @@
 }
 
 class F4<T> {
-  F4({Iterable<Iterable<T>> a}) {}
+  F4({required Iterable<Iterable<T>> a}) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.expect
index 6d35ee8..1a6d71f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
@@ -18,152 +18,102 @@
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
 import self as self;
 import "dart:core" as core;
 
-class F0<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::List<self::F0::T*>* a) → self::F0<self::F0::T*>*
+class F0<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::List<self::F0::T%> a) → self::F0<self::F0::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F1<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::List<self::F1::T*>* a = #C1}) → self::F1<self::F1::T*>*
+class F1<T extends core::Object? = dynamic> extends core::Object {
+  constructor •({required core::List<self::F1::T%> a = #C1}) → self::F1<self::F1::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F2<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::Iterable<self::F2::T*>* a) → self::F2<self::F2::T*>*
+class F2<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::Iterable<self::F2::T%> a) → self::F2<self::F2::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F3<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+class F3<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::Iterable<core::Iterable<self::F3::T%>> a) → self::F3<self::F3::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F4<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = #C1}) → self::F4<self::F4::T*>*
+class F4<T extends core::Object? = dynamic> extends core::Object {
+  constructor •({required core::Iterable<core::Iterable<self::F4::T%>> a = #C1}) → self::F4<self::F4::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  new self::F0::•<core::int*>(<core::int*>[]);
-  new self::F0::•<core::int*>(<core::int*>[3]);
-  new self::F0::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                       ^" in "hello" as{TypeError} core::int*]);
-  new self::F0::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•<core::int>(<core::int>[]);
+  new self::F0::•<core::int>(<core::int>[3]);
+  new self::F0::•<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  new self::F0::•<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  new self::F1::•<core::int*>(a: <core::int*>[]);
-  new self::F1::•<core::int*>(a: <core::int*>[3]);
-  new self::F1::•<core::int*>(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  new self::F1::•<core::int>(a: <core::int>[]);
+  new self::F1::•<core::int>(a: <core::int>[3]);
+  new self::F1::•<core::int>(a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                               ^" in "hello" as{TypeError} core::int*]);
-  new self::F1::•<core::int*>(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  new self::F1::•<core::int>(a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  new self::F2::•<core::int*>(<core::int*>[]);
-  new self::F2::•<core::int*>(<core::int*>[3]);
-  new self::F2::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                       ^" in "hello" as{TypeError} core::int*]);
-  new self::F2::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  new self::F2::•<core::int>(<core::int>[]);
+  new self::F2::•<core::int>(<core::int>[3]);
+  new self::F2::•<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  new self::F2::•<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[]);
-  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[3]]);
-  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*]]);
-  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
-  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[]);
-  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[3]]);
-  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*]]);
-  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
-  new self::F3::•<dynamic>(<core::Iterable<dynamic>*>[]);
-  self::F3<core::int*>* f31 = new self::F3::•<core::int*>(<core::List<core::int*>*>[<core::int*>[3]]);
-  self::F3<core::String*>* f32 = new self::F3::•<core::String*>(<core::List<core::String*>*>[<core::String*>["hello"]]);
-  self::F3<core::Object*>* f33 = new self::F3::•<core::Object*>(<core::List<core::Object*>*>[<core::String*>["hello"], <core::int*>[3]]);
-  new self::F4::•<dynamic>(a: <core::Iterable<dynamic>*>[]);
-  new self::F4::•<core::int*>(a: <core::List<core::int*>*>[<core::int*>[3]]);
-  new self::F4::•<core::String*>(a: <core::List<core::String*>*>[<core::String*>["hello"]]);
-  new self::F4::•<core::Object*>(a: <core::List<core::Object*>*>[<core::String*>["hello"], <core::int*>[3]]);
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[3]]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], <core::int>[3]]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[3]]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], <core::int>[3]]);
+  new self::F3::•<core::Object?>(<core::Iterable<core::Object?>>[]);
+  self::F3<core::int> f31 = new self::F3::•<core::int>(<core::List<core::int>>[<core::int>[3]]);
+  self::F3<core::String> f32 = new self::F3::•<core::String>(<core::List<core::String>>[<core::String>["hello"]]);
+  self::F3<core::Object> f33 = new self::F3::•<core::Object>(<core::List<core::Object>>[<core::String>["hello"], <core::int>[3]]);
+  new self::F4::•<core::Object?>(a: <core::Iterable<core::Object?>>[]);
+  new self::F4::•<core::int>(a: <core::List<core::int>>[<core::int>[3]]);
+  new self::F4::•<core::String>(a: <core::List<core::String>>[<core::String>["hello"]]);
+  new self::F4::•<core::Object>(a: <core::List<core::Object>>[<core::String>["hello"], <core::int>[3]]);
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.modular.expect
index 6d35ee8..1a6d71f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
@@ -18,152 +18,102 @@
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
 import self as self;
 import "dart:core" as core;
 
-class F0<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::List<self::F0::T*>* a) → self::F0<self::F0::T*>*
+class F0<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::List<self::F0::T%> a) → self::F0<self::F0::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F1<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::List<self::F1::T*>* a = #C1}) → self::F1<self::F1::T*>*
+class F1<T extends core::Object? = dynamic> extends core::Object {
+  constructor •({required core::List<self::F1::T%> a = #C1}) → self::F1<self::F1::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F2<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::Iterable<self::F2::T*>* a) → self::F2<self::F2::T*>*
+class F2<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::Iterable<self::F2::T%> a) → self::F2<self::F2::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F3<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+class F3<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::Iterable<core::Iterable<self::F3::T%>> a) → self::F3<self::F3::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F4<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = #C1}) → self::F4<self::F4::T*>*
+class F4<T extends core::Object? = dynamic> extends core::Object {
+  constructor •({required core::Iterable<core::Iterable<self::F4::T%>> a = #C1}) → self::F4<self::F4::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  new self::F0::•<core::int*>(<core::int*>[]);
-  new self::F0::•<core::int*>(<core::int*>[3]);
-  new self::F0::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                       ^" in "hello" as{TypeError} core::int*]);
-  new self::F0::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•<core::int>(<core::int>[]);
+  new self::F0::•<core::int>(<core::int>[3]);
+  new self::F0::•<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  new self::F0::•<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  new self::F1::•<core::int*>(a: <core::int*>[]);
-  new self::F1::•<core::int*>(a: <core::int*>[3]);
-  new self::F1::•<core::int*>(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  new self::F1::•<core::int>(a: <core::int>[]);
+  new self::F1::•<core::int>(a: <core::int>[3]);
+  new self::F1::•<core::int>(a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                               ^" in "hello" as{TypeError} core::int*]);
-  new self::F1::•<core::int*>(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  new self::F1::•<core::int>(a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  new self::F2::•<core::int*>(<core::int*>[]);
-  new self::F2::•<core::int*>(<core::int*>[3]);
-  new self::F2::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                       ^" in "hello" as{TypeError} core::int*]);
-  new self::F2::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  new self::F2::•<core::int>(<core::int>[]);
+  new self::F2::•<core::int>(<core::int>[3]);
+  new self::F2::•<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]);
+  new self::F2::•<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3]);
-  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[]);
-  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[3]]);
-  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*]]);
-  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
-  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[]);
-  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[3]]);
-  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*]]);
-  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
-  new self::F3::•<dynamic>(<core::Iterable<dynamic>*>[]);
-  self::F3<core::int*>* f31 = new self::F3::•<core::int*>(<core::List<core::int*>*>[<core::int*>[3]]);
-  self::F3<core::String*>* f32 = new self::F3::•<core::String*>(<core::List<core::String*>*>[<core::String*>["hello"]]);
-  self::F3<core::Object*>* f33 = new self::F3::•<core::Object*>(<core::List<core::Object*>*>[<core::String*>["hello"], <core::int*>[3]]);
-  new self::F4::•<dynamic>(a: <core::Iterable<dynamic>*>[]);
-  new self::F4::•<core::int*>(a: <core::List<core::int*>*>[<core::int*>[3]]);
-  new self::F4::•<core::String*>(a: <core::List<core::String*>*>[<core::String*>["hello"]]);
-  new self::F4::•<core::Object*>(a: <core::List<core::Object*>*>[<core::String*>["hello"], <core::int*>[3]]);
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[3]]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], <core::int>[3]]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[3]]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int]]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], <core::int>[3]]);
+  new self::F3::•<core::Object?>(<core::Iterable<core::Object?>>[]);
+  self::F3<core::int> f31 = new self::F3::•<core::int>(<core::List<core::int>>[<core::int>[3]]);
+  self::F3<core::String> f32 = new self::F3::•<core::String>(<core::List<core::String>>[<core::String>["hello"]]);
+  self::F3<core::Object> f33 = new self::F3::•<core::Object>(<core::List<core::Object>>[<core::String>["hello"], <core::int>[3]]);
+  new self::F4::•<core::Object?>(a: <core::Iterable<core::Object?>>[]);
+  new self::F4::•<core::int>(a: <core::List<core::int>>[<core::int>[3]]);
+  new self::F4::•<core::String>(a: <core::List<core::String>>[<core::String>["hello"]]);
+  new self::F4::•<core::Object>(a: <core::List<core::Object>>[<core::String>["hello"], <core::int>[3]]);
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.outline.expect
index bc46cfe..f2b37f4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.outline.expect
@@ -1,76 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class F0<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::List<self::F0::T*>* a) → self::F0<self::F0::T*>*
+class F0<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::List<self::F0::T%> a) → self::F0<self::F0::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F1<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::List<self::F1::T*>* a = null}) → self::F1<self::F1::T*>*
+class F1<T extends core::Object? = dynamic> extends core::Object {
+  constructor •({required core::List<self::F1::T%> a = null}) → self::F1<self::F1::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F2<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::Iterable<self::F2::T*>* a) → self::F2<self::F2::T*>*
+class F2<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::Iterable<self::F2::T%> a) → self::F2<self::F2::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F3<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+class F3<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::Iterable<core::Iterable<self::F3::T%>> a) → self::F3<self::F3::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F4<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = null}) → self::F4<self::F4::T*>*
+class F4<T extends core::Object? = dynamic> extends core::Object {
+  constructor •({required core::Iterable<core::Iterable<self::F4::T%>> a = null}) → self::F4<self::F4::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.transformed.expect
index 49e4a19..eda657e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
@@ -18,152 +18,102 @@
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
-//                                                                        ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                     ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
-//                                                                      ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                   ^
 //
 import self as self;
 import "dart:core" as core;
 
-class F0<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::List<self::F0::T*>* a) → self::F0<self::F0::T*>*
+class F0<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::List<self::F0::T%> a) → self::F0<self::F0::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F1<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::List<self::F1::T*>* a = #C1}) → self::F1<self::F1::T*>*
+class F1<T extends core::Object? = dynamic> extends core::Object {
+  constructor •({required core::List<self::F1::T%> a = #C1}) → self::F1<self::F1::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F2<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::Iterable<self::F2::T*>* a) → self::F2<self::F2::T*>*
+class F2<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::Iterable<self::F2::T%> a) → self::F2<self::F2::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F3<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+class F3<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(core::Iterable<core::Iterable<self::F3::T%>> a) → self::F3<self::F3::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F4<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = #C1}) → self::F4<self::F4::T*>*
+class F4<T extends core::Object? = dynamic> extends core::Object {
+  constructor •({required core::Iterable<core::Iterable<self::F4::T%>> a = #C1}) → self::F4<self::F4::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  new self::F0::•<core::int*>(core::_GrowableList::•<core::int*>(0));
-  new self::F0::•<core::int*>(core::_GrowableList::_literal1<core::int*>(3));
-  new self::F0::•<core::int*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                       ^" in "hello" as{TypeError} core::int*));
-  new self::F0::•<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  new self::F0::•<core::int>(core::_GrowableList::•<core::int>(0));
+  new self::F0::•<core::int>(core::_GrowableList::_literal1<core::int>(3));
+  new self::F0::•<core::int>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int));
+  new self::F0::•<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3));
-  new self::F1::•<core::int*>(a: core::_GrowableList::•<core::int*>(0));
-  new self::F1::•<core::int*>(a: core::_GrowableList::_literal1<core::int*>(3));
-  new self::F1::•<core::int*>(a: core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3));
+  new self::F1::•<core::int>(a: core::_GrowableList::•<core::int>(0));
+  new self::F1::•<core::int>(a: core::_GrowableList::_literal1<core::int>(3));
+  new self::F1::•<core::int>(a: core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                               ^" in "hello" as{TypeError} core::int*));
-  new self::F1::•<core::int*>(a: core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int));
+  new self::F1::•<core::int>(a: core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3));
-  new self::F2::•<core::int*>(core::_GrowableList::•<core::int*>(0));
-  new self::F2::•<core::int*>(core::_GrowableList::_literal1<core::int*>(3));
-  new self::F2::•<core::int*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                       ^" in "hello" as{TypeError} core::int*));
-  new self::F2::•<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3));
+  new self::F2::•<core::int>(core::_GrowableList::•<core::int>(0));
+  new self::F2::•<core::int>(core::_GrowableList::_literal1<core::int>(3));
+  new self::F2::•<core::int>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int));
+  new self::F2::•<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, 3));
-  new self::F3::•<core::int*>(core::_GrowableList::•<core::Iterable<core::int*>*>(0));
-  new self::F3::•<core::int*>(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F3::•<core::int*>(core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*)));
-  new self::F3::•<core::int*>(core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*), core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F4::•<core::int*>(a: core::_GrowableList::•<core::Iterable<core::int*>*>(0));
-  new self::F4::•<core::int*>(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F4::•<core::int*>(a: core::_GrowableList::_literal1<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                     ^" in "hello" as{TypeError} core::int*)));
-  new self::F4::•<core::int*>(a: core::_GrowableList::_literal2<core::Iterable<core::int*>*>(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                     ^" in "hello" as{TypeError} core::int*), core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F3::•<dynamic>(core::_GrowableList::•<core::Iterable<dynamic>*>(0));
-  self::F3<core::int*>* f31 = new self::F3::•<core::int*>(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  self::F3<core::String*>* f32 = new self::F3::•<core::String*>(core::_GrowableList::_literal1<core::List<core::String*>*>(core::_GrowableList::_literal1<core::String*>("hello")));
-  self::F3<core::Object*>* f33 = new self::F3::•<core::Object*>(core::_GrowableList::_literal2<core::List<core::Object*>*>(core::_GrowableList::_literal1<core::String*>("hello"), core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F4::•<dynamic>(a: core::_GrowableList::•<core::Iterable<dynamic>*>(0));
-  new self::F4::•<core::int*>(a: core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3)));
-  new self::F4::•<core::String*>(a: core::_GrowableList::_literal1<core::List<core::String*>*>(core::_GrowableList::_literal1<core::String*>("hello")));
-  new self::F4::•<core::Object*>(a: core::_GrowableList::_literal2<core::List<core::Object*>*>(core::_GrowableList::_literal1<core::String*>("hello"), core::_GrowableList::_literal1<core::int*>(3)));
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3));
+  new self::F3::•<core::int>(core::_GrowableList::•<core::Iterable<core::int>>(0));
+  new self::F3::•<core::int>(core::_GrowableList::_literal1<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(3)));
+  new self::F3::•<core::int>(core::_GrowableList::_literal1<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int)));
+  new self::F3::•<core::int>(core::_GrowableList::_literal2<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int), core::_GrowableList::_literal1<core::int>(3)));
+  new self::F4::•<core::int>(a: core::_GrowableList::•<core::Iterable<core::int>>(0));
+  new self::F4::•<core::int>(a: core::_GrowableList::_literal1<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(3)));
+  new self::F4::•<core::int>(a: core::_GrowableList::_literal1<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int)));
+  new self::F4::•<core::int>(a: core::_GrowableList::_literal2<core::Iterable<core::int>>(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int), core::_GrowableList::_literal1<core::int>(3)));
+  new self::F3::•<core::Object?>(core::_GrowableList::•<core::Iterable<core::Object?>>(0));
+  self::F3<core::int> f31 = new self::F3::•<core::int>(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(3)));
+  self::F3<core::String> f32 = new self::F3::•<core::String>(core::_GrowableList::_literal1<core::List<core::String>>(core::_GrowableList::_literal1<core::String>("hello")));
+  self::F3<core::Object> f33 = new self::F3::•<core::Object>(core::_GrowableList::_literal2<core::List<core::Object>>(core::_GrowableList::_literal1<core::String>("hello"), core::_GrowableList::_literal1<core::int>(3)));
+  new self::F4::•<core::Object?>(a: core::_GrowableList::•<core::Iterable<core::Object?>>(0));
+  new self::F4::•<core::int>(a: core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(3)));
+  new self::F4::•<core::String>(a: core::_GrowableList::_literal1<core::List<core::String>>(core::_GrowableList::_literal1<core::String>("hello")));
+  new self::F4::•<core::Object>(a: core::_GrowableList::_literal2<core::List<core::Object>>(core::_GrowableList::_literal1<core::String>("hello"), core::_GrowableList::_literal1<core::int>(3)));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart
index a602021..594e578 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart
@@ -1,72 +1,72 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void test() {
   {
-    String f<S>(int x) => null;
-    var /*@ type=<S extends Object* = dynamic>(int*) ->* String* */ v = f;
-    v = <T> /*@ returnType=Null */ (int x) => null;
-    v = <T> /*@ returnType=String* */ (int x) => "hello";
-    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (String x) =>
+    String f<S>(int x) => throw '';
+    var /*@type=<S extends Object? = dynamic>(int) -> String*/ v = f;
+    v = <T> /*@returnType=Never*/ (int x) => throw '';
+    v = <T> /*@returnType=String*/ (int x) => "hello";
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
         "hello";
-    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (int x) => 3;
-    v = <T> /*@ returnType=String* */ (int x) {
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
+    v = <T> /*@returnType=String*/ (int x) {
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
     };
   }
   {
-    String f<S>(int x) => null;
-    var /*@ type=<S extends Object* = dynamic>(int*) ->* String* */ v = f;
-    v = <T> /*@ returnType=Null */ (/*@ type=int* */ x) => null;
-    v = <T> /*@ returnType=String* */ (/*@ type=int* */ x) => "hello";
+    String f<S>(int x) => throw '';
+    var /*@type=<S extends Object? = dynamic>(int) -> String*/ v = f;
+    v = <T> /*@returnType=Never*/ (/*@type=int*/ x) => throw '';
+    v = <T> /*@returnType=String*/ (/*@type=int*/ x) => "hello";
     v = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/ <
-            T> /*@ returnType=String* */ (/*@ type=int* */ x) =>
+            T> /*@returnType=String*/ (/*@type=int*/ x) =>
         3;
-    v = <T> /*@ returnType=String* */ (/*@ type=int* */ x) {
+    v = <T> /*@returnType=String*/ (/*@type=int*/ x) {
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
     };
-    v = <T> /*@ returnType=String* */ (/*@ type=int* */ x) {
+    v = <T> /*@returnType=String*/ (/*@type=int*/ x) {
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
     };
   }
   {
-    List<String> f<S>(int x) => null;
-    var /*@ type=<S extends Object* = dynamic>(int*) ->* List<String*>* */ v = f;
-    v = <T> /*@ returnType=Null */ (int x) => null;
-    v = <T> /*@ returnType=List<String*>* */ (int x) => /*@ typeArgs=String* */ [
+    List<String> f<S>(int x) => throw '';
+    var /*@type=<S extends Object? = dynamic>(int) -> List<String>*/ v = f;
+    v = <T> /*@returnType=Never*/ (int x) => throw '';
+    v = <T> /*@returnType=List<String>*/ (int x) => /*@typeArgs=String*/ [
           "hello"
         ];
-    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=List<String*>* */ (String
-        x) => /*@ typeArgs=String* */ ["hello"];
-    v = <T> /*@ returnType=List<String*>* */ (int x) => /*@ typeArgs=String* */ [
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
+        x) => /*@typeArgs=String*/ ["hello"];
+    v = <T> /*@returnType=List<String>*/ (int x) => /*@typeArgs=String*/ [
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
         ];
-    v = <T> /*@ returnType=List<String*>* */ (int x) {
-      return /*@ typeArgs=String* */ [
+    v = <T> /*@returnType=List<String>*/ (int x) {
+      return /*@typeArgs=String*/ [
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
       ];
     };
   }
   {
-    int int2int<S>(int x) => null;
-    String int2String<T>(int x) => null;
-    String string2String<T>(String x) => null;
-    var /*@ type=<S extends Object* = dynamic>(int*) ->* int* */ x = int2int;
-    x = <T> /*@ returnType=int* */ (/*@ type=int* */ x) => x;
-    x = <T> /*@ returnType=int* */ (/*@ type=int* */ x) => x /*@target=num.+*/ + 1;
-    var /*@ type=<T extends Object* = dynamic>(int*) ->* String* */ y = int2String;
+    int int2int<S>(int x) => throw '';
+    String int2String<T>(int x) => throw '';
+    String string2String<T>(String x) => throw '';
+    var /*@type=<S extends Object? = dynamic>(int) -> int*/ x = int2int;
+    x = <T> /*@returnType=int*/ (/*@type=int*/ x) => x;
+    x = <T> /*@returnType=int*/ (/*@type=int*/ x) => x /*@target=num.+*/ + 1;
+    var /*@type=<T extends Object? = dynamic>(int) -> String*/ y = int2String;
     y = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*/ <
-            T> /*@ returnType=String* */ (/*@ type=int* */ x) =>
+            T> /*@returnType=String*/ (/*@type=int*/ x) =>
         x;
-    y = <T> /*@ returnType=String* */ (/*@ type=int* */ x) => /*info:DYNAMIC_INVOKE, info:DYNAMIC_CAST*/ x
+    y = <T> /*@returnType=String*/ (/*@type=int*/ x) => /*info:DYNAMIC_INVOKE, info:DYNAMIC_CAST*/ x
         .substring(3);
-    var /*@ type=<T extends Object* = dynamic>(String*) ->* String* */ z =
+    var /*@type=<T extends Object? = dynamic>(String) -> String*/ z =
         string2String;
-    z = <T> /*@ returnType=String* */ (/*@ type=String* */ x) =>
+    z = <T> /*@returnType=String*/ (/*@type=String*/ x) =>
         x. /*@target=String.substring*/ substring(3);
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.textual_outline.expect
index dfdb7cb..a6bcf94 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void test() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.textual_outline_modelled.expect
index 7d0b674..72a3ba0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.expect
index 9dc00c4..ac14c85 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.expect
@@ -1,35 +1,35 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:68: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
-//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (String x) =>
-//                                                                    ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
+//                                                                 ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (int x) => 3;
-//                                                                               ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'int' can't be returned from a function with return type 'String'.
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
+//                                                                            ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //         3;
 //         ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ x;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:75: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
 //  - 'List' is from 'dart:core'.
-//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=List<String*>* */ (String
-//                                                                           ^
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
+//                                                                       ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
@@ -39,7 +39,7 @@
 //         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //         x;
 //         ^
 //
@@ -53,82 +53,82 @@
 
 static method test() → void {
   {
-    function f<S extends core::Object* = dynamic>(core::int* x) → core::String*
-      return null;
-    <S extends core::Object* = dynamic>(core::int*) →* core::String* v = f;
-    v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => "hello";
-    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:68: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
-    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (String x) =>
-                                                                   ^" in (<T extends core::Object* = dynamic>(core::String* x) → core::String* => "hello") as{TypeError} <S extends core::Object* = dynamic>(core::int*) →* core::String*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (int x) => 3;
-                                                                              ^" in 3 as{TypeError} core::String*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    function f<S extends core::Object? = dynamic>(core::int x) → core::String
+      return throw "";
+    <S extends core::Object? = dynamic>(core::int) → core::String v = f;
+    v = <T extends core::Object? = dynamic>(core::int x) → Never => throw "";
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String => "hello";
+    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
+                                                                ^" in (<T extends core::Object? = dynamic>(core::String x) → core::String => "hello") as{TypeError,ForNonNullableByDefault} <S extends core::Object? = dynamic>(core::int) → core::String;
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'int' can't be returned from a function with return type 'String'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
+                                                                           ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in 3 as{TypeError} core::String*;
+                                              ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
     };
   }
   {
-    function f<S extends core::Object* = dynamic>(core::int* x) → core::String*
-      return null;
-    <S extends core::Object* = dynamic>(core::int*) →* core::String* v = f;
-    v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => "hello";
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    function f<S extends core::Object? = dynamic>(core::int x) → core::String
+      return throw "";
+    <S extends core::Object? = dynamic>(core::int) → core::String v = f;
+    v = <T extends core::Object? = dynamic>(core::int x) → Never => throw "";
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String => "hello";
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be returned from a function with return type 'String'.
         3;
-        ^" in 3 as{TypeError} core::String*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in 3 as{TypeError} core::String*;
+                                              ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
     };
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
-                                              ^" in x as{TypeError} core::String*;
+                                              ^" in x as{TypeError,ForNonNullableByDefault} core::String;
     };
   }
   {
-    function f<S extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>*
-      return null;
-    <S extends core::Object* = dynamic>(core::int*) →* core::List<core::String*>* v = f;
-    v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => <core::String*>["hello"];
-    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:75: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
+    function f<S extends core::Object? = dynamic>(core::int x) → core::List<core::String>
+      return throw "";
+    <S extends core::Object? = dynamic>(core::int) → core::List<core::String> v = f;
+    v = <T extends core::Object? = dynamic>(core::int x) → Never => throw "";
+    v = <T extends core::Object? = dynamic>(core::int x) → core::List<core::String> => <core::String>["hello"];
+    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
  - 'List' is from 'dart:core'.
-    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=List<String*>* */ (String
-                                                                          ^" in (<T extends core::Object* = dynamic>(core::String* x) → core::List<core::String*>* => <core::String*>["hello"]) as{TypeError} <S extends core::Object* = dynamic>(core::int*) →* core::List<core::String*>*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
+                                                                      ^" in (<T extends core::Object? = dynamic>(core::String x) → core::List<core::String> => <core::String>["hello"]) as{TypeError,ForNonNullableByDefault} <S extends core::Object? = dynamic>(core::int) → core::List<core::String>;
+    v = <T extends core::Object? = dynamic>(core::int x) → core::List<core::String> => <core::String>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                     ^" in 3 as{TypeError} core::String*];
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* {
-      return <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                                     ^" in 3 as{TypeError,ForNonNullableByDefault} core::String];
+    v = <T extends core::Object? = dynamic>(core::int x) → core::List<core::String> {
+      return <core::String>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                   ^" in 3 as{TypeError} core::String*];
+                                                   ^" in 3 as{TypeError,ForNonNullableByDefault} core::String];
     };
   }
   {
-    function int2int<S extends core::Object* = dynamic>(core::int* x) → core::int*
-      return null;
-    function int2String<T extends core::Object* = dynamic>(core::int* x) → core::String*
-      return null;
-    function string2String<T extends core::Object* = dynamic>(core::String* x) → core::String*
-      return null;
-    <S extends core::Object* = dynamic>(core::int*) →* core::int* x = int2int;
-    x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x;
-    x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
-    <T extends core::Object* = dynamic>(core::int*) →* core::String* y = int2String;
-    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:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    function int2int<S extends core::Object? = dynamic>(core::int x) → core::int
+      return throw "";
+    function int2String<T extends core::Object? = dynamic>(core::int x) → core::String
+      return throw "";
+    function string2String<T extends core::Object? = dynamic>(core::String x) → core::String
+      return throw "";
+    <S extends core::Object? = dynamic>(core::int) → core::int x = int2int;
+    x = <T extends core::Object? = dynamic>(core::int x) → core::int => x;
+    x = <T extends core::Object? = dynamic>(core::int x) → core::int => x.{core::num::+}(1){(core::num) → core::int};
+    <T extends core::Object? = dynamic>(core::int) → core::String y = int2String;
+    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:64:9: Error: A value of type 'int' can't be returned from a function with return type 'String'.
         x;
-        ^" in x as{TypeError} core::String*;
-    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'.
+        ^" in x as{TypeError,ForNonNullableByDefault} core::String;
+    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);
-         ^^^^^^^^^" in x{<unresolved>}.substring(3) 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){(core::int*, [core::int*]) →* core::String*};
+         ^^^^^^^^^" in x{<unresolved>}.substring(3) as{TypeError,ForDynamic,ForNonNullableByDefault} 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){(core::int, [core::int?]) → core::String};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.modular.expect
index 9dc00c4..ac14c85 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.modular.expect
@@ -1,35 +1,35 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:68: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
-//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (String x) =>
-//                                                                    ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
+//                                                                 ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (int x) => 3;
-//                                                                               ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'int' can't be returned from a function with return type 'String'.
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
+//                                                                            ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //         3;
 //         ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ x;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:75: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
 //  - 'List' is from 'dart:core'.
-//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=List<String*>* */ (String
-//                                                                           ^
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
+//                                                                       ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
@@ -39,7 +39,7 @@
 //         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //         x;
 //         ^
 //
@@ -53,82 +53,82 @@
 
 static method test() → void {
   {
-    function f<S extends core::Object* = dynamic>(core::int* x) → core::String*
-      return null;
-    <S extends core::Object* = dynamic>(core::int*) →* core::String* v = f;
-    v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => "hello";
-    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:68: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
-    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (String x) =>
-                                                                   ^" in (<T extends core::Object* = dynamic>(core::String* x) → core::String* => "hello") as{TypeError} <S extends core::Object* = dynamic>(core::int*) →* core::String*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (int x) => 3;
-                                                                              ^" in 3 as{TypeError} core::String*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    function f<S extends core::Object? = dynamic>(core::int x) → core::String
+      return throw "";
+    <S extends core::Object? = dynamic>(core::int) → core::String v = f;
+    v = <T extends core::Object? = dynamic>(core::int x) → Never => throw "";
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String => "hello";
+    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
+                                                                ^" in (<T extends core::Object? = dynamic>(core::String x) → core::String => "hello") as{TypeError,ForNonNullableByDefault} <S extends core::Object? = dynamic>(core::int) → core::String;
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'int' can't be returned from a function with return type 'String'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
+                                                                           ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in 3 as{TypeError} core::String*;
+                                              ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
     };
   }
   {
-    function f<S extends core::Object* = dynamic>(core::int* x) → core::String*
-      return null;
-    <S extends core::Object* = dynamic>(core::int*) →* core::String* v = f;
-    v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => "hello";
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    function f<S extends core::Object? = dynamic>(core::int x) → core::String
+      return throw "";
+    <S extends core::Object? = dynamic>(core::int) → core::String v = f;
+    v = <T extends core::Object? = dynamic>(core::int x) → Never => throw "";
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String => "hello";
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be returned from a function with return type 'String'.
         3;
-        ^" in 3 as{TypeError} core::String*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in 3 as{TypeError} core::String*;
+                                              ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
     };
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
-                                              ^" in x as{TypeError} core::String*;
+                                              ^" in x as{TypeError,ForNonNullableByDefault} core::String;
     };
   }
   {
-    function f<S extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>*
-      return null;
-    <S extends core::Object* = dynamic>(core::int*) →* core::List<core::String*>* v = f;
-    v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => <core::String*>["hello"];
-    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:75: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
+    function f<S extends core::Object? = dynamic>(core::int x) → core::List<core::String>
+      return throw "";
+    <S extends core::Object? = dynamic>(core::int) → core::List<core::String> v = f;
+    v = <T extends core::Object? = dynamic>(core::int x) → Never => throw "";
+    v = <T extends core::Object? = dynamic>(core::int x) → core::List<core::String> => <core::String>["hello"];
+    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
  - 'List' is from 'dart:core'.
-    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=List<String*>* */ (String
-                                                                          ^" in (<T extends core::Object* = dynamic>(core::String* x) → core::List<core::String*>* => <core::String*>["hello"]) as{TypeError} <S extends core::Object* = dynamic>(core::int*) →* core::List<core::String*>*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
+                                                                      ^" in (<T extends core::Object? = dynamic>(core::String x) → core::List<core::String> => <core::String>["hello"]) as{TypeError,ForNonNullableByDefault} <S extends core::Object? = dynamic>(core::int) → core::List<core::String>;
+    v = <T extends core::Object? = dynamic>(core::int x) → core::List<core::String> => <core::String>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                     ^" in 3 as{TypeError} core::String*];
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* {
-      return <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                                     ^" in 3 as{TypeError,ForNonNullableByDefault} core::String];
+    v = <T extends core::Object? = dynamic>(core::int x) → core::List<core::String> {
+      return <core::String>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                   ^" in 3 as{TypeError} core::String*];
+                                                   ^" in 3 as{TypeError,ForNonNullableByDefault} core::String];
     };
   }
   {
-    function int2int<S extends core::Object* = dynamic>(core::int* x) → core::int*
-      return null;
-    function int2String<T extends core::Object* = dynamic>(core::int* x) → core::String*
-      return null;
-    function string2String<T extends core::Object* = dynamic>(core::String* x) → core::String*
-      return null;
-    <S extends core::Object* = dynamic>(core::int*) →* core::int* x = int2int;
-    x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x;
-    x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
-    <T extends core::Object* = dynamic>(core::int*) →* core::String* y = int2String;
-    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:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    function int2int<S extends core::Object? = dynamic>(core::int x) → core::int
+      return throw "";
+    function int2String<T extends core::Object? = dynamic>(core::int x) → core::String
+      return throw "";
+    function string2String<T extends core::Object? = dynamic>(core::String x) → core::String
+      return throw "";
+    <S extends core::Object? = dynamic>(core::int) → core::int x = int2int;
+    x = <T extends core::Object? = dynamic>(core::int x) → core::int => x;
+    x = <T extends core::Object? = dynamic>(core::int x) → core::int => x.{core::num::+}(1){(core::num) → core::int};
+    <T extends core::Object? = dynamic>(core::int) → core::String y = int2String;
+    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:64:9: Error: A value of type 'int' can't be returned from a function with return type 'String'.
         x;
-        ^" in x as{TypeError} core::String*;
-    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'.
+        ^" in x as{TypeError,ForNonNullableByDefault} core::String;
+    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);
-         ^^^^^^^^^" in x{<unresolved>}.substring(3) 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){(core::int*, [core::int*]) →* core::String*};
+         ^^^^^^^^^" in x{<unresolved>}.substring(3) as{TypeError,ForDynamic,ForNonNullableByDefault} 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){(core::int, [core::int?]) → core::String};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.outline.expect
index c74ce2b..01b7bf5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.transformed.expect
index b14ba4c..07eaa22 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.transformed.expect
@@ -1,35 +1,35 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:68: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
-//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (String x) =>
-//                                                                    ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
+//                                                                 ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (int x) => 3;
-//                                                                               ^
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'int' can't be returned from a function with return type 'String'.
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
+//                                                                            ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //         3;
 //         ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //       return /*error:RETURN_OF_INVALID_TYPE*/ x;
 //                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:75: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
 //  - 'List' is from 'dart:core'.
-//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=List<String*>* */ (String
-//                                                                           ^
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
+//                                                                       ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
@@ -39,7 +39,7 @@
 //         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                    ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be returned from a function with return type 'String'.
 //         x;
 //         ^
 //
@@ -53,82 +53,82 @@
 
 static method test() → void {
   {
-    function f<S extends core::Object* = dynamic>(core::int* x) → core::String*
-      return null;
-    <S extends core::Object* = dynamic>(core::int*) →* core::String* v = f;
-    v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => "hello";
-    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:68: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
-    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (String x) =>
-                                                                   ^" in (<T extends core::Object* = dynamic>(core::String* x) → core::String* => "hello") as{TypeError} <S extends core::Object* = dynamic>(core::int*) →* core::String*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (int x) => 3;
-                                                                              ^" in 3 as{TypeError} core::String*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    function f<S extends core::Object? = dynamic>(core::int x) → core::String
+      return throw "";
+    <S extends core::Object? = dynamic>(core::int) → core::String v = f;
+    v = <T extends core::Object? = dynamic>(core::int x) → Never => throw "";
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String => "hello";
+    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
+                                                                ^" in (<T extends core::Object? = dynamic>(core::String x) → core::String => "hello") as{TypeError,ForNonNullableByDefault} <S extends core::Object? = dynamic>(core::int) → core::String;
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'int' can't be returned from a function with return type 'String'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
+                                                                           ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in 3 as{TypeError} core::String*;
+                                              ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
     };
   }
   {
-    function f<S extends core::Object* = dynamic>(core::int* x) → core::String*
-      return null;
-    <S extends core::Object* = dynamic>(core::int*) →* core::String* v = f;
-    v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => "hello";
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    function f<S extends core::Object? = dynamic>(core::int x) → core::String
+      return throw "";
+    <S extends core::Object? = dynamic>(core::int) → core::String v = f;
+    v = <T extends core::Object? = dynamic>(core::int x) → Never => throw "";
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String => "hello";
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be returned from a function with return type 'String'.
         3;
-        ^" in 3 as{TypeError} core::String*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in 3 as{TypeError} core::String*;
+                                              ^" in 3 as{TypeError,ForNonNullableByDefault} core::String;
     };
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
-      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = <T extends core::Object? = dynamic>(core::int x) → core::String {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be returned from a function with return type 'String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
-                                              ^" in x as{TypeError} core::String*;
+                                              ^" in x as{TypeError,ForNonNullableByDefault} core::String;
     };
   }
   {
-    function f<S extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>*
-      return null;
-    <S extends core::Object* = dynamic>(core::int*) →* core::List<core::String*>* v = f;
-    v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>("hello");
-    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:75: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
+    function f<S extends core::Object? = dynamic>(core::int x) → core::List<core::String>
+      return throw "";
+    <S extends core::Object? = dynamic>(core::int) → core::List<core::String> v = f;
+    v = <T extends core::Object? = dynamic>(core::int x) → Never => throw "";
+    v = <T extends core::Object? = dynamic>(core::int x) → core::List<core::String> => core::_GrowableList::_literal1<core::String>("hello");
+    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
  - 'List' is from 'dart:core'.
-    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=List<String*>* */ (String
-                                                                          ^" in (<T extends core::Object* = dynamic>(core::String* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>("hello")) as{TypeError} <S extends core::Object* = dynamic>(core::int*) →* core::List<core::String*>*;
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
+                                                                      ^" in (<T extends core::Object? = dynamic>(core::String x) → core::List<core::String> => core::_GrowableList::_literal1<core::String>("hello")) as{TypeError,ForNonNullableByDefault} <S extends core::Object? = dynamic>(core::int) → core::List<core::String>;
+    v = <T extends core::Object? = dynamic>(core::int x) → core::List<core::String> => core::_GrowableList::_literal1<core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                     ^" in 3 as{TypeError} core::String*);
-    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* {
-      return core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                                     ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
+    v = <T extends core::Object? = dynamic>(core::int x) → core::List<core::String> {
+      return core::_GrowableList::_literal1<core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                   ^" in 3 as{TypeError} core::String*);
+                                                   ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
     };
   }
   {
-    function int2int<S extends core::Object* = dynamic>(core::int* x) → core::int*
-      return null;
-    function int2String<T extends core::Object* = dynamic>(core::int* x) → core::String*
-      return null;
-    function string2String<T extends core::Object* = dynamic>(core::String* x) → core::String*
-      return null;
-    <S extends core::Object* = dynamic>(core::int*) →* core::int* x = int2int;
-    x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x;
-    x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
-    <T extends core::Object* = dynamic>(core::int*) →* core::String* y = int2String;
-    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:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    function int2int<S extends core::Object? = dynamic>(core::int x) → core::int
+      return throw "";
+    function int2String<T extends core::Object? = dynamic>(core::int x) → core::String
+      return throw "";
+    function string2String<T extends core::Object? = dynamic>(core::String x) → core::String
+      return throw "";
+    <S extends core::Object? = dynamic>(core::int) → core::int x = int2int;
+    x = <T extends core::Object? = dynamic>(core::int x) → core::int => x;
+    x = <T extends core::Object? = dynamic>(core::int x) → core::int => x.{core::num::+}(1){(core::num) → core::int};
+    <T extends core::Object? = dynamic>(core::int) → core::String y = int2String;
+    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:64:9: Error: A value of type 'int' can't be returned from a function with return type 'String'.
         x;
-        ^" in x as{TypeError} core::String*;
-    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'.
+        ^" in x as{TypeError,ForNonNullableByDefault} core::String;
+    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);
          ^^^^^^^^^" in x{<unresolved>}.substring(3);
-    <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){(core::int*, [core::int*]) →* 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){(core::int, [core::int?]) → core::String};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart
index 75a2524..8d6ed3c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -28,18 +28,18 @@
 }
 
 class E<S, T> extends A<C<S>, T> {
-  E(T a) : super(null, a);
+  E(T a) : super(throw '', a);
 }
 
 class F<S, T> extends A<S, T> {
-  F(S x, T y, {List<S> a, List<T> b}) : super(x, y);
-  F.named(S x, T y, [S a, T b]) : super(a, b);
+  F(S x, T y, {required List<S> a, required List<T> b}) : super(x, y);
+  F.named(S x, T y, [S? a, T? b]) : super(x, y);
 }
 
 void test() {
   {
-    A<int, String> a0 = new /*@ typeArgs=int*, String* */ A(3, "hello");
-    A<int, String> a1 = new /*@ typeArgs=int*, String* */ A.named(3, "hello");
+    A<int, String> a0 = new /*@typeArgs=int, String*/ A(3, "hello");
+    A<int, String> a1 = new /*@typeArgs=int, String*/ A.named(3, "hello");
     A<int, String> a2 = new A<int, String>(3, "hello");
     A<int, String> a3 = new A<int, String>.named(3, "hello");
     A<int, String>
@@ -49,16 +49,16 @@
             3, "hello");
   }
   {
-    A<int, String> a0 = new /*@ typeArgs=int*, String* */ A(
+    A<int, String> a0 = new /*@typeArgs=int, String*/ A(
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-    A<int, String> a1 = new /*@ typeArgs=int*, String* */ A.named(
+    A<int, String> a1 = new /*@typeArgs=int, String*/ A.named(
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
   }
   {
-    A<int, String> a0 = new /*@ typeArgs=String*, int* */ B("hello", 3);
-    A<int, String> a1 = new /*@ typeArgs=String*, int* */ B.named("hello", 3);
+    A<int, String> a0 = new /*@typeArgs=String, int*/ B("hello", 3);
+    A<int, String> a1 = new /*@typeArgs=String, int*/ B.named("hello", 3);
     A<int, String> a2 = new B<String, int>("hello", 3);
     A<int, String> a3 = new B<String, int>.named("hello", 3);
     A<int, String>
@@ -68,30 +68,30 @@
             "hello", 3);
   }
   {
-    A<int, String> a0 = new /*@ typeArgs=String*, int* */ B(
+    A<int, String> a0 = new /*@typeArgs=String, int*/ B(
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
-    A<int, String> a1 = new /*@ typeArgs=String*, int* */ B.named(
+    A<int, String> a1 = new /*@typeArgs=String, int*/ B.named(
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
   }
   {
-    A<int, int> a0 = new /*@ typeArgs=int* */ C(3);
-    A<int, int> a1 = new /*@ typeArgs=int* */ C.named(3);
+    A<int, int> a0 = new /*@typeArgs=int*/ C(3);
+    A<int, int> a1 = new /*@typeArgs=int*/ C.named(3);
     A<int, int> a2 = new C<int>(3);
     A<int, int> a3 = new C<int>.named(3);
     A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
   }
   {
-    A<int, int> a0 = new /*@ typeArgs=int* */ C(
-        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
-    A<int, int> a1 = new /*@ typeArgs=int* */ C.named(
+    A<int, int> a0 =
+        new /*@typeArgs=int*/ C(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+    A<int, int> a1 = new /*@typeArgs=int*/ C.named(
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
   }
   {
-    A<int, String> a0 = new /*@ typeArgs=dynamic, String* */ D("hello");
-    A<int, String> a1 = new /*@ typeArgs=dynamic, String* */ D.named("hello");
+    A<int, String> a0 = new /*@typeArgs=dynamic, String*/ D("hello");
+    A<int, String> a1 = new /*@typeArgs=dynamic, String*/ D.named("hello");
     A<int, String> a2 = new D<int, String>("hello");
     A<int, String> a3 = new D<String, String>.named("hello");
     A<int, String>
@@ -101,37 +101,35 @@
             "hello");
   }
   {
-    A<int, String> a0 = new /*@ typeArgs=dynamic, String* */ D(
+    A<int, String> a0 = new /*@typeArgs=dynamic, String*/ D(
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-    A<int, String> a1 = new /*@ typeArgs=dynamic, String* */ D.named(
+    A<int, String> a1 = new /*@typeArgs=dynamic, String*/ D.named(
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
   }
   {
-    A<C<int>, String> a0 = new /*@ typeArgs=int*, String* */ E("hello");
+    A<C<int>, String> a0 = new /*@typeArgs=int, String*/ E("hello");
   }
   {
     // Check named and optional arguments
-    A<int, String> a0 = new /*@ typeArgs=int*, String* */ F(3, "hello",
-        a: /*@ typeArgs=int* */ [3], b: /*@ typeArgs=String* */ ["hello"]);
-    A<int, String> a1 = new /*@ typeArgs=int*, String* */ F(3, "hello",
-        a: /*@ typeArgs=int* */ [
+    A<int, String> a0 = new /*@typeArgs=int, String*/ F(3, "hello",
+        a: /*@typeArgs=int*/ [3], b: /*@typeArgs=String*/ ["hello"]);
+    A<int, String> a1 = new /*@typeArgs=int, String*/ F(3, "hello",
+        a: /*@typeArgs=int*/ [
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
         ],
-        b: /*@ typeArgs=String* */ [
+        b: /*@typeArgs=String*/ [
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
         ]);
     A<int, String> a2 =
-        new /*@ typeArgs=int*, String* */ F.named(3, "hello", 3, "hello");
-    A<int, String> a3 = new /*@ typeArgs=int*, String* */ F.named(3, "hello");
-    A<int, String> a4 = new /*@ typeArgs=int*, String* */ F.named(
+        new /*@typeArgs=int, String*/ F.named(3, "hello", 3, "hello");
+    A<int, String> a3 = new /*@typeArgs=int, String*/ F.named(3, "hello");
+    A<int, String> a4 = new /*@typeArgs=int, String*/ F.named(
         3,
         "hello",
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-    A<int, String> a5 = new /*@ typeArgs=int*, String* */ F.named(
-        3,
-        "hello",
-        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+    A<int, String> a5 = new /*@typeArgs=int, String*/ F.named(
+        3, "hello", /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.textual_outline.expect
index eb02fb5..0d0c428 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<S, T> {
@@ -24,12 +23,12 @@
 }
 
 class E<S, T> extends A<C<S>, T> {
-  E(T a) : super(null, a);
+  E(T a) : super(throw '', a);
 }
 
 class F<S, T> extends A<S, T> {
-  F(S x, T y, {List<S> a, List<T> b}) : super(x, y);
-  F.named(S x, T y, [S a, T b]) : super(a, b);
+  F(S x, T y, {required List<S> a, required List<T> b}) : super(x, y);
+  F.named(S x, T y, [S? a, T? b]) : super(x, y);
 }
 
 void test() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.textual_outline_modelled.expect
index fa8daa5..a847680 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<S, T> {
@@ -24,12 +23,12 @@
 }
 
 class E<S, T> extends A<C<S>, T> {
-  E(T a) : super(null, a);
+  E(T a) : super(throw '', a);
 }
 
 class F<S, T> extends A<S, T> {
-  F(S x, T y, {List<S> a, List<T> b}) : super(x, y);
-  F.named(S x, T y, [S a, T b]) : super(a, b);
+  F(S x, T y, {required List<S> a, required List<T> b}) : super(x, y);
+  F.named(S x, T y, [S? a, T? b]) : super(x, y);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.expect
index ef65173..9a1fb30 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.expect
@@ -1,16 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'A<int, dynamic>' that isn't of expected type 'A<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: A value of type 'A<int, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
 //  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
-// Change the type of the object being constructed or the context in which it is used.
 //         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, "hello");
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'A<dynamic, dynamic>' that isn't of expected type 'A<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: A value of type 'A<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
 //  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
-// Change the type of the object being constructed or the context in which it is used.
 //         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
 //                                                  ^
 //
@@ -70,9 +68,9 @@
 //     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
 //                                                       ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
-//                                                ^
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:72: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         new /*@typeArgs=int*/ C(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                                        ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
 //         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
@@ -106,203 +104,191 @@
 //           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                      ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int?'.
 //         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String?'.
 //         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
-//                                                ^
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:132:60: Error: The argument type 'String' can't be assigned to the parameter type 'int?'.
+//         3, "hello", /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                            ^
 //
 import self as self;
 import "dart:core" as core;
 
-class A<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A::S* x;
-  covariant-by-class field self::A::T* y;
-  constructor •(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+class A<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::S% x;
+  covariant-by-class field self::A::T% y;
+  constructor •(self::A::S% x, self::A::T% y) → self::A<self::A::S%, self::A::T%>
     : self::A::x = x, self::A::y = y, super core::Object::•()
     ;
-  constructor named(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+  constructor named(self::A::S% x, self::A::T% y) → self::A<self::A::S%, self::A::T%>
     : self::A::x = x, self::A::y = y, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::B::T*, self::B::S*> {
-  constructor •(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
+class B<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::A<self::B::T%, self::B::S%> {
+  constructor •(self::B::S% y, self::B::T% x) → self::B<self::B::S%, self::B::T%>
     : super self::A::•(x, y)
     ;
-  constructor named(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
+  constructor named(self::B::S% y, self::B::T% x) → self::B<self::B::S%, self::B::T%>
     : super self::A::named(x, y)
     ;
 }
-class C<S extends core::Object* = dynamic> extends self::B<self::C::S*, self::C::S*> {
-  constructor •(self::C::S* a) → self::C<self::C::S*>*
+class C<S extends core::Object? = dynamic> extends self::B<self::C::S%, self::C::S%> {
+  constructor •(self::C::S% a) → self::C<self::C::S%>
     : super self::B::•(a, a)
     ;
-  constructor named(self::C::S* a) → self::C<self::C::S*>*
+  constructor named(self::C::S% a) → self::C<self::C::S%>
     : super self::B::named(a, a)
     ;
 }
-class D<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::B<self::D::T*, core::int*> {
-  constructor •(self::D::T* a) → self::D<self::D::S*, self::D::T*>*
+class D<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::B<self::D::T%, core::int> {
+  constructor •(self::D::T% a) → self::D<self::D::S%, self::D::T%>
     : super self::B::•(a, 3)
     ;
-  constructor named(self::D::T* a) → self::D<self::D::S*, self::D::T*>*
+  constructor named(self::D::T% a) → self::D<self::D::S%, self::D::T%>
     : super self::B::named(a, 3)
     ;
 }
-class E<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::C<self::E::S*>*, self::E::T*> {
-  constructor •(self::E::T* a) → self::E<self::E::S*, self::E::T*>*
-    : super self::A::•(null, a)
+class E<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::A<self::C<self::E::S%>, self::E::T%> {
+  constructor •(self::E::T% a) → self::E<self::E::S%, self::E::T%>
+    : super self::A::•(throw "", a)
     ;
 }
-class F<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::F::S*, self::F::T*> {
-  constructor •(self::F::S* x, self::F::T* y, {core::List<self::F::S*>* a = #C1, core::List<self::F::T*>* b = #C1}) → self::F<self::F::S*, self::F::T*>*
+class F<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::A<self::F::S%, self::F::T%> {
+  constructor •(self::F::S% x, self::F::T% y, {required core::List<self::F::S%> a = #C1, required core::List<self::F::T%> b = #C1}) → self::F<self::F::S%, self::F::T%>
     : super self::A::•(x, y)
     ;
-  constructor named(self::F::S* x, self::F::T* y, [self::F::S* a = #C1, self::F::T* b = #C1]) → self::F<self::F::S*, self::F::T*>*
-    : super self::A::•(a, b)
+  constructor named(self::F::S% x, self::F::T% y, [self::F::S? a = #C1, self::F::T? b = #C1]) → self::F<self::F::S%, self::F::T%>
+    : super self::A::•(x, y)
     ;
 }
 static method test() → void {
   {
-    self::A<core::int*, core::String*>* a0 = new self::A::•<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a2 = new self::A::•<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a3 = new self::A::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'A<int, dynamic>' that isn't of expected type 'A<int, String>'.
+    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a2 = new self::A::•<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a3 = new self::A::named<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: A value of type 'A<int, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
-Change the type of the object being constructed or the context in which it is used.
         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");
-                                                 ^" in new self::A::•<core::int*, dynamic>(3, "hello");
-    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'A<dynamic, dynamic>' that isn't of expected type 'A<int, String>'.
+                                                 ^" in new self::A::•<core::int, dynamic>(3, "hello") as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: A value of type 'A<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
-Change the type of the object being constructed or the context in which it is used.
         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
-                                                 ^" in new self::A::named<dynamic, dynamic>(3, "hello");
+                                                 ^" in new self::A::named<dynamic, dynamic>(3, "hello") as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::A::•<core::int*, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
+    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::B::•<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a2 = new self::B::•<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a3 = new self::B::named<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'B<String, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>("hello", 3);
+    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>("hello", 3);
+    self::A<core::int, core::String> a2 = new self::B::•<core::String, core::int>("hello", 3);
+    self::A<core::int, core::String> a3 = new self::B::named<core::String, core::int>("hello", 3);
+    self::A<core::int, core::String> a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'B<String, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);
-                                              ^" in new self::B::•<core::String*, dynamic>("hello", 3) as{TypeError} self::A<core::int*, core::String*>*;
-    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'B<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+                                              ^" in new self::B::•<core::String, dynamic>("hello", 3) as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'B<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
-                                              ^" in new self::B::named<dynamic, dynamic>("hello", 3) as{TypeError} self::A<core::int*, core::String*>*;
+                                              ^" in new self::B::named<dynamic, dynamic>("hello", 3) as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::B::•<core::String*, core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in 3 as{TypeError} core::String*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
-    self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
+    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in 3 as{TypeError} core::String*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
   }
   {
-    self::A<core::int*, core::int*>* a0 = new self::C::•<core::int*>(3);
-    self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(3);
-    self::A<core::int*, core::int*>* a2 = new self::C::•<core::int*>(3);
-    self::A<core::int*, core::int*>* a3 = new self::C::named<core::int*>(3);
-    self::A<core::int*, core::int*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+    self::A<core::int, core::int> a0 = new self::C::•<core::int>(3);
+    self::A<core::int, core::int> a1 = new self::C::named<core::int>(3);
+    self::A<core::int, core::int> a2 = new self::C::•<core::int>(3);
+    self::A<core::int, core::int> a3 = new self::C::named<core::int>(3);
+    self::A<core::int, core::int> a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
  - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
     A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
-                                                      ^" in new self::C::•<dynamic>(3) as{TypeError} self::A<core::int*, core::int*>*;
-    self::A<core::int*, core::int*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+                                                      ^" in new self::C::•<dynamic>(3) as{TypeError,ForNonNullableByDefault} self::A<core::int, core::int>;
+    self::A<core::int, core::int> a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
  - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
-                                                      ^" in new self::C::named<dynamic>(3) as{TypeError} self::A<core::int*, core::int*>*;
+                                                      ^" in new self::C::named<dynamic>(3) as{TypeError,ForNonNullableByDefault} self::A<core::int, core::int>;
   }
   {
-    self::A<core::int*, core::int*>* a0 = new self::C::•<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int, core::int> a0 = new self::C::•<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:72: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        new /*@typeArgs=int*/ C(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                                                       ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
+    self::A<core::int, core::int> a1 = new self::C::named<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
-    self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::D::•<dynamic, core::String*>("hello");
-    self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>("hello");
-    self::A<core::int*, core::String*>* a2 = new self::D::•<core::int*, core::String*>("hello");
-    self::A<core::int*, core::String*>* a3 = new self::D::named<core::String*, core::String*>("hello");
-    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'D<num, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>("hello");
+    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>("hello");
+    self::A<core::int, core::String> a2 = new self::D::•<core::int, core::String>("hello");
+    self::A<core::int, core::String> a3 = new self::D::named<core::String, core::String>("hello");
+    self::A<core::int, core::String> a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'D<num, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");
-                                              ^" in new self::D::•<core::num*, dynamic>("hello") as{TypeError} self::A<core::int*, core::String*>*;
-    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'D<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+                                              ^" in new self::D::•<core::num, dynamic>("hello") as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'D<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
-                                              ^" in new self::D::named<dynamic, dynamic>("hello") as{TypeError} self::A<core::int*, core::String*>*;
+                                              ^" in new self::D::named<dynamic, dynamic>("hello") as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::D::•<dynamic, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
+    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
   }
   {
-    self::A<self::C<core::int*>*, core::String*>* a0 = new self::E::•<core::int*, core::String*>("hello");
+    self::A<self::C<core::int>, core::String> a0 = new self::E::•<core::int, core::String>("hello");
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::F::•<core::int*, core::String*>(3, "hello", a: <core::int*>[3], b: <core::String*>["hello"]);
-    self::A<core::int*, core::String*>* a1 = new self::F::•<core::int*, core::String*>(3, "hello", a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    self::A<core::int, core::String> a0 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[3], b: <core::String>["hello"]);
+    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                     ^" in "hello" as{TypeError} core::int*], b: <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                                     ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], b: <core::String>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                     ^" in 3 as{TypeError} core::String*]);
-    self::A<core::int*, core::String*>* a2 = new self::F::named<core::int*, core::String*>(3, "hello", 3, "hello");
-    self::A<core::int*, core::String*>* a3 = new self::F::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a4 = new self::F::named<core::int*, core::String*>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                                     ^" in 3 as{TypeError,ForNonNullableByDefault} core::String]);
+    self::A<core::int, core::String> a2 = new self::F::named<core::int, core::String>(3, "hello", 3, "hello");
+    self::A<core::int, core::String> a3 = new self::F::named<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int?'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int?, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String?'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a5 = new self::F::named<core::int*, core::String*>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String?);
+    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:132:60: Error: The argument type 'String' can't be assigned to the parameter type 'int?'.
+        3, \"hello\", /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                                           ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int?);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.modular.expect
index ef65173..9a1fb30 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.modular.expect
@@ -1,16 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'A<int, dynamic>' that isn't of expected type 'A<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: A value of type 'A<int, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
 //  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
-// Change the type of the object being constructed or the context in which it is used.
 //         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, "hello");
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'A<dynamic, dynamic>' that isn't of expected type 'A<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: A value of type 'A<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
 //  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
-// Change the type of the object being constructed or the context in which it is used.
 //         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
 //                                                  ^
 //
@@ -70,9 +68,9 @@
 //     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
 //                                                       ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
-//                                                ^
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:72: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         new /*@typeArgs=int*/ C(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                                        ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
 //         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
@@ -106,203 +104,191 @@
 //           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                      ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int?'.
 //         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String?'.
 //         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
-//                                                ^
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:132:60: Error: The argument type 'String' can't be assigned to the parameter type 'int?'.
+//         3, "hello", /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                            ^
 //
 import self as self;
 import "dart:core" as core;
 
-class A<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A::S* x;
-  covariant-by-class field self::A::T* y;
-  constructor •(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+class A<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::S% x;
+  covariant-by-class field self::A::T% y;
+  constructor •(self::A::S% x, self::A::T% y) → self::A<self::A::S%, self::A::T%>
     : self::A::x = x, self::A::y = y, super core::Object::•()
     ;
-  constructor named(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+  constructor named(self::A::S% x, self::A::T% y) → self::A<self::A::S%, self::A::T%>
     : self::A::x = x, self::A::y = y, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::B::T*, self::B::S*> {
-  constructor •(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
+class B<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::A<self::B::T%, self::B::S%> {
+  constructor •(self::B::S% y, self::B::T% x) → self::B<self::B::S%, self::B::T%>
     : super self::A::•(x, y)
     ;
-  constructor named(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
+  constructor named(self::B::S% y, self::B::T% x) → self::B<self::B::S%, self::B::T%>
     : super self::A::named(x, y)
     ;
 }
-class C<S extends core::Object* = dynamic> extends self::B<self::C::S*, self::C::S*> {
-  constructor •(self::C::S* a) → self::C<self::C::S*>*
+class C<S extends core::Object? = dynamic> extends self::B<self::C::S%, self::C::S%> {
+  constructor •(self::C::S% a) → self::C<self::C::S%>
     : super self::B::•(a, a)
     ;
-  constructor named(self::C::S* a) → self::C<self::C::S*>*
+  constructor named(self::C::S% a) → self::C<self::C::S%>
     : super self::B::named(a, a)
     ;
 }
-class D<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::B<self::D::T*, core::int*> {
-  constructor •(self::D::T* a) → self::D<self::D::S*, self::D::T*>*
+class D<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::B<self::D::T%, core::int> {
+  constructor •(self::D::T% a) → self::D<self::D::S%, self::D::T%>
     : super self::B::•(a, 3)
     ;
-  constructor named(self::D::T* a) → self::D<self::D::S*, self::D::T*>*
+  constructor named(self::D::T% a) → self::D<self::D::S%, self::D::T%>
     : super self::B::named(a, 3)
     ;
 }
-class E<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::C<self::E::S*>*, self::E::T*> {
-  constructor •(self::E::T* a) → self::E<self::E::S*, self::E::T*>*
-    : super self::A::•(null, a)
+class E<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::A<self::C<self::E::S%>, self::E::T%> {
+  constructor •(self::E::T% a) → self::E<self::E::S%, self::E::T%>
+    : super self::A::•(throw "", a)
     ;
 }
-class F<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::F::S*, self::F::T*> {
-  constructor •(self::F::S* x, self::F::T* y, {core::List<self::F::S*>* a = #C1, core::List<self::F::T*>* b = #C1}) → self::F<self::F::S*, self::F::T*>*
+class F<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::A<self::F::S%, self::F::T%> {
+  constructor •(self::F::S% x, self::F::T% y, {required core::List<self::F::S%> a = #C1, required core::List<self::F::T%> b = #C1}) → self::F<self::F::S%, self::F::T%>
     : super self::A::•(x, y)
     ;
-  constructor named(self::F::S* x, self::F::T* y, [self::F::S* a = #C1, self::F::T* b = #C1]) → self::F<self::F::S*, self::F::T*>*
-    : super self::A::•(a, b)
+  constructor named(self::F::S% x, self::F::T% y, [self::F::S? a = #C1, self::F::T? b = #C1]) → self::F<self::F::S%, self::F::T%>
+    : super self::A::•(x, y)
     ;
 }
 static method test() → void {
   {
-    self::A<core::int*, core::String*>* a0 = new self::A::•<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a2 = new self::A::•<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a3 = new self::A::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'A<int, dynamic>' that isn't of expected type 'A<int, String>'.
+    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a2 = new self::A::•<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a3 = new self::A::named<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: A value of type 'A<int, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
-Change the type of the object being constructed or the context in which it is used.
         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");
-                                                 ^" in new self::A::•<core::int*, dynamic>(3, "hello");
-    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'A<dynamic, dynamic>' that isn't of expected type 'A<int, String>'.
+                                                 ^" in new self::A::•<core::int, dynamic>(3, "hello") as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: A value of type 'A<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
-Change the type of the object being constructed or the context in which it is used.
         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
-                                                 ^" in new self::A::named<dynamic, dynamic>(3, "hello");
+                                                 ^" in new self::A::named<dynamic, dynamic>(3, "hello") as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::A::•<core::int*, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
+    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::B::•<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a2 = new self::B::•<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a3 = new self::B::named<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'B<String, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>("hello", 3);
+    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>("hello", 3);
+    self::A<core::int, core::String> a2 = new self::B::•<core::String, core::int>("hello", 3);
+    self::A<core::int, core::String> a3 = new self::B::named<core::String, core::int>("hello", 3);
+    self::A<core::int, core::String> a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'B<String, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);
-                                              ^" in new self::B::•<core::String*, dynamic>("hello", 3) as{TypeError} self::A<core::int*, core::String*>*;
-    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'B<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+                                              ^" in new self::B::•<core::String, dynamic>("hello", 3) as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'B<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
-                                              ^" in new self::B::named<dynamic, dynamic>("hello", 3) as{TypeError} self::A<core::int*, core::String*>*;
+                                              ^" in new self::B::named<dynamic, dynamic>("hello", 3) as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::B::•<core::String*, core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in 3 as{TypeError} core::String*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
-    self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
+    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in 3 as{TypeError} core::String*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
   }
   {
-    self::A<core::int*, core::int*>* a0 = new self::C::•<core::int*>(3);
-    self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(3);
-    self::A<core::int*, core::int*>* a2 = new self::C::•<core::int*>(3);
-    self::A<core::int*, core::int*>* a3 = new self::C::named<core::int*>(3);
-    self::A<core::int*, core::int*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+    self::A<core::int, core::int> a0 = new self::C::•<core::int>(3);
+    self::A<core::int, core::int> a1 = new self::C::named<core::int>(3);
+    self::A<core::int, core::int> a2 = new self::C::•<core::int>(3);
+    self::A<core::int, core::int> a3 = new self::C::named<core::int>(3);
+    self::A<core::int, core::int> a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
  - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
     A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
-                                                      ^" in new self::C::•<dynamic>(3) as{TypeError} self::A<core::int*, core::int*>*;
-    self::A<core::int*, core::int*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+                                                      ^" in new self::C::•<dynamic>(3) as{TypeError,ForNonNullableByDefault} self::A<core::int, core::int>;
+    self::A<core::int, core::int> a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
  - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
-                                                      ^" in new self::C::named<dynamic>(3) as{TypeError} self::A<core::int*, core::int*>*;
+                                                      ^" in new self::C::named<dynamic>(3) as{TypeError,ForNonNullableByDefault} self::A<core::int, core::int>;
   }
   {
-    self::A<core::int*, core::int*>* a0 = new self::C::•<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int, core::int> a0 = new self::C::•<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:72: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        new /*@typeArgs=int*/ C(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                                                       ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
+    self::A<core::int, core::int> a1 = new self::C::named<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
-    self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::D::•<dynamic, core::String*>("hello");
-    self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>("hello");
-    self::A<core::int*, core::String*>* a2 = new self::D::•<core::int*, core::String*>("hello");
-    self::A<core::int*, core::String*>* a3 = new self::D::named<core::String*, core::String*>("hello");
-    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'D<num, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>("hello");
+    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>("hello");
+    self::A<core::int, core::String> a2 = new self::D::•<core::int, core::String>("hello");
+    self::A<core::int, core::String> a3 = new self::D::named<core::String, core::String>("hello");
+    self::A<core::int, core::String> a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'D<num, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");
-                                              ^" in new self::D::•<core::num*, dynamic>("hello") as{TypeError} self::A<core::int*, core::String*>*;
-    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'D<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+                                              ^" in new self::D::•<core::num, dynamic>("hello") as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'D<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
-                                              ^" in new self::D::named<dynamic, dynamic>("hello") as{TypeError} self::A<core::int*, core::String*>*;
+                                              ^" in new self::D::named<dynamic, dynamic>("hello") as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::D::•<dynamic, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
+    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
   }
   {
-    self::A<self::C<core::int*>*, core::String*>* a0 = new self::E::•<core::int*, core::String*>("hello");
+    self::A<self::C<core::int>, core::String> a0 = new self::E::•<core::int, core::String>("hello");
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::F::•<core::int*, core::String*>(3, "hello", a: <core::int*>[3], b: <core::String*>["hello"]);
-    self::A<core::int*, core::String*>* a1 = new self::F::•<core::int*, core::String*>(3, "hello", a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    self::A<core::int, core::String> a0 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[3], b: <core::String>["hello"]);
+    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                     ^" in "hello" as{TypeError} core::int*], b: <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                                     ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int], b: <core::String>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                     ^" in 3 as{TypeError} core::String*]);
-    self::A<core::int*, core::String*>* a2 = new self::F::named<core::int*, core::String*>(3, "hello", 3, "hello");
-    self::A<core::int*, core::String*>* a3 = new self::F::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a4 = new self::F::named<core::int*, core::String*>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                                     ^" in 3 as{TypeError,ForNonNullableByDefault} core::String]);
+    self::A<core::int, core::String> a2 = new self::F::named<core::int, core::String>(3, "hello", 3, "hello");
+    self::A<core::int, core::String> a3 = new self::F::named<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int?'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int?, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String?'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a5 = new self::F::named<core::int*, core::String*>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String?);
+    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:132:60: Error: The argument type 'String' can't be assigned to the parameter type 'int?'.
+        3, \"hello\", /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                                           ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int?);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect
index a2ec85f..f5a64a2 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect
@@ -1,51 +1,41 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A::S* x;
-  covariant-by-class field self::A::T* y;
-  constructor •(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+class A<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::S% x;
+  covariant-by-class field self::A::T% y;
+  constructor •(self::A::S% x, self::A::T% y) → self::A<self::A::S%, self::A::T%>
     ;
-  constructor named(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class B<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::B::T*, self::B::S*> {
-  constructor •(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
-    ;
-  constructor named(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
+  constructor named(self::A::S% x, self::A::T% y) → self::A<self::A::S%, self::A::T%>
     ;
 }
-class C<S extends core::Object* = dynamic> extends self::B<self::C::S*, self::C::S*> {
-  constructor •(self::C::S* a) → self::C<self::C::S*>*
+class B<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::A<self::B::T%, self::B::S%> {
+  constructor •(self::B::S% y, self::B::T% x) → self::B<self::B::S%, self::B::T%>
     ;
-  constructor named(self::C::S* a) → self::C<self::C::S*>*
+  constructor named(self::B::S% y, self::B::T% x) → self::B<self::B::S%, self::B::T%>
     ;
 }
-class D<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::B<self::D::T*, core::int*> {
-  constructor •(self::D::T* a) → self::D<self::D::S*, self::D::T*>*
+class C<S extends core::Object? = dynamic> extends self::B<self::C::S%, self::C::S%> {
+  constructor •(self::C::S% a) → self::C<self::C::S%>
     ;
-  constructor named(self::D::T* a) → self::D<self::D::S*, self::D::T*>*
+  constructor named(self::C::S% a) → self::C<self::C::S%>
     ;
 }
-class E<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::C<self::E::S*>*, self::E::T*> {
-  constructor •(self::E::T* a) → self::E<self::E::S*, self::E::T*>*
+class D<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::B<self::D::T%, core::int> {
+  constructor •(self::D::T% a) → self::D<self::D::S%, self::D::T%>
+    ;
+  constructor named(self::D::T% a) → self::D<self::D::S%, self::D::T%>
     ;
 }
-class F<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::F::S*, self::F::T*> {
-  constructor •(self::F::S* x, self::F::T* y, {core::List<self::F::S*>* a = null, core::List<self::F::T*>* b = null}) → self::F<self::F::S*, self::F::T*>*
+class E<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::A<self::C<self::E::S%>, self::E::T%> {
+  constructor •(self::E::T% a) → self::E<self::E::S%, self::E::T%>
     ;
-  constructor named(self::F::S* x, self::F::T* y, [self::F::S* a = null, self::F::T* b = null]) → self::F<self::F::S*, self::F::T*>*
+}
+class F<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::A<self::F::S%, self::F::T%> {
+  constructor •(self::F::S% x, self::F::T% y, {required core::List<self::F::S%> a = null, required core::List<self::F::T%> b = null}) → self::F<self::F::S%, self::F::T%>
+    ;
+  constructor named(self::F::S% x, self::F::T% y, [self::F::S? a = null, self::F::T? b = null]) → self::F<self::F::S%, self::F::T%>
     ;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.transformed.expect
index 82fa878..ed80e37 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.transformed.expect
@@ -1,16 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'A<int, dynamic>' that isn't of expected type 'A<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: A value of type 'A<int, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
 //  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
-// Change the type of the object being constructed or the context in which it is used.
 //         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, "hello");
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'A<dynamic, dynamic>' that isn't of expected type 'A<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: A value of type 'A<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
 //  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
-// Change the type of the object being constructed or the context in which it is used.
 //         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
 //                                                  ^
 //
@@ -70,9 +68,9 @@
 //     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
 //                                                       ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
-//                                                ^
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:72: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         new /*@typeArgs=int*/ C(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                                        ^
 //
 // pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
 //         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
@@ -106,203 +104,191 @@
 //           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                      ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int?'.
 //         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String?'.
 //         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
 //                                                ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
-//                                                ^
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:132:60: Error: The argument type 'String' can't be assigned to the parameter type 'int?'.
+//         3, "hello", /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                            ^
 //
 import self as self;
 import "dart:core" as core;
 
-class A<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A::S* x;
-  covariant-by-class field self::A::T* y;
-  constructor •(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+class A<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::S% x;
+  covariant-by-class field self::A::T% y;
+  constructor •(self::A::S% x, self::A::T% y) → self::A<self::A::S%, self::A::T%>
     : self::A::x = x, self::A::y = y, super core::Object::•()
     ;
-  constructor named(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+  constructor named(self::A::S% x, self::A::T% y) → self::A<self::A::S%, self::A::T%>
     : self::A::x = x, self::A::y = y, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::B::T*, self::B::S*> {
-  constructor •(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
+class B<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::A<self::B::T%, self::B::S%> {
+  constructor •(self::B::S% y, self::B::T% x) → self::B<self::B::S%, self::B::T%>
     : super self::A::•(x, y)
     ;
-  constructor named(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
+  constructor named(self::B::S% y, self::B::T% x) → self::B<self::B::S%, self::B::T%>
     : super self::A::named(x, y)
     ;
 }
-class C<S extends core::Object* = dynamic> extends self::B<self::C::S*, self::C::S*> {
-  constructor •(self::C::S* a) → self::C<self::C::S*>*
+class C<S extends core::Object? = dynamic> extends self::B<self::C::S%, self::C::S%> {
+  constructor •(self::C::S% a) → self::C<self::C::S%>
     : super self::B::•(a, a)
     ;
-  constructor named(self::C::S* a) → self::C<self::C::S*>*
+  constructor named(self::C::S% a) → self::C<self::C::S%>
     : super self::B::named(a, a)
     ;
 }
-class D<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::B<self::D::T*, core::int*> {
-  constructor •(self::D::T* a) → self::D<self::D::S*, self::D::T*>*
+class D<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::B<self::D::T%, core::int> {
+  constructor •(self::D::T% a) → self::D<self::D::S%, self::D::T%>
     : super self::B::•(a, 3)
     ;
-  constructor named(self::D::T* a) → self::D<self::D::S*, self::D::T*>*
+  constructor named(self::D::T% a) → self::D<self::D::S%, self::D::T%>
     : super self::B::named(a, 3)
     ;
 }
-class E<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::C<self::E::S*>*, self::E::T*> {
-  constructor •(self::E::T* a) → self::E<self::E::S*, self::E::T*>*
-    : super self::A::•(null, a)
+class E<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::A<self::C<self::E::S%>, self::E::T%> {
+  constructor •(self::E::T% a) → self::E<self::E::S%, self::E::T%>
+    : super self::A::•(throw "", a)
     ;
 }
-class F<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::F::S*, self::F::T*> {
-  constructor •(self::F::S* x, self::F::T* y, {core::List<self::F::S*>* a = #C1, core::List<self::F::T*>* b = #C1}) → self::F<self::F::S*, self::F::T*>*
+class F<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::A<self::F::S%, self::F::T%> {
+  constructor •(self::F::S% x, self::F::T% y, {required core::List<self::F::S%> a = #C1, required core::List<self::F::T%> b = #C1}) → self::F<self::F::S%, self::F::T%>
     : super self::A::•(x, y)
     ;
-  constructor named(self::F::S* x, self::F::T* y, [self::F::S* a = #C1, self::F::T* b = #C1]) → self::F<self::F::S*, self::F::T*>*
-    : super self::A::•(a, b)
+  constructor named(self::F::S% x, self::F::T% y, [self::F::S? a = #C1, self::F::T? b = #C1]) → self::F<self::F::S%, self::F::T%>
+    : super self::A::•(x, y)
     ;
 }
 static method test() → void {
   {
-    self::A<core::int*, core::String*>* a0 = new self::A::•<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a2 = new self::A::•<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a3 = new self::A::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'A<int, dynamic>' that isn't of expected type 'A<int, String>'.
+    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a2 = new self::A::•<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a3 = new self::A::named<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: A value of type 'A<int, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
-Change the type of the object being constructed or the context in which it is used.
         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");
-                                                 ^" in new self::A::•<core::int*, dynamic>(3, "hello");
-    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'A<dynamic, dynamic>' that isn't of expected type 'A<int, String>'.
+                                                 ^" in new self::A::•<core::int, dynamic>(3, "hello") as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: A value of type 'A<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
-Change the type of the object being constructed or the context in which it is used.
         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
-                                                 ^" in new self::A::named<dynamic, dynamic>(3, "hello");
+                                                 ^" in new self::A::named<dynamic, dynamic>(3, "hello") as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::A::•<core::int*, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
+    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::B::•<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a2 = new self::B::•<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a3 = new self::B::named<core::String*, core::int*>("hello", 3);
-    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'B<String, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>("hello", 3);
+    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>("hello", 3);
+    self::A<core::int, core::String> a2 = new self::B::•<core::String, core::int>("hello", 3);
+    self::A<core::int, core::String> a3 = new self::B::named<core::String, core::int>("hello", 3);
+    self::A<core::int, core::String> a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'B<String, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);
-                                              ^" in new self::B::•<core::String*, dynamic>("hello", 3) as{TypeError} self::A<core::int*, core::String*>*;
-    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'B<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+                                              ^" in new self::B::•<core::String, dynamic>("hello", 3) as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'B<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
-                                              ^" in new self::B::named<dynamic, dynamic>("hello", 3) as{TypeError} self::A<core::int*, core::String*>*;
+                                              ^" in new self::B::named<dynamic, dynamic>("hello", 3) as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::B::•<core::String*, core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in 3 as{TypeError} core::String*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
-    self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
+    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in 3 as{TypeError} core::String*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
   }
   {
-    self::A<core::int*, core::int*>* a0 = new self::C::•<core::int*>(3);
-    self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(3);
-    self::A<core::int*, core::int*>* a2 = new self::C::•<core::int*>(3);
-    self::A<core::int*, core::int*>* a3 = new self::C::named<core::int*>(3);
-    self::A<core::int*, core::int*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+    self::A<core::int, core::int> a0 = new self::C::•<core::int>(3);
+    self::A<core::int, core::int> a1 = new self::C::named<core::int>(3);
+    self::A<core::int, core::int> a2 = new self::C::•<core::int>(3);
+    self::A<core::int, core::int> a3 = new self::C::named<core::int>(3);
+    self::A<core::int, core::int> a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
  - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
     A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
-                                                      ^" in new self::C::•<dynamic>(3) as{TypeError} self::A<core::int*, core::int*>*;
-    self::A<core::int*, core::int*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+                                                      ^" in new self::C::•<dynamic>(3) as{TypeError,ForNonNullableByDefault} self::A<core::int, core::int>;
+    self::A<core::int, core::int> a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
  - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
-                                                      ^" in new self::C::named<dynamic>(3) as{TypeError} self::A<core::int*, core::int*>*;
+                                                      ^" in new self::C::named<dynamic>(3) as{TypeError,ForNonNullableByDefault} self::A<core::int, core::int>;
   }
   {
-    self::A<core::int*, core::int*>* a0 = new self::C::•<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    self::A<core::int, core::int> a0 = new self::C::•<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:72: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        new /*@typeArgs=int*/ C(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                                                       ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
+    self::A<core::int, core::int> a1 = new self::C::named<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
-    self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::D::•<dynamic, core::String*>("hello");
-    self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>("hello");
-    self::A<core::int*, core::String*>* a2 = new self::D::•<core::int*, core::String*>("hello");
-    self::A<core::int*, core::String*>* a3 = new self::D::named<core::String*, core::String*>("hello");
-    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'D<num, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>("hello");
+    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>("hello");
+    self::A<core::int, core::String> a2 = new self::D::•<core::int, core::String>("hello");
+    self::A<core::int, core::String> a3 = new self::D::named<core::String, core::String>("hello");
+    self::A<core::int, core::String> a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'D<num, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");
-                                              ^" in new self::D::•<core::num*, dynamic>("hello") as{TypeError} self::A<core::int*, core::String*>*;
-    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'D<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+                                              ^" in new self::D::•<core::num, dynamic>("hello") as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'D<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
  - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
-                                              ^" in new self::D::named<dynamic, dynamic>("hello") as{TypeError} self::A<core::int*, core::String*>*;
+                                              ^" in new self::D::named<dynamic, dynamic>("hello") as{TypeError,ForNonNullableByDefault} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::D::•<dynamic, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
+    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String);
   }
   {
-    self::A<self::C<core::int*>*, core::String*>* a0 = new self::E::•<core::int*, core::String*>("hello");
+    self::A<self::C<core::int>, core::String> a0 = new self::E::•<core::int, core::String>("hello");
   }
   {
-    self::A<core::int*, core::String*>* a0 = new self::F::•<core::int*, core::String*>(3, "hello", a: core::_GrowableList::_literal1<core::int*>(3), b: core::_GrowableList::_literal1<core::String*>("hello"));
-    self::A<core::int*, core::String*>* a1 = new self::F::•<core::int*, core::String*>(3, "hello", a: core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    self::A<core::int, core::String> a0 = new self::F::•<core::int, core::String>(3, "hello", a: core::_GrowableList::_literal1<core::int>(3), b: core::_GrowableList::_literal1<core::String>("hello"));
+    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                     ^" in "hello" as{TypeError} core::int*), b: core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                                     ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int), b: core::_GrowableList::_literal1<core::String>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                     ^" in 3 as{TypeError} core::String*));
-    self::A<core::int*, core::String*>* a2 = new self::F::named<core::int*, core::String*>(3, "hello", 3, "hello");
-    self::A<core::int*, core::String*>* a3 = new self::F::named<core::int*, core::String*>(3, "hello");
-    self::A<core::int*, core::String*>* a4 = new self::F::named<core::int*, core::String*>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+                                                     ^" in 3 as{TypeError,ForNonNullableByDefault} core::String));
+    self::A<core::int, core::String> a2 = new self::F::named<core::int, core::String>(3, "hello", 3, "hello");
+    self::A<core::int, core::String> a3 = new self::F::named<core::int, core::String>(3, "hello");
+    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int?'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+                                               ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int?, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String?'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in 3 as{TypeError} core::String*);
-    self::A<core::int*, core::String*>* a5 = new self::F::named<core::int*, core::String*>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in "hello" as{TypeError} core::int*);
+                                               ^" in 3 as{TypeError,ForNonNullableByDefault} core::String?);
+    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:132:60: Error: The argument type 'String' can't be assigned to the parameter type 'int?'.
+        3, \"hello\", /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                                           ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int?);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart
index 76ddf0b..dfe7f55 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart
@@ -1,24 +1,26 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void foo(
-    [List<String> list1 = /*@ typeArgs=String* */ const [],
-    List<String> list2 = /*@ typeArgs=String* */ const [
+    [List<String> list1 = /*@typeArgs=String**/ const [],
+    List<String> list2 = /*@typeArgs=String**/ const [
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
     ]]) {}
 
 void main() {
   {
-    List<int> l0 = /*@ typeArgs=int* */ [];
-    List<int> l1 = /*@ typeArgs=int* */ [3];
-    List<int> l2 = /*@ typeArgs=int* */ [
+    List<int> l0 = /*@typeArgs=int**/ [];
+    List<int> l1 = /*@typeArgs=int**/ [3];
+    List<int> l2 = /*@typeArgs=int**/ [
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
     ];
-    List<int> l3 = /*@ typeArgs=int* */ [
+    List<int> l3 = /*@typeArgs=int**/ [
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
       3
     ];
@@ -41,23 +43,23 @@
     ];
   }
   {
-    Iterable<int> i0 = /*@ typeArgs=int* */ [];
-    Iterable<int> i1 = /*@ typeArgs=int* */ [3];
-    Iterable<int> i2 = /*@ typeArgs=int* */ [
+    Iterable<int> i0 = /*@typeArgs=int**/ [];
+    Iterable<int> i1 = /*@typeArgs=int**/ [3];
+    Iterable<int> i2 = /*@typeArgs=int**/ [
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
     ];
-    Iterable<int> i3 = /*@ typeArgs=int* */ [
+    Iterable<int> i3 = /*@typeArgs=int**/ [
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
       3
     ];
   }
   {
-    const List<int> c0 = /*@ typeArgs=int* */ const [];
-    const List<int> c1 = /*@ typeArgs=int* */ const [3];
-    const List<int> c2 = /*@ typeArgs=int* */ const [
+    const List<int> c0 = /*@typeArgs=int**/ const [];
+    const List<int> c1 = /*@typeArgs=int**/ const [3];
+    const List<int> c2 = /*@typeArgs=int**/ const [
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
     ];
-    const List<int> c3 = /*@ typeArgs=int* */ const [
+    const List<int> c3 = /*@typeArgs=int**/ const [
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
       3
     ];
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.expect
index 871e6e1..2bf7d99 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.expect
@@ -2,80 +2,80 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:13:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
 //                                                                                         ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:21:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:24:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
-//  - 'List' is from 'dart:core'.
-// Change the type of the list literal or the context in which it is used.
-//     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
-//                                                             ^
-//
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
-//  - 'List' is from 'dart:core'.
-// Change the type of the list literal or the context in which it is used.
-//     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
-//                                                             ^
-//
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
-//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
-//                                                  ^
-//
 // pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
 //  - 'List' is from 'dart:core'.
 // Change the type of the list literal or the context in which it is used.
+//     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Change the type of the list literal or the context in which it is used.
+//     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:37:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Change the type of the list literal or the context in which it is used.
 //     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
 //                                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:41:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:40:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
 //  - 'List' is from 'dart:core'.
 // Change the type of the list literal or the context in which it is used.
 //     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
 //                                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:49:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:52:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:60:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
 //                                                                                         ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:63:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                                                         ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::List<core::String*>* list1 = #C1, core::List<core::String*>* list2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+static method foo([core::List<core::String*>* list1 = #C1, core::List<core::String*>* list2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:13:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
                                                                                         ^"]) → void {}
 static method main() → void {
   {
     core::List<core::int*>* l0 = <core::int*>[];
     core::List<core::int*>* l1 = <core::int*>[3];
-    core::List<core::int*>* l2 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::List<core::int*>* l2 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:21:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::int*];
-    core::List<core::int*>* l3 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::List<core::int*>* l3 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:24:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::int*, 3];
   }
@@ -86,46 +86,46 @@
     core::List<dynamic>* l3 = <dynamic>["hello", 3];
   }
   {
-    core::List<core::int*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
                                                             ^" in <core::num*>[];
-    core::List<core::int*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
                                                             ^" in <core::num*>[3];
-    core::List<core::int*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:37:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in <core::num*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+                                                            ^" in <core::num*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::num*];
-    core::List<core::int*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:40:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in <core::num*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+                                                            ^" in <core::num*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:41:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::num*, 3];
   }
   {
     core::Iterable<core::int*>* i0 = <core::int*>[];
     core::Iterable<core::int*>* i1 = <core::int*>[3];
-    core::Iterable<core::int*>* i2 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Iterable<core::int*>* i2 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:49:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::int*];
-    core::Iterable<core::int*>* i3 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Iterable<core::int*>* i3 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:52:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::int*, 3];
   }
   {
-    const core::List<core::int*>* c2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    const core::List<core::int*>* c2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:60:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                                                         ^";
-    const core::List<core::int*>* c3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    const core::List<core::int*>* c3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:63:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                                                         ^";
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.modular.expect
index 871e6e1..2bf7d99 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.modular.expect
@@ -2,80 +2,80 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:13:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
 //                                                                                         ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:21:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:24:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
-//  - 'List' is from 'dart:core'.
-// Change the type of the list literal or the context in which it is used.
-//     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
-//                                                             ^
-//
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
-//  - 'List' is from 'dart:core'.
-// Change the type of the list literal or the context in which it is used.
-//     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
-//                                                             ^
-//
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
-//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
-//                                                  ^
-//
 // pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
 //  - 'List' is from 'dart:core'.
 // Change the type of the list literal or the context in which it is used.
+//     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Change the type of the list literal or the context in which it is used.
+//     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:37:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Change the type of the list literal or the context in which it is used.
 //     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
 //                                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:41:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:40:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
 //  - 'List' is from 'dart:core'.
 // Change the type of the list literal or the context in which it is used.
 //     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
 //                                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:49:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:52:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:60:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
 //                                                                                         ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:63:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                                                         ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::List<core::String*>* list1 = #C1, core::List<core::String*>* list2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+static method foo([core::List<core::String*>* list1 = #C1, core::List<core::String*>* list2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:13:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
                                                                                         ^"]) → void {}
 static method main() → void {
   {
     core::List<core::int*>* l0 = <core::int*>[];
     core::List<core::int*>* l1 = <core::int*>[3];
-    core::List<core::int*>* l2 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::List<core::int*>* l2 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:21:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::int*];
-    core::List<core::int*>* l3 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::List<core::int*>* l3 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:24:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::int*, 3];
   }
@@ -86,46 +86,46 @@
     core::List<dynamic>* l3 = <dynamic>["hello", 3];
   }
   {
-    core::List<core::int*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
                                                             ^" in <core::num*>[];
-    core::List<core::int*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
                                                             ^" in <core::num*>[3];
-    core::List<core::int*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:37:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in <core::num*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+                                                            ^" in <core::num*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::num*];
-    core::List<core::int*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:40:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in <core::num*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+                                                            ^" in <core::num*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:41:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::num*, 3];
   }
   {
     core::Iterable<core::int*>* i0 = <core::int*>[];
     core::Iterable<core::int*>* i1 = <core::int*>[3];
-    core::Iterable<core::int*>* i2 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Iterable<core::int*>* i2 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:49:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::int*];
-    core::Iterable<core::int*>* i3 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Iterable<core::int*>* i3 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:52:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::int*, 3];
   }
   {
-    const core::List<core::int*>* c2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    const core::List<core::int*>* c2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:60:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                                                         ^";
-    const core::List<core::int*>* c3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    const core::List<core::int*>* c3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:63:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                                                         ^";
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.transformed.expect
index 4a236be..eb7f7ce 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.transformed.expect
@@ -2,80 +2,80 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:13:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
 //                                                                                         ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:21:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:24:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
-//  - 'List' is from 'dart:core'.
-// Change the type of the list literal or the context in which it is used.
-//     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
-//                                                             ^
-//
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
-//  - 'List' is from 'dart:core'.
-// Change the type of the list literal or the context in which it is used.
-//     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
-//                                                             ^
-//
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
-//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
-//                                                  ^
-//
 // pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
 //  - 'List' is from 'dart:core'.
 // Change the type of the list literal or the context in which it is used.
+//     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Change the type of the list literal or the context in which it is used.
+//     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:37:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Change the type of the list literal or the context in which it is used.
 //     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
 //                                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:41:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:40:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
 //  - 'List' is from 'dart:core'.
 // Change the type of the list literal or the context in which it is used.
 //     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
 //                                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:49:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:52:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:60:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
 //                                                                                         ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:63:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
 //                                                                                         ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::List<core::String*>* list1 = #C1, core::List<core::String*>* list2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+static method foo([core::List<core::String*>* list1 = #C1, core::List<core::String*>* list2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:13:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
                                                                                         ^"]) → void {}
 static method main() → void {
   {
     core::List<core::int*>* l0 = core::_GrowableList::•<core::int*>(0);
     core::List<core::int*>* l1 = core::_GrowableList::_literal1<core::int*>(3);
-    core::List<core::int*>* l2 = core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::List<core::int*>* l2 = core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:21:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::int*);
-    core::List<core::int*>* l3 = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::List<core::int*>* l3 = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:24:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::int*, 3);
   }
@@ -86,46 +86,46 @@
     core::List<dynamic>* l3 = core::_GrowableList::_literal2<dynamic>("hello", 3);
   }
   {
-    core::List<core::int*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
                                                             ^" in core::_GrowableList::•<core::num*>(0);
-    core::List<core::int*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
                                                             ^" in core::_GrowableList::_literal1<core::num*>(3);
-    core::List<core::int*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:37:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in core::_GrowableList::_literal1<core::num*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+                                                            ^" in core::_GrowableList::_literal1<core::num*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::num*);
-    core::List<core::int*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+    core::List<core::int*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:40:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
  - 'List' is from 'dart:core'.
 Change the type of the list literal or the context in which it is used.
     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in core::_GrowableList::_literal2<core::num*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+                                                            ^" in core::_GrowableList::_literal2<core::num*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:41:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::num*, 3);
   }
   {
     core::Iterable<core::int*>* i0 = core::_GrowableList::•<core::int*>(0);
     core::Iterable<core::int*>* i1 = core::_GrowableList::_literal1<core::int*>(3);
-    core::Iterable<core::int*>* i2 = core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Iterable<core::int*>* i2 = core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:49:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in "hello" as{TypeError} core::int*);
-    core::Iterable<core::int*>* i3 = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Iterable<core::int*>* i3 = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:52:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in "hello" as{TypeError} core::int*, 3);
   }
   {
-    const core::List<core::int*>* c2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    const core::List<core::int*>* c2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:60:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                                                         ^";
-    const core::List<core::int*>* c3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    const core::List<core::int*>* c3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:63:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                                                         ^";
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart
new file mode 100644
index 0000000..baf0acd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart
@@ -0,0 +1,65 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+void foo(
+    [List<String> list1 = /*@typeArgs=String*/ const [],
+    List<String> list2 = /*@typeArgs=String*/ const [
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
+    ]]) {}
+
+void test() {
+  {
+    List<int> l0 = /*@typeArgs=int*/ [];
+    List<int> l1 = /*@typeArgs=int*/ [3];
+    List<int> l2 = /*@typeArgs=int*/ [
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+    ];
+    List<int> l3 = /*@typeArgs=int*/ [
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+      3
+    ];
+  }
+  {
+    List<dynamic> l0 = /*@ typeArgs=dynamic */ [];
+    List<dynamic> l1 = /*@ typeArgs=dynamic */ [3];
+    List<dynamic> l2 = /*@ typeArgs=dynamic */ ["hello"];
+    List<dynamic> l3 = /*@ typeArgs=dynamic */ ["hello", 3];
+  }
+  {
+    List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+    List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+    List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+    ];
+    List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+      3
+    ];
+  }
+  {
+    Iterable<int> i0 = /*@typeArgs=int*/ [];
+    Iterable<int> i1 = /*@typeArgs=int*/ [3];
+    Iterable<int> i2 = /*@typeArgs=int*/ [
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+    ];
+    Iterable<int> i3 = /*@typeArgs=int*/ [
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+      3
+    ];
+  }
+  {
+    const List<int> c0 = /*@typeArgs=int*/ const [];
+    const List<int> c1 = /*@typeArgs=int*/ const [3];
+    const List<int> c2 = /*@typeArgs=int*/ const [
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+    ];
+    const List<int> c3 = /*@typeArgs=int*/ const [
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+      3
+    ];
+  }
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.textual_outline.expect
new file mode 100644
index 0000000..5b1e6d6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+library test;
+
+void foo([List<String> list1 = const [], List<String> list2 = const [42]]) {}
+void test() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5b1e6d6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+library test;
+
+void foo([List<String> list1 = const [], List<String> list2 = const [42]]) {}
+void test() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.weak.expect
new file mode 100644
index 0000000..fd95244
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.weak.expect
@@ -0,0 +1,128 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
+//                                                                                         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:33:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:34:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:35:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:38:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                                                         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method foo([core::List<core::String> list1 = #C1, core::List<core::String> list2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
+                                                                                        ^"]) → void {}
+static method test() → void {
+  {
+    core::List<core::int> l0 = <core::int>[];
+    core::List<core::int> l1 = <core::int>[3];
+    core::List<core::int> l2 = <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int];
+    core::List<core::int> l3 = <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3];
+  }
+  {
+    core::List<dynamic> l0 = <dynamic>[];
+    core::List<dynamic> l1 = <dynamic>[3];
+    core::List<dynamic> l2 = <dynamic>["hello"];
+    core::List<dynamic> l3 = <dynamic>["hello", 3];
+  }
+  {
+    core::List<core::int> l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:33:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+    List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+                                                            ^" in <core::num>[] as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+    core::List<core::int> l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:34:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+    List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+                                                            ^" in <core::num>[3] as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+    core::List<core::int> l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:35:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+    List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+                                                            ^" in <core::num>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::num] as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+    core::List<core::int> l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:38:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+    List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+                                                            ^" in <core::num>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::num, 3] as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+  }
+  {
+    core::Iterable<core::int> i0 = <core::int>[];
+    core::Iterable<core::int> i1 = <core::int>[3];
+    core::Iterable<core::int> i2 = <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int];
+    core::Iterable<core::int> i3 = <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3];
+  }
+  {
+    const core::List<core::int> c2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                                                        ^";
+    const core::List<core::int> c3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                                                        ^";
+  }
+}
+
+constants  {
+  #C1 = <core::String*>[]
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.weak.modular.expect
new file mode 100644
index 0000000..fd95244
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.weak.modular.expect
@@ -0,0 +1,128 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
+//                                                                                         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:33:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:34:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:35:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:38:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                                                         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method foo([core::List<core::String> list1 = #C1, core::List<core::String> list2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
+                                                                                        ^"]) → void {}
+static method test() → void {
+  {
+    core::List<core::int> l0 = <core::int>[];
+    core::List<core::int> l1 = <core::int>[3];
+    core::List<core::int> l2 = <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int];
+    core::List<core::int> l3 = <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3];
+  }
+  {
+    core::List<dynamic> l0 = <dynamic>[];
+    core::List<dynamic> l1 = <dynamic>[3];
+    core::List<dynamic> l2 = <dynamic>["hello"];
+    core::List<dynamic> l3 = <dynamic>["hello", 3];
+  }
+  {
+    core::List<core::int> l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:33:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+    List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+                                                            ^" in <core::num>[] as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+    core::List<core::int> l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:34:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+    List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+                                                            ^" in <core::num>[3] as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+    core::List<core::int> l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:35:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+    List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+                                                            ^" in <core::num>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::num] as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+    core::List<core::int> l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:38:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+    List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+                                                            ^" in <core::num>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::num, 3] as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+  }
+  {
+    core::Iterable<core::int> i0 = <core::int>[];
+    core::Iterable<core::int> i1 = <core::int>[3];
+    core::Iterable<core::int> i2 = <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int];
+    core::Iterable<core::int> i3 = <core::int>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3];
+  }
+  {
+    const core::List<core::int> c2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                                                        ^";
+    const core::List<core::int> c3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                                                        ^";
+  }
+}
+
+constants  {
+  #C1 = <core::String*>[]
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.weak.outline.expect
new file mode 100644
index 0000000..486eef9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo([has-declared-initializer core::List<core::String> list1, has-declared-initializer core::List<core::String> list2]) → void
+  ;
+static method test() → void
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.weak.transformed.expect
new file mode 100644
index 0000000..953945a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart.weak.transformed.expect
@@ -0,0 +1,128 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
+//                                                                                         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:33:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:34:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:35:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:38:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                                                         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method foo([core::List<core::String> list1 = #C1, core::List<core::String> list2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
+                                                                                        ^"]) → void {}
+static method test() → void {
+  {
+    core::List<core::int> l0 = core::_GrowableList::•<core::int>(0);
+    core::List<core::int> l1 = core::_GrowableList::_literal1<core::int>(3);
+    core::List<core::int> l2 = core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
+    core::List<core::int> l3 = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3);
+  }
+  {
+    core::List<dynamic> l0 = core::_GrowableList::•<dynamic>(0);
+    core::List<dynamic> l1 = core::_GrowableList::_literal1<dynamic>(3);
+    core::List<dynamic> l2 = core::_GrowableList::_literal1<dynamic>("hello");
+    core::List<dynamic> l3 = core::_GrowableList::_literal2<dynamic>("hello", 3);
+  }
+  {
+    core::List<core::int> l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:33:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+    List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+                                                            ^" in core::_GrowableList::•<core::num>(0) as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+    core::List<core::int> l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:34:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+    List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+                                                            ^" in core::_GrowableList::_literal1<core::num>(3) as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+    core::List<core::int> l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:35:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+    List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+                                                            ^" in core::_GrowableList::_literal1<core::num>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::num) as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+    core::List<core::int> l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:38:61: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+    List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+                                                            ^" in core::_GrowableList::_literal2<core::num>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::num, 3) as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+  }
+  {
+    core::Iterable<core::int> i0 = core::_GrowableList::•<core::int>(0);
+    core::Iterable<core::int> i1 = core::_GrowableList::_literal1<core::int>(3);
+    core::Iterable<core::int> i2 = core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int);
+    core::Iterable<core::int> i3 = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int, 3);
+  }
+  {
+    const core::List<core::int> c2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                                                        ^";
+    const core::List<core::int> c3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards2.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                                                        ^";
+  }
+}
+
+constants  {
+  #C1 = <core::String*>[]
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart
index 9a7f136..b067bd3 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,74 +10,66 @@
 typedef void Asserter<T>(T type);
 typedef Asserter<T> AsserterBuilder<S, T>(S arg);
 
-Asserter<DartType> _isInt;
-Asserter<DartType> _isString;
+Asserter<DartType> _isInt = throw '';
+Asserter<DartType> _isString = throw '';
 
 abstract class C {
-  static AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf;
+  static AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf =
+      throw '';
   static AsserterBuilder<List<Asserter<DartType>>, DartType> get assertCOf =>
-      null;
+      throw '';
 
-  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf;
-  AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf;
+  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf = throw '';
+  AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf => throw '';
 
   method(AsserterBuilder<List<Asserter<DartType>>, DartType> assertEOf) {
     /*@target=C.assertAOf*/ assertAOf(
-        /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
-    assertBOf(
-        /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
-    assertCOf(
-        /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
+        /*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
+    assertBOf(/*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
+    assertCOf(/*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
     /*@target=C.assertDOf*/ assertDOf(
-        /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
-    assertEOf(
-        /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
+        /*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
+    assertEOf(/*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
   }
 }
 
 abstract class G<T> {
-  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf;
-  AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf;
+  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf = throw '';
+  AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf => throw '';
 
   method(AsserterBuilder<List<Asserter<DartType>>, DartType> assertEOf) {
     /*@target=G.assertAOf*/ assertAOf(
-        /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
+        /*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
     this. /*@target=G.assertAOf*/ assertAOf(
-        /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
+        /*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
     this. /*@target=G.assertDOf*/ assertDOf(
-        /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
-    assertEOf(
-        /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
+        /*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
+    assertEOf(/*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
   }
 }
 
-AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf;
-AsserterBuilder<List<Asserter<DartType>>, DartType> get assertCOf => null;
+AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf = throw '';
+AsserterBuilder<List<Asserter<DartType>>, DartType> get assertCOf => throw '';
 
 test() {
-  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf;
-  assertAOf(
-      /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
-  assertBOf(
-      /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
-  assertCOf(
-      /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
-  C.assertBOf(
-      /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
-  C.assertCOf(
-      /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
+  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf = throw '';
+  assertAOf(/*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
+  assertBOf(/*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
+  assertCOf(/*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
+  C.assertBOf(/*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
+  C.assertCOf(/*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
 
-  C c;
+  C c = throw '';
   c. /*@target=C.assertAOf*/ assertAOf(
-      /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
+      /*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
   c. /*@target=C.assertDOf*/ assertDOf(
-      /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
+      /*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
 
-  G<int> g;
+  G<int> g = throw '';
   g. /*@target=G.assertAOf*/ assertAOf(
-      /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
+      /*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
   g. /*@target=G.assertDOf*/ assertDOf(
-      /*@ typeArgs=(DartType*) ->* void */ [_isInt, _isString]);
+      /*@typeArgs=(DartType) -> void*/ [_isInt, _isString]);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.textual_outline.expect
index a87b49d..e4d3c5f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.textual_outline.expect
@@ -1,29 +1,29 @@
-// @dart = 2.9
 library test;
 
 class DartType {}
 
 typedef void Asserter<T>(T type);
 typedef Asserter<T> AsserterBuilder<S, T>(S arg);
-Asserter<DartType> _isInt;
-Asserter<DartType> _isString;
+Asserter<DartType> _isInt = throw '';
+Asserter<DartType> _isString = throw '';
 
 abstract class C {
-  static AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf;
+  static AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf =
+      throw '';
   static AsserterBuilder<List<Asserter<DartType>>, DartType> get assertCOf =>
-      null;
-  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf;
-  AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf;
+      throw '';
+  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf = throw '';
+  AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf => throw '';
   method(AsserterBuilder<List<Asserter<DartType>>, DartType> assertEOf) {}
 }
 
 abstract class G<T> {
-  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf;
-  AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf;
+  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf = throw '';
+  AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf => throw '';
   method(AsserterBuilder<List<Asserter<DartType>>, DartType> assertEOf) {}
 }
 
-AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf;
-AsserterBuilder<List<Asserter<DartType>>, DartType> get assertCOf => null;
+AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf = throw '';
+AsserterBuilder<List<Asserter<DartType>>, DartType> get assertCOf => throw '';
 test() {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.textual_outline_modelled.expect
index 0b07330..211e517 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.textual_outline_modelled.expect
@@ -1,23 +1,23 @@
-// @dart = 2.9
 library test;
 
-Asserter<DartType> _isInt;
-Asserter<DartType> _isString;
-AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf;
-AsserterBuilder<List<Asserter<DartType>>, DartType> get assertCOf => null;
+Asserter<DartType> _isInt = throw '';
+Asserter<DartType> _isString = throw '';
+AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf = throw '';
+AsserterBuilder<List<Asserter<DartType>>, DartType> get assertCOf => throw '';
 
 abstract class C {
-  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf;
-  AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf;
+  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf = throw '';
+  AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf => throw '';
   method(AsserterBuilder<List<Asserter<DartType>>, DartType> assertEOf) {}
-  static AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf;
+  static AsserterBuilder<List<Asserter<DartType>>, DartType> assertBOf =
+      throw '';
   static AsserterBuilder<List<Asserter<DartType>>, DartType> get assertCOf =>
-      null;
+      throw '';
 }
 
 abstract class G<T> {
-  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf;
-  AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf;
+  AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf = throw '';
+  AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf => throw '';
   method(AsserterBuilder<List<Asserter<DartType>>, DartType> assertEOf) {}
 }
 
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.expect
index c0dae24..c78bd2e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.expect
@@ -1,91 +1,63 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Asserter<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-typedef AsserterBuilder<contravariant S extends core::Object* = dynamic, contravariant T extends core::Object* = dynamic> = (S*) →* (T*) →* void;
+typedef Asserter<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef AsserterBuilder<contravariant S extends core::Object? = dynamic, contravariant T extends core::Object? = dynamic> = (S%) → (T%) → void;
 class DartType extends core::Object {
-  synthetic constructor •() → self::DartType*
+  synthetic constructor •() → self::DartType
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf = null;
-  field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf = null;
-  synthetic constructor •() → self::C*
+  static field (core::List<(self::DartType) → void>) → (self::DartType) → void assertBOf = throw "";
+  field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = throw "";
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
-    return null;
-  abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
-  method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic {
-    let final core::List<(self::DartType*) →* void>* #t1 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::C::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t1){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    self::C::assertBOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    self::C::assertCOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    let final core::List<(self::DartType*) →* void>* #t2 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::C::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t2){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    assertEOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  static get assertCOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
+    return throw "";
+  get assertDOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
+    return throw "";
+  method method((core::List<(self::DartType) → void>) → (self::DartType) → void assertEOf) → dynamic {
+    let final core::List<(self::DartType) → void> #t1 = <(self::DartType) → void>[self::_isInt, self::_isString] in this.{self::C::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t1){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    self::C::assertBOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    self::C::assertCOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    let final core::List<(self::DartType) → void> #t2 = <(self::DartType) → void>[self::_isInt, self::_isString] in this.{self::C::assertDOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t2){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    assertEOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class G<T extends core::Object* = dynamic> extends core::Object {
-  field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf = null;
-  synthetic constructor •() → self::G<self::G::T*>*
+abstract class G<T extends core::Object? = dynamic> extends core::Object {
+  field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = throw "";
+  synthetic constructor •() → self::G<self::G::T%>
     : super core::Object::•()
     ;
-  abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
-  method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic {
-    let final core::List<(self::DartType*) →* void>* #t3 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t3){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    let final core::List<(self::DartType*) →* void>* #t4 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t4){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    let final core::List<(self::DartType*) →* void>* #t5 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t5){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    assertEOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  get assertDOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
+    return throw "";
+  method method((core::List<(self::DartType) → void>) → (self::DartType) → void assertEOf) → dynamic {
+    let final core::List<(self::DartType) → void> #t3 = <(self::DartType) → void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t3){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    let final core::List<(self::DartType) → void> #t4 = <(self::DartType) → void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t4){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    let final core::List<(self::DartType) → void> #t5 = <(self::DartType) → void>[self::_isInt, self::_isString] in this.{self::G::assertDOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t5){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    assertEOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field (self::DartType*) →* void _isInt;
-static field (self::DartType*) →* void _isString;
-static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf;
-static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
-  return null;
+static field (self::DartType) → void _isInt = throw "";
+static field (self::DartType) → void _isString = throw "";
+static field (core::List<(self::DartType) → void>) → (self::DartType) → void assertBOf = throw "";
+static get assertCOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
+  return throw "";
 static method test() → dynamic {
-  (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf;
-  assertAOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::assertBOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::assertCOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::C::assertBOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::C::assertCOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::C* c;
-  let final self::C* #t6 = c in let final core::List<(self::DartType*) →* void>* #t7 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t6.{self::C::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t7){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  let final self::C* #t8 = c in let final core::List<(self::DartType*) →* void>* #t9 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t8.{self::C::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t9){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::G<core::int*>* g;
-  let final self::G<core::int*>* #t10 = g in let final core::List<(self::DartType*) →* void>* #t11 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t10.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t11){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  let final self::G<core::int*>* #t12 = g in let final core::List<(self::DartType*) →* void>* #t13 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t12.{self::G::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t13){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = throw "";
+  assertAOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::assertBOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::assertCOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::C::assertBOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::C::assertCOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::C c = throw "";
+  let final self::C #t6 = c in let final core::List<(self::DartType) → void> #t7 = <(self::DartType) → void>[self::_isInt, self::_isString] in #t6.{self::C::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t7){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  let final self::C #t8 = c in let final core::List<(self::DartType) → void> #t9 = <(self::DartType) → void>[self::_isInt, self::_isString] in #t8.{self::C::assertDOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t9){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::G<core::int> g = throw "";
+  let final self::G<core::int> #t10 = g in let final core::List<(self::DartType) → void> #t11 = <(self::DartType) → void>[self::_isInt, self::_isString] in #t10.{self::G::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t11){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  let final self::G<core::int> #t12 = g in let final core::List<(self::DartType) → void> #t13 = <(self::DartType) → void>[self::_isInt, self::_isString] in #t12.{self::G::assertDOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t13){(core::List<(self::DartType) → void>) → (self::DartType) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.modular.expect
index c0dae24..c78bd2e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.modular.expect
@@ -1,91 +1,63 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Asserter<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-typedef AsserterBuilder<contravariant S extends core::Object* = dynamic, contravariant T extends core::Object* = dynamic> = (S*) →* (T*) →* void;
+typedef Asserter<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef AsserterBuilder<contravariant S extends core::Object? = dynamic, contravariant T extends core::Object? = dynamic> = (S%) → (T%) → void;
 class DartType extends core::Object {
-  synthetic constructor •() → self::DartType*
+  synthetic constructor •() → self::DartType
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf = null;
-  field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf = null;
-  synthetic constructor •() → self::C*
+  static field (core::List<(self::DartType) → void>) → (self::DartType) → void assertBOf = throw "";
+  field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = throw "";
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
-    return null;
-  abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
-  method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic {
-    let final core::List<(self::DartType*) →* void>* #t1 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::C::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t1){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    self::C::assertBOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    self::C::assertCOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    let final core::List<(self::DartType*) →* void>* #t2 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::C::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t2){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    assertEOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  static get assertCOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
+    return throw "";
+  get assertDOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
+    return throw "";
+  method method((core::List<(self::DartType) → void>) → (self::DartType) → void assertEOf) → dynamic {
+    let final core::List<(self::DartType) → void> #t1 = <(self::DartType) → void>[self::_isInt, self::_isString] in this.{self::C::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t1){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    self::C::assertBOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    self::C::assertCOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    let final core::List<(self::DartType) → void> #t2 = <(self::DartType) → void>[self::_isInt, self::_isString] in this.{self::C::assertDOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t2){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    assertEOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class G<T extends core::Object* = dynamic> extends core::Object {
-  field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf = null;
-  synthetic constructor •() → self::G<self::G::T*>*
+abstract class G<T extends core::Object? = dynamic> extends core::Object {
+  field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = throw "";
+  synthetic constructor •() → self::G<self::G::T%>
     : super core::Object::•()
     ;
-  abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
-  method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic {
-    let final core::List<(self::DartType*) →* void>* #t3 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t3){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    let final core::List<(self::DartType*) →* void>* #t4 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t4){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    let final core::List<(self::DartType*) →* void>* #t5 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t5){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    assertEOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  get assertDOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
+    return throw "";
+  method method((core::List<(self::DartType) → void>) → (self::DartType) → void assertEOf) → dynamic {
+    let final core::List<(self::DartType) → void> #t3 = <(self::DartType) → void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t3){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    let final core::List<(self::DartType) → void> #t4 = <(self::DartType) → void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t4){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    let final core::List<(self::DartType) → void> #t5 = <(self::DartType) → void>[self::_isInt, self::_isString] in this.{self::G::assertDOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t5){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    assertEOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field (self::DartType*) →* void _isInt;
-static field (self::DartType*) →* void _isString;
-static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf;
-static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
-  return null;
+static field (self::DartType) → void _isInt = throw "";
+static field (self::DartType) → void _isString = throw "";
+static field (core::List<(self::DartType) → void>) → (self::DartType) → void assertBOf = throw "";
+static get assertCOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
+  return throw "";
 static method test() → dynamic {
-  (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf;
-  assertAOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::assertBOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::assertCOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::C::assertBOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::C::assertCOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::C* c;
-  let final self::C* #t6 = c in let final core::List<(self::DartType*) →* void>* #t7 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t6.{self::C::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t7){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  let final self::C* #t8 = c in let final core::List<(self::DartType*) →* void>* #t9 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t8.{self::C::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t9){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::G<core::int*>* g;
-  let final self::G<core::int*>* #t10 = g in let final core::List<(self::DartType*) →* void>* #t11 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t10.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t11){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  let final self::G<core::int*>* #t12 = g in let final core::List<(self::DartType*) →* void>* #t13 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t12.{self::G::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t13){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = throw "";
+  assertAOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::assertBOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::assertCOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::C::assertBOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::C::assertCOf(<(self::DartType) → void>[self::_isInt, self::_isString]){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::C c = throw "";
+  let final self::C #t6 = c in let final core::List<(self::DartType) → void> #t7 = <(self::DartType) → void>[self::_isInt, self::_isString] in #t6.{self::C::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t7){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  let final self::C #t8 = c in let final core::List<(self::DartType) → void> #t9 = <(self::DartType) → void>[self::_isInt, self::_isString] in #t8.{self::C::assertDOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t9){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::G<core::int> g = throw "";
+  let final self::G<core::int> #t10 = g in let final core::List<(self::DartType) → void> #t11 = <(self::DartType) → void>[self::_isInt, self::_isString] in #t10.{self::G::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t11){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  let final self::G<core::int> #t12 = g in let final core::List<(self::DartType) → void> #t13 = <(self::DartType) → void>[self::_isInt, self::_isString] in #t12.{self::G::assertDOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t13){(core::List<(self::DartType) → void>) → (self::DartType) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.outline.expect
index f076267..f158de9 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.outline.expect
@@ -1,66 +1,38 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Asserter<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-typedef AsserterBuilder<contravariant S extends core::Object* = dynamic, contravariant T extends core::Object* = dynamic> = (S*) →* (T*) →* void;
+typedef Asserter<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef AsserterBuilder<contravariant S extends core::Object? = dynamic, contravariant T extends core::Object? = dynamic> = (S%) → (T%) → void;
 class DartType extends core::Object {
-  synthetic constructor •() → self::DartType*
+  synthetic constructor •() → self::DartType
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf;
-  field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf;
-  synthetic constructor •() → self::C*
+  static field (core::List<(self::DartType) → void>) → (self::DartType) → void assertBOf;
+  field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf;
+  synthetic constructor •() → self::C
     ;
-  static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
+  static get assertCOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
     ;
-  abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
-  method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic
+  get assertDOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method((core::List<(self::DartType) → void>) → (self::DartType) → void assertEOf) → dynamic
+    ;
 }
-abstract class G<T extends core::Object* = dynamic> extends core::Object {
-  field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf;
-  synthetic constructor •() → self::G<self::G::T*>*
+abstract class G<T extends core::Object? = dynamic> extends core::Object {
+  field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf;
+  synthetic constructor •() → self::G<self::G::T%>
     ;
-  abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
-  method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic
+  get assertDOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method((core::List<(self::DartType) → void>) → (self::DartType) → void assertEOf) → dynamic
+    ;
 }
-static field (self::DartType*) →* void _isInt;
-static field (self::DartType*) →* void _isString;
-static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf;
-static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
+static field (self::DartType) → void _isInt;
+static field (self::DartType) → void _isString;
+static field (core::List<(self::DartType) → void>) → (self::DartType) → void assertBOf;
+static get assertCOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
   ;
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.transformed.expect
index 26ec6f6..145c69c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.transformed.expect
@@ -1,91 +1,63 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Asserter<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-typedef AsserterBuilder<contravariant S extends core::Object* = dynamic, contravariant T extends core::Object* = dynamic> = (S*) →* (T*) →* void;
+typedef Asserter<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef AsserterBuilder<contravariant S extends core::Object? = dynamic, contravariant T extends core::Object? = dynamic> = (S%) → (T%) → void;
 class DartType extends core::Object {
-  synthetic constructor •() → self::DartType*
+  synthetic constructor •() → self::DartType
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf = null;
-  field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf = null;
-  synthetic constructor •() → self::C*
+  static field (core::List<(self::DartType) → void>) → (self::DartType) → void assertBOf = throw "";
+  field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = throw "";
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
-    return null;
-  abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
-  method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic {
-    let final core::List<(self::DartType*) →* void>* #t1 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::C::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t1){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    self::C::assertBOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    self::C::assertCOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    let final core::List<(self::DartType*) →* void>* #t2 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::C::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t2){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    assertEOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  static get assertCOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
+    return throw "";
+  get assertDOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
+    return throw "";
+  method method((core::List<(self::DartType) → void>) → (self::DartType) → void assertEOf) → dynamic {
+    let final core::List<(self::DartType) → void> #t1 = core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString) in this.{self::C::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t1){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    self::C::assertBOf(core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString)){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    self::C::assertCOf(core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString)){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    let final core::List<(self::DartType) → void> #t2 = core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString) in this.{self::C::assertDOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t2){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    assertEOf(core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString)){(core::List<(self::DartType) → void>) → (self::DartType) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class G<T extends core::Object* = dynamic> extends core::Object {
-  field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf = null;
-  synthetic constructor •() → self::G<self::G::T*>*
+abstract class G<T extends core::Object? = dynamic> extends core::Object {
+  field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = throw "";
+  synthetic constructor •() → self::G<self::G::T%>
     : super core::Object::•()
     ;
-  abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
-  method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic {
-    let final core::List<(self::DartType*) →* void>* #t3 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t3){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    let final core::List<(self::DartType*) →* void>* #t4 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t4){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    let final core::List<(self::DartType*) →* void>* #t5 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::G::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t5){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-    assertEOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  get assertDOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
+    return throw "";
+  method method((core::List<(self::DartType) → void>) → (self::DartType) → void assertEOf) → dynamic {
+    let final core::List<(self::DartType) → void> #t3 = core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString) in this.{self::G::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t3){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    let final core::List<(self::DartType) → void> #t4 = core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString) in this.{self::G::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t4){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    let final core::List<(self::DartType) → void> #t5 = core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString) in this.{self::G::assertDOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t5){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+    assertEOf(core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString)){(core::List<(self::DartType) → void>) → (self::DartType) → void};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field (self::DartType*) →* void _isInt;
-static field (self::DartType*) →* void _isString;
-static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf;
-static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
-  return null;
+static field (self::DartType) → void _isInt = throw "";
+static field (self::DartType) → void _isString = throw "";
+static field (core::List<(self::DartType) → void>) → (self::DartType) → void assertBOf = throw "";
+static get assertCOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
+  return throw "";
 static method test() → dynamic {
-  (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf;
-  assertAOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::assertBOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::assertCOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::C::assertBOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::C::assertCOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::C* c;
-  let final self::C* #t6 = c in let final core::List<(self::DartType*) →* void>* #t7 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in #t6.{self::C::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t7){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  let final self::C* #t8 = c in let final core::List<(self::DartType*) →* void>* #t9 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in #t8.{self::C::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t9){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  self::G<core::int*>* g;
-  let final self::G<core::int*>* #t10 = g in let final core::List<(self::DartType*) →* void>* #t11 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in #t10.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t11){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
-  let final self::G<core::int*>* #t12 = g in let final core::List<(self::DartType*) →* void>* #t13 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in #t12.{self::G::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t13){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = throw "";
+  assertAOf(core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString)){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::assertBOf(core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString)){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::assertCOf(core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString)){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::C::assertBOf(core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString)){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::C::assertCOf(core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString)){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::C c = throw "";
+  let final self::C #t6 = c in let final core::List<(self::DartType) → void> #t7 = core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString) in #t6.{self::C::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t7){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  let final self::C #t8 = c in let final core::List<(self::DartType) → void> #t9 = core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString) in #t8.{self::C::assertDOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t9){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  self::G<core::int> g = throw "";
+  let final self::G<core::int> #t10 = g in let final core::List<(self::DartType) → void> #t11 = core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString) in #t10.{self::G::assertAOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t11){(core::List<(self::DartType) → void>) → (self::DartType) → void};
+  let final self::G<core::int> #t12 = g in let final core::List<(self::DartType) → void> #t13 = core::_GrowableList::_literal2<(self::DartType) → void>(self::_isInt, self::_isString) in #t12.{self::G::assertDOf}{(core::List<(self::DartType) → void>) → (self::DartType) → void}(#t13){(core::List<(self::DartType) → void>) → (self::DartType) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart
index 4fe8d64..aff3ba0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart
@@ -1,28 +1,30 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void foo(
-    [Map<int, String> m1 = /*@ typeArgs=int*, String* */ const {1: "hello"},
-    Map<int, String> m2 = /*@ typeArgs=int*, String* */ const {
+    [Map<int, String> m1 = /*@typeArgs=int*, String**/ const {1: "hello"},
+    Map<int, String> m2 = /*@typeArgs=int*, String**/ const {
       // One error is from type checking and the other is from const evaluation.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
           "world"
     }]) {}
 void test() {
   {
-    Map<int, String> l0 = /*@ typeArgs=int*, String* */ {};
-    Map<int, String> l1 = /*@ typeArgs=int*, String* */ {3: "hello"};
-    Map<int, String> l2 = /*@ typeArgs=int*, String* */ {
+    Map<int, String> l0 = /*@typeArgs=int*, String**/ {};
+    Map<int, String> l1 = /*@typeArgs=int*, String**/ {3: "hello"};
+    Map<int, String> l2 = /*@typeArgs=int*, String**/ {
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
     };
-    Map<int, String> l3 = /*@ typeArgs=int*, String* */ {
+    Map<int, String> l3 = /*@typeArgs=int*, String**/ {
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
     };
-    Map<int, String> l4 = /*@ typeArgs=int*, String* */ {
+    Map<int, String> l4 = /*@typeArgs=int*, String**/ {
       3: "hello",
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
@@ -41,25 +43,25 @@
     };
   }
   {
-    Map<dynamic, String> l0 = /*@ typeArgs=dynamic, String* */ {};
-    Map<dynamic, String> l1 = /*@ typeArgs=dynamic, String* */ {3: "hello"};
-    Map<dynamic, String> l2 = /*@ typeArgs=dynamic, String* */ {"hello": "hello"};
-    Map<dynamic, String> l3 = /*@ typeArgs=dynamic, String* */ {
+    Map<dynamic, String> l0 = /*@typeArgs=dynamic, String**/ {};
+    Map<dynamic, String> l1 = /*@typeArgs=dynamic, String**/ {3: "hello"};
+    Map<dynamic, String> l2 = /*@typeArgs=dynamic, String**/ {"hello": "hello"};
+    Map<dynamic, String> l3 = /*@typeArgs=dynamic, String**/ {
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
     };
-    Map<dynamic, String> l4 = /*@ typeArgs=dynamic, String* */ {
+    Map<dynamic, String> l4 = /*@typeArgs=dynamic, String**/ {
       3: "hello",
       "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
     };
   }
   {
-    Map<int, dynamic> l0 = /*@ typeArgs=int*, dynamic */ {};
-    Map<int, dynamic> l1 = /*@ typeArgs=int*, dynamic */ {3: "hello"};
-    Map<int, dynamic> l2 = /*@ typeArgs=int*, dynamic */ {
+    Map<int, dynamic> l0 = /*@typeArgs=int*, dynamic*/ {};
+    Map<int, dynamic> l1 = /*@typeArgs=int*, dynamic*/ {3: "hello"};
+    Map<int, dynamic> l2 = /*@typeArgs=int*, dynamic*/ {
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
     };
-    Map<int, dynamic> l3 = /*@ typeArgs=int*, dynamic */ {3: 3};
-    Map<int, dynamic> l4 = /*@ typeArgs=int*, dynamic */ {
+    Map<int, dynamic> l3 = /*@typeArgs=int*, dynamic*/ {3: 3};
+    Map<int, dynamic> l4 = /*@typeArgs=int*, dynamic*/ {
       3: "hello",
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": 3
     };
@@ -74,16 +76,16 @@
     };
   }
   {
-    const Map<int, String> l0 = /*@ typeArgs=int*, String* */ const {};
-    const Map<int, String> l1 = /*@ typeArgs=int*, String* */ const {3: "hello"};
-    const Map<int, String> l2 = /*@ typeArgs=int*, String* */ const {
+    const Map<int, String> l0 = /*@typeArgs=int*, String**/ const {};
+    const Map<int, String> l1 = /*@typeArgs=int*, String**/ const {3: "hello"};
+    const Map<int, String> l2 = /*@typeArgs=int*, String**/ const {
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
           "hello"
     };
-    const Map<int, String> l3 = /*@ typeArgs=int*, String* */ const {
+    const Map<int, String> l3 = /*@typeArgs=int*, String**/ const {
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
     };
-    const Map<int, String> l4 = /*@ typeArgs=int*, String* */ const {
+    const Map<int, String> l4 = /*@typeArgs=int*, String**/ const {
       3: "hello",
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.expect
index ab58333..021542f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.expect
@@ -2,95 +2,95 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:14:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
 //                                                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:22:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
 //                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:25:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:29:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
 //                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:30:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:50:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:54:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                        ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:61:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
 //                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:66:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": 3
 //                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:70:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
 //  - 'Map' is from 'dart:core'.
 // Change the type of the map literal or the context in which it is used.
 //     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
 //                                                                            ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:71:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
 //  - 'Map' is from 'dart:core'.
 // Change the type of the map literal or the context in which it is used.
 //     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
 //                                                                            ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:74:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
 //  - 'Map' is from 'dart:core'.
 // Change the type of the map literal or the context in which it is used.
 //     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
 //                                                                            ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:82:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
 //                                                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:86:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                                                      ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:90:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
 //                                                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:91:87: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                                                       ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::Map<core::int*, core::String*>* m1 = #C3, core::Map<core::int*, core::String*>* m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+static method foo([core::Map<core::int*, core::String*>* m1 = #C3, core::Map<core::int*, core::String*>* m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:14:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^"]) → void {}
 static method test() → void {
   {
     core::Map<core::int*, core::String*>* l0 = <core::int*, core::String*>{};
     core::Map<core::int*, core::String*>* l1 = <core::int*, core::String*>{3: "hello"};
-    core::Map<core::int*, core::String*>* l2 = <core::int*, core::String*>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, core::String*>* l2 = <core::int*, core::String*>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:22:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in "hello" as{TypeError} core::int*: "hello"};
-    core::Map<core::int*, core::String*>* l3 = <core::int*, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<core::int*, core::String*>* l3 = <core::int*, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:25:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in 3 as{TypeError} core::String*};
-    core::Map<core::int*, core::String*>* l4 = <core::int*, core::String*>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, core::String*>* l4 = <core::int*, core::String*>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:29:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                            ^" in "hello" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                            ^" in "hello" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:30:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                   ^" in 3 as{TypeError} core::String*};
   }
@@ -105,49 +105,49 @@
     core::Map<dynamic, core::String*>* l0 = <dynamic, core::String*>{};
     core::Map<dynamic, core::String*>* l1 = <dynamic, core::String*>{3: "hello"};
     core::Map<dynamic, core::String*>* l2 = <dynamic, core::String*>{"hello": "hello"};
-    core::Map<dynamic, core::String*>* l3 = <dynamic, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<dynamic, core::String*>* l3 = <dynamic, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:50:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in 3 as{TypeError} core::String*};
-    core::Map<dynamic, core::String*>* l4 = <dynamic, core::String*>{3: "hello", "hello": invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<dynamic, core::String*>* l4 = <dynamic, core::String*>{3: "hello", "hello": invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:54:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                        ^" in 3 as{TypeError} core::String*};
   }
   {
     core::Map<core::int*, dynamic>* l0 = <core::int*, dynamic>{};
     core::Map<core::int*, dynamic>* l1 = <core::int*, dynamic>{3: "hello"};
-    core::Map<core::int*, dynamic>* l2 = <core::int*, dynamic>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, dynamic>* l2 = <core::int*, dynamic>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:61:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in "hello" as{TypeError} core::int*: "hello"};
     core::Map<core::int*, dynamic>* l3 = <core::int*, dynamic>{3: 3};
-    core::Map<core::int*, dynamic>* l4 = <core::int*, dynamic>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, dynamic>* l4 = <core::int*, dynamic>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:66:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
                                             ^" in "hello" as{TypeError} core::int*: 3};
   }
   {
-    core::Map<core::int*, core::String*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:70:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
                                                                            ^" in <core::num*, dynamic>{};
-    core::Map<core::int*, core::String*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:71:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
                                                                            ^" in <core::num*, dynamic>{3: "hello"};
-    core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:74:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
                                                                            ^" in <core::num*, dynamic>{3: 3};
   }
   {
-    const core::Map<core::int*, core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    const core::Map<core::int*, core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:82:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^";
-    const core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    const core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:86:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                                                      ^";
-    const core::Map<core::int*, core::String*>* l4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    const core::Map<core::int*, core::String*>* l4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:90:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^";
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.modular.expect
index ab58333..021542f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.modular.expect
@@ -2,95 +2,95 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:14:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
 //                                                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:22:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
 //                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:25:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:29:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
 //                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:30:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:50:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:54:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                        ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:61:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
 //                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:66:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": 3
 //                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:70:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
 //  - 'Map' is from 'dart:core'.
 // Change the type of the map literal or the context in which it is used.
 //     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
 //                                                                            ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:71:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
 //  - 'Map' is from 'dart:core'.
 // Change the type of the map literal or the context in which it is used.
 //     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
 //                                                                            ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:74:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
 //  - 'Map' is from 'dart:core'.
 // Change the type of the map literal or the context in which it is used.
 //     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
 //                                                                            ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:82:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
 //                                                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:86:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                                                      ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:90:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
 //                                                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:91:87: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                                                       ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::Map<core::int*, core::String*>* m1 = #C3, core::Map<core::int*, core::String*>* m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+static method foo([core::Map<core::int*, core::String*>* m1 = #C3, core::Map<core::int*, core::String*>* m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:14:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^"]) → void {}
 static method test() → void {
   {
     core::Map<core::int*, core::String*>* l0 = <core::int*, core::String*>{};
     core::Map<core::int*, core::String*>* l1 = <core::int*, core::String*>{3: "hello"};
-    core::Map<core::int*, core::String*>* l2 = <core::int*, core::String*>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, core::String*>* l2 = <core::int*, core::String*>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:22:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in "hello" as{TypeError} core::int*: "hello"};
-    core::Map<core::int*, core::String*>* l3 = <core::int*, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<core::int*, core::String*>* l3 = <core::int*, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:25:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in 3 as{TypeError} core::String*};
-    core::Map<core::int*, core::String*>* l4 = <core::int*, core::String*>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, core::String*>* l4 = <core::int*, core::String*>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:29:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                            ^" in "hello" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                            ^" in "hello" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:30:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                   ^" in 3 as{TypeError} core::String*};
   }
@@ -105,49 +105,49 @@
     core::Map<dynamic, core::String*>* l0 = <dynamic, core::String*>{};
     core::Map<dynamic, core::String*>* l1 = <dynamic, core::String*>{3: "hello"};
     core::Map<dynamic, core::String*>* l2 = <dynamic, core::String*>{"hello": "hello"};
-    core::Map<dynamic, core::String*>* l3 = <dynamic, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<dynamic, core::String*>* l3 = <dynamic, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:50:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in 3 as{TypeError} core::String*};
-    core::Map<dynamic, core::String*>* l4 = <dynamic, core::String*>{3: "hello", "hello": invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<dynamic, core::String*>* l4 = <dynamic, core::String*>{3: "hello", "hello": invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:54:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                        ^" in 3 as{TypeError} core::String*};
   }
   {
     core::Map<core::int*, dynamic>* l0 = <core::int*, dynamic>{};
     core::Map<core::int*, dynamic>* l1 = <core::int*, dynamic>{3: "hello"};
-    core::Map<core::int*, dynamic>* l2 = <core::int*, dynamic>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, dynamic>* l2 = <core::int*, dynamic>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:61:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in "hello" as{TypeError} core::int*: "hello"};
     core::Map<core::int*, dynamic>* l3 = <core::int*, dynamic>{3: 3};
-    core::Map<core::int*, dynamic>* l4 = <core::int*, dynamic>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, dynamic>* l4 = <core::int*, dynamic>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:66:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
                                             ^" in "hello" as{TypeError} core::int*: 3};
   }
   {
-    core::Map<core::int*, core::String*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:70:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
                                                                            ^" in <core::num*, dynamic>{};
-    core::Map<core::int*, core::String*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:71:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
                                                                            ^" in <core::num*, dynamic>{3: "hello"};
-    core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:74:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
                                                                            ^" in <core::num*, dynamic>{3: 3};
   }
   {
-    const core::Map<core::int*, core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    const core::Map<core::int*, core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:82:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^";
-    const core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    const core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:86:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                                                      ^";
-    const core::Map<core::int*, core::String*>* l4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    const core::Map<core::int*, core::String*>* l4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:90:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^";
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.transformed.expect
index ab58333..021542f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.transformed.expect
@@ -2,95 +2,95 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:14:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
 //                                                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:22:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
 //                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:25:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:29:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
 //                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:30:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                   ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:50:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                  ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:54:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                        ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:61:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
 //                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:66:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": 3
 //                                             ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:70:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
 //  - 'Map' is from 'dart:core'.
 // Change the type of the map literal or the context in which it is used.
 //     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
 //                                                                            ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:71:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
 //  - 'Map' is from 'dart:core'.
 // Change the type of the map literal or the context in which it is used.
 //     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
 //                                                                            ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:74:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
 //  - 'Map' is from 'dart:core'.
 // Change the type of the map literal or the context in which it is used.
 //     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
 //                                                                            ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:82:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
 //                                                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:86:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                                                      ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:90:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
 //                                                                               ^
 //
-// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:91:87: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
 //                                                                                       ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::Map<core::int*, core::String*>* m1 = #C3, core::Map<core::int*, core::String*>* m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+static method foo([core::Map<core::int*, core::String*>* m1 = #C3, core::Map<core::int*, core::String*>* m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:14:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^"]) → void {}
 static method test() → void {
   {
     core::Map<core::int*, core::String*>* l0 = <core::int*, core::String*>{};
     core::Map<core::int*, core::String*>* l1 = <core::int*, core::String*>{3: "hello"};
-    core::Map<core::int*, core::String*>* l2 = <core::int*, core::String*>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, core::String*>* l2 = <core::int*, core::String*>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:22:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in "hello" as{TypeError} core::int*: "hello"};
-    core::Map<core::int*, core::String*>* l3 = <core::int*, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<core::int*, core::String*>* l3 = <core::int*, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:25:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in 3 as{TypeError} core::String*};
-    core::Map<core::int*, core::String*>* l4 = <core::int*, core::String*>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, core::String*>* l4 = <core::int*, core::String*>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:29:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                            ^" in "hello" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+                                            ^" in "hello" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:30:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                   ^" in 3 as{TypeError} core::String*};
   }
@@ -105,49 +105,49 @@
     core::Map<dynamic, core::String*>* l0 = <dynamic, core::String*>{};
     core::Map<dynamic, core::String*>* l1 = <dynamic, core::String*>{3: "hello"};
     core::Map<dynamic, core::String*>* l2 = <dynamic, core::String*>{"hello": "hello"};
-    core::Map<dynamic, core::String*>* l3 = <dynamic, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<dynamic, core::String*>* l3 = <dynamic, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:50:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in 3 as{TypeError} core::String*};
-    core::Map<dynamic, core::String*>* l4 = <dynamic, core::String*>{3: "hello", "hello": invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    core::Map<dynamic, core::String*>* l4 = <dynamic, core::String*>{3: "hello", "hello": invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:54:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                        ^" in 3 as{TypeError} core::String*};
   }
   {
     core::Map<core::int*, dynamic>* l0 = <core::int*, dynamic>{};
     core::Map<core::int*, dynamic>* l1 = <core::int*, dynamic>{3: "hello"};
-    core::Map<core::int*, dynamic>* l2 = <core::int*, dynamic>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, dynamic>* l2 = <core::int*, dynamic>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:61:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in "hello" as{TypeError} core::int*: "hello"};
     core::Map<core::int*, dynamic>* l3 = <core::int*, dynamic>{3: 3};
-    core::Map<core::int*, dynamic>* l4 = <core::int*, dynamic>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    core::Map<core::int*, dynamic>* l4 = <core::int*, dynamic>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:66:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
                                             ^" in "hello" as{TypeError} core::int*: 3};
   }
   {
-    core::Map<core::int*, core::String*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:70:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
                                                                            ^" in <core::num*, dynamic>{};
-    core::Map<core::int*, core::String*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:71:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
                                                                            ^" in <core::num*, dynamic>{3: "hello"};
-    core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+    core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:74:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
  - 'Map' is from 'dart:core'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
                                                                            ^" in <core::num*, dynamic>{3: 3};
   }
   {
-    const core::Map<core::int*, core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    const core::Map<core::int*, core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:82:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^";
-    const core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    const core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:86:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                                                      ^";
-    const core::Map<core::int*, core::String*>* l4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    const core::Map<core::int*, core::String*>* l4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:90:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^";
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart
new file mode 100644
index 0000000..c1ec245
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart
@@ -0,0 +1,94 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+void foo(
+    [Map<int, String> m1 = /*@typeArgs=int, String*/ const {1: "hello"},
+    Map<int, String> m2 = /*@typeArgs=int, String*/ const {
+      // One error is from type checking and the other is from const evaluation.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+          "world"
+    }]) {}
+void test() {
+  {
+    Map<int, String> l0 = /*@typeArgs=int, String*/ {};
+    Map<int, String> l1 = /*@typeArgs=int, String*/ {3: "hello"};
+    Map<int, String> l2 = /*@typeArgs=int, String*/ {
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
+    };
+    Map<int, String> l3 = /*@typeArgs=int, String*/ {
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+    };
+    Map<int, String> l4 = /*@typeArgs=int, String*/ {
+      3: "hello",
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+    };
+  }
+  {
+    Map<dynamic, dynamic> l0 = /*@ typeArgs=dynamic, dynamic */ {};
+    Map<dynamic, dynamic> l1 = /*@ typeArgs=dynamic, dynamic */ {3: "hello"};
+    Map<dynamic, dynamic> l2 = /*@ typeArgs=dynamic, dynamic */ {
+      "hello": "hello"
+    };
+    Map<dynamic, dynamic> l3 = /*@ typeArgs=dynamic, dynamic */ {3: 3};
+    Map<dynamic, dynamic> l4 = /*@ typeArgs=dynamic, dynamic */ {
+      3: "hello",
+      "hello": 3
+    };
+  }
+  {
+    Map<dynamic, String> l0 = /*@typeArgs=dynamic, String*/ {};
+    Map<dynamic, String> l1 = /*@typeArgs=dynamic, String*/ {3: "hello"};
+    Map<dynamic, String> l2 = /*@typeArgs=dynamic, String*/ {"hello": "hello"};
+    Map<dynamic, String> l3 = /*@typeArgs=dynamic, String*/ {
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+    };
+    Map<dynamic, String> l4 = /*@typeArgs=dynamic, String*/ {
+      3: "hello",
+      "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+    };
+  }
+  {
+    Map<int, dynamic> l0 = /*@typeArgs=int, dynamic*/ {};
+    Map<int, dynamic> l1 = /*@typeArgs=int, dynamic*/ {3: "hello"};
+    Map<int, dynamic> l2 = /*@typeArgs=int, dynamic*/ {
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
+    };
+    Map<int, dynamic> l3 = /*@typeArgs=int, dynamic*/ {3: 3};
+    Map<int, dynamic> l4 = /*@typeArgs=int, dynamic*/ {
+      3: "hello",
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": 3
+    };
+  }
+  {
+    Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
+    Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+      3: "hello"
+    };
+    Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+      3: 3
+    };
+  }
+  {
+    const Map<int, String> l0 = /*@typeArgs=int, String*/ const {};
+    const Map<int, String> l1 = /*@typeArgs=int, String*/ const {3: "hello"};
+    const Map<int, String> l2 = /*@typeArgs=int, String*/ const {
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+          "hello"
+    };
+    const Map<int, String> l3 = /*@typeArgs=int, String*/ const {
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+    };
+    const Map<int, String> l4 = /*@typeArgs=int, String*/ const {
+      3: "hello",
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+    };
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.textual_outline.expect
new file mode 100644
index 0000000..423bbf0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+library test;
+
+void foo(
+    [Map<int, String> m1 = const {1: "hello"},
+    Map<int, String> m2 = const {"hello": "world"}]) {}
+void test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9e39c4b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+library test;
+
+main() {}
+void foo(
+    [Map<int, String> m1 = const {1: "hello"},
+    Map<int, String> m2 = const {"hello": "world"}]) {}
+void test() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.weak.expect
new file mode 100644
index 0000000..c3559ec
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.weak.expect
@@ -0,0 +1,155 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                        ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": 3
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:68:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:69:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:72:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:89:87: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method foo([core::Map<core::int, core::String> m1 = #C3, core::Map<core::int, core::String> m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^"]) → void {}
+static method test() → void {
+  {
+    core::Map<core::int, core::String> l0 = <core::int, core::String>{};
+    core::Map<core::int, core::String> l1 = <core::int, core::String>{3: "hello"};
+    core::Map<core::int, core::String> l2 = <core::int, core::String>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int: "hello"};
+    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                 ^" in 3 as{TypeError,ForNonNullableByDefault} core::String};
+    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                  ^" in 3 as{TypeError,ForNonNullableByDefault} core::String};
+  }
+  {
+    core::Map<dynamic, dynamic> l0 = <dynamic, dynamic>{};
+    core::Map<dynamic, dynamic> l1 = <dynamic, dynamic>{3: "hello"};
+    core::Map<dynamic, dynamic> l2 = <dynamic, dynamic>{"hello": "hello"};
+    core::Map<dynamic, dynamic> l3 = <dynamic, dynamic>{3: 3};
+    core::Map<dynamic, dynamic> l4 = <dynamic, dynamic>{3: "hello", "hello": 3};
+  }
+  {
+    core::Map<dynamic, core::String> l0 = <dynamic, core::String>{};
+    core::Map<dynamic, core::String> l1 = <dynamic, core::String>{3: "hello"};
+    core::Map<dynamic, core::String> l2 = <dynamic, core::String>{"hello": "hello"};
+    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                 ^" in 3 as{TypeError,ForNonNullableByDefault} core::String};
+    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                       ^" in 3 as{TypeError,ForNonNullableByDefault} core::String};
+  }
+  {
+    core::Map<core::int, dynamic> l0 = <core::int, dynamic>{};
+    core::Map<core::int, dynamic> l1 = <core::int, dynamic>{3: "hello"};
+    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int: "hello"};
+    core::Map<core::int, dynamic> l3 = <core::int, dynamic>{3: 3};
+    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int: 3};
+  }
+  {
+    core::Map<core::int, core::String> l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:68:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+    Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
+                                                                           ^" in <core::num, dynamic>{} as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
+    core::Map<core::int, core::String> l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:69:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+    Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+                                                                           ^" in <core::num, dynamic>{3: "hello"} as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
+    core::Map<core::int, core::String> l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:72:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+    Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+                                                                           ^" in <core::num, dynamic>{3: 3} as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
+  }
+  {
+    const core::Map<core::int, core::String> l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^";
+    const core::Map<core::int, core::String> l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                                                     ^";
+    const core::Map<core::int, core::String> l4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^";
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = "hello"
+  #C3 = <core::int*, core::String*>{#C1:#C2)
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.weak.modular.expect
new file mode 100644
index 0000000..c3559ec
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.weak.modular.expect
@@ -0,0 +1,155 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                        ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": 3
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:68:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:69:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:72:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:89:87: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method foo([core::Map<core::int, core::String> m1 = #C3, core::Map<core::int, core::String> m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^"]) → void {}
+static method test() → void {
+  {
+    core::Map<core::int, core::String> l0 = <core::int, core::String>{};
+    core::Map<core::int, core::String> l1 = <core::int, core::String>{3: "hello"};
+    core::Map<core::int, core::String> l2 = <core::int, core::String>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int: "hello"};
+    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                 ^" in 3 as{TypeError,ForNonNullableByDefault} core::String};
+    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                  ^" in 3 as{TypeError,ForNonNullableByDefault} core::String};
+  }
+  {
+    core::Map<dynamic, dynamic> l0 = <dynamic, dynamic>{};
+    core::Map<dynamic, dynamic> l1 = <dynamic, dynamic>{3: "hello"};
+    core::Map<dynamic, dynamic> l2 = <dynamic, dynamic>{"hello": "hello"};
+    core::Map<dynamic, dynamic> l3 = <dynamic, dynamic>{3: 3};
+    core::Map<dynamic, dynamic> l4 = <dynamic, dynamic>{3: "hello", "hello": 3};
+  }
+  {
+    core::Map<dynamic, core::String> l0 = <dynamic, core::String>{};
+    core::Map<dynamic, core::String> l1 = <dynamic, core::String>{3: "hello"};
+    core::Map<dynamic, core::String> l2 = <dynamic, core::String>{"hello": "hello"};
+    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                 ^" in 3 as{TypeError,ForNonNullableByDefault} core::String};
+    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                       ^" in 3 as{TypeError,ForNonNullableByDefault} core::String};
+  }
+  {
+    core::Map<core::int, dynamic> l0 = <core::int, dynamic>{};
+    core::Map<core::int, dynamic> l1 = <core::int, dynamic>{3: "hello"};
+    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int: "hello"};
+    core::Map<core::int, dynamic> l3 = <core::int, dynamic>{3: 3};
+    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int: 3};
+  }
+  {
+    core::Map<core::int, core::String> l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:68:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+    Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
+                                                                           ^" in <core::num, dynamic>{} as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
+    core::Map<core::int, core::String> l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:69:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+    Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+                                                                           ^" in <core::num, dynamic>{3: "hello"} as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
+    core::Map<core::int, core::String> l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:72:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+    Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+                                                                           ^" in <core::num, dynamic>{3: 3} as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
+  }
+  {
+    const core::Map<core::int, core::String> l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^";
+    const core::Map<core::int, core::String> l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                                                     ^";
+    const core::Map<core::int, core::String> l4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^";
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = "hello"
+  #C3 = <core::int*, core::String*>{#C1:#C2)
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.weak.outline.expect
new file mode 100644
index 0000000..5650c36
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.weak.outline.expect
@@ -0,0 +1,10 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo([has-declared-initializer core::Map<core::int, core::String> m1, has-declared-initializer core::Map<core::int, core::String> m2]) → void
+  ;
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.weak.transformed.expect
new file mode 100644
index 0000000..c3559ec
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart.weak.transformed.expect
@@ -0,0 +1,155 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                        ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": 3
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:68:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:69:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:72:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:89:87: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method foo([core::Map<core::int, core::String> m1 = #C3, core::Map<core::int, core::String> m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^"]) → void {}
+static method test() → void {
+  {
+    core::Map<core::int, core::String> l0 = <core::int, core::String>{};
+    core::Map<core::int, core::String> l1 = <core::int, core::String>{3: "hello"};
+    core::Map<core::int, core::String> l2 = <core::int, core::String>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int: "hello"};
+    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                 ^" in 3 as{TypeError,ForNonNullableByDefault} core::String};
+    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                  ^" in 3 as{TypeError,ForNonNullableByDefault} core::String};
+  }
+  {
+    core::Map<dynamic, dynamic> l0 = <dynamic, dynamic>{};
+    core::Map<dynamic, dynamic> l1 = <dynamic, dynamic>{3: "hello"};
+    core::Map<dynamic, dynamic> l2 = <dynamic, dynamic>{"hello": "hello"};
+    core::Map<dynamic, dynamic> l3 = <dynamic, dynamic>{3: 3};
+    core::Map<dynamic, dynamic> l4 = <dynamic, dynamic>{3: "hello", "hello": 3};
+  }
+  {
+    core::Map<dynamic, core::String> l0 = <dynamic, core::String>{};
+    core::Map<dynamic, core::String> l1 = <dynamic, core::String>{3: "hello"};
+    core::Map<dynamic, core::String> l2 = <dynamic, core::String>{"hello": "hello"};
+    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                 ^" in 3 as{TypeError,ForNonNullableByDefault} core::String};
+    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                       ^" in 3 as{TypeError,ForNonNullableByDefault} core::String};
+  }
+  {
+    core::Map<core::int, dynamic> l0 = <core::int, dynamic>{};
+    core::Map<core::int, dynamic> l1 = <core::int, dynamic>{3: "hello"};
+    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int: "hello"};
+    core::Map<core::int, dynamic> l3 = <core::int, dynamic>{3: 3};
+    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int: 3};
+  }
+  {
+    core::Map<core::int, core::String> l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:68:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+    Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
+                                                                           ^" in <core::num, dynamic>{} as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
+    core::Map<core::int, core::String> l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:69:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+    Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+                                                                           ^" in <core::num, dynamic>{3: "hello"} as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
+    core::Map<core::int, core::String> l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:72:76: Error: A value of type 'Map<num, dynamic>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+    Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+                                                                           ^" in <core::num, dynamic>{3: 3} as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
+  }
+  {
+    const core::Map<core::int, core::String> l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^";
+    const core::Map<core::int, core::String> l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                                                     ^";
+    const core::Map<core::int, core::String> l4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals2.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^";
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = "hello"
+  #C3 = <core::int*, core::String*>{#C1:#C2)
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart
index 4349993..1b4ee60 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart
@@ -1,28 +1,28 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
 abstract class MyStream<T> extends Stream<T> {
-  factory MyStream() => null;
+  factory MyStream() => throw '';
 }
 
 Stream<List<int>> foo() async* {
-  yield /*@typeArgs=int**/ [];
+  yield /*@typeArgs=int*/ [];
   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ MyStream();
   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
-  yield* new /*@ typeArgs=List<int*>* */ MyStream();
+  yield* new /*@typeArgs=List<int>*/ MyStream();
 }
 
 Iterable<Map<int, int>> bar() sync* {
-  yield new /*@ typeArgs=int*, int* */ Map();
+  yield new /*@typeArgs=int, int*/ Map();
   yield /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
   yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic, dynamic */ Map();
-  yield* /*@typeArgs=Map<int*, int*>**/ [];
+  yield* /*@typeArgs=Map<int, int>*/ [];
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.textual_outline.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.textual_outline.expect
index 9dd4582..90f6ed4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
 abstract class MyStream<T> extends Stream<T> {
-  factory MyStream() => null;
+  factory MyStream() => throw '';
 }
 
 Stream<List<int>> foo() async* {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.textual_outline_modelled.expect
index 2f502af..ced7865 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,7 +6,7 @@
 Stream<List<int>> foo() async* {}
 
 abstract class MyStream<T> extends Stream<T> {
-  factory MyStream() => null;
+  factory MyStream() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.expect
index 5951999..afeab22 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -32,88 +32,36 @@
 
 import "dart:async";
 
-abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
-  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
-    return null;
-  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
-  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
-  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
-  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
-  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
-  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
-  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
-  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
-  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
-  abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
-  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
-  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
-  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
-  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
-  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
-  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
-  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
-  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
-  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
-  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
-  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
-  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
-  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
-  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
-  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
-  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
-  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
-  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
-  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
+abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
+  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
+    return throw "";
 }
-static method foo() → asy::Stream<core::List<core::int*>*>* async* {
-  yield<core::int*>[];
+static method foo() → asy::Stream<core::List<core::int>> async* {
+  yield<core::int>[];
   yield invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
  - 'MyStream' is from 'pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart'.
  - 'List' is from 'dart:core'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ MyStream();
-                                                                    ^" in self::MyStream::•<dynamic>() as{TypeError} core::List<core::int*>*;
+                                                                    ^" in self::MyStream::•<dynamic>() as{TypeError,ForNonNullableByDefault} core::List<core::int>;
   yield* invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
  - 'List' is from 'dart:core'.
  - 'Stream' is from 'dart:async'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
-                                                               ^" in <dynamic>[] as{TypeError} asy::Stream<core::List<core::int*>*>*;
-  yield* self::MyStream::•<core::List<core::int*>*>();
+                                                               ^" in <dynamic>[] as{TypeError,ForNonNullableByDefault} asy::Stream<core::List<core::int>>;
+  yield* self::MyStream::•<core::List<core::int>>();
 }
-static method bar() → core::Iterable<core::Map<core::int*, core::int*>*>* sync* {
-  yield core::Map::•<core::int*, core::int*>();
+static method bar() → core::Iterable<core::Map<core::int, core::int>> sync* {
+  yield core::Map::•<core::int, core::int>();
   yield invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:63: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Map<int, int>'.
  - 'List' is from 'dart:core'.
  - 'Map' is from 'dart:core'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
-                                                              ^" in <dynamic>[] as{TypeError} core::Map<core::int*, core::int*>*;
+                                                              ^" in <dynamic>[] as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::int>;
   yield* invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:79: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'Iterable<Map<int, int>>'.
  - 'Map' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic, dynamic */ Map();
-                                                                              ^" in core::Map::•<dynamic, dynamic>() as{TypeError} core::Iterable<core::Map<core::int*, core::int*>*>*;
-  yield*<core::Map<core::int*, core::int*>*>[];
+                                                                              ^" in core::Map::•<dynamic, dynamic>() as{TypeError,ForNonNullableByDefault} core::Iterable<core::Map<core::int, core::int>>;
+  yield*<core::Map<core::int, core::int>>[];
 }
 static method main() → dynamic {}
-
-constants  {
-  #C1 = null
-  #C2 = ""
-}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.modular.expect
index 5951999..afeab22 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -32,88 +32,36 @@
 
 import "dart:async";
 
-abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
-  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
-    return null;
-  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
-  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
-  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
-  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
-  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
-  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
-  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
-  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
-  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
-  abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
-  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
-  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
-  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
-  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
-  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
-  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
-  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
-  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
-  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
-  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
-  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
-  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
-  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
-  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
-  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
-  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
-  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
-  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
-  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
+abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
+  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
+    return throw "";
 }
-static method foo() → asy::Stream<core::List<core::int*>*>* async* {
-  yield<core::int*>[];
+static method foo() → asy::Stream<core::List<core::int>> async* {
+  yield<core::int>[];
   yield invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
  - 'MyStream' is from 'pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart'.
  - 'List' is from 'dart:core'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ MyStream();
-                                                                    ^" in self::MyStream::•<dynamic>() as{TypeError} core::List<core::int*>*;
+                                                                    ^" in self::MyStream::•<dynamic>() as{TypeError,ForNonNullableByDefault} core::List<core::int>;
   yield* invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
  - 'List' is from 'dart:core'.
  - 'Stream' is from 'dart:async'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
-                                                               ^" in <dynamic>[] as{TypeError} asy::Stream<core::List<core::int*>*>*;
-  yield* self::MyStream::•<core::List<core::int*>*>();
+                                                               ^" in <dynamic>[] as{TypeError,ForNonNullableByDefault} asy::Stream<core::List<core::int>>;
+  yield* self::MyStream::•<core::List<core::int>>();
 }
-static method bar() → core::Iterable<core::Map<core::int*, core::int*>*>* sync* {
-  yield core::Map::•<core::int*, core::int*>();
+static method bar() → core::Iterable<core::Map<core::int, core::int>> sync* {
+  yield core::Map::•<core::int, core::int>();
   yield invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:63: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Map<int, int>'.
  - 'List' is from 'dart:core'.
  - 'Map' is from 'dart:core'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
-                                                              ^" in <dynamic>[] as{TypeError} core::Map<core::int*, core::int*>*;
+                                                              ^" in <dynamic>[] as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::int>;
   yield* invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:79: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'Iterable<Map<int, int>>'.
  - 'Map' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic, dynamic */ Map();
-                                                                              ^" in core::Map::•<dynamic, dynamic>() as{TypeError} core::Iterable<core::Map<core::int*, core::int*>*>*;
-  yield*<core::Map<core::int*, core::int*>*>[];
+                                                                              ^" in core::Map::•<dynamic, dynamic>() as{TypeError,ForNonNullableByDefault} core::Iterable<core::Map<core::int, core::int>>;
+  yield*<core::Map<core::int, core::int>>[];
 }
 static method main() → dynamic {}
-
-constants  {
-  #C1 = null
-  #C2 = ""
-}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.outline.expect
index b893e24..cb0d71e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.outline.expect
@@ -1,64 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
-  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
+abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
+  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
     ;
-  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
-  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
-  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
-  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
-  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
-  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
-  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
-  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
-  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
-  abstract member-signature method join([core::String* separator]) → asy::Future<core::String*>*; -> asy::Stream::join
-  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
-  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
-  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
-  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
-  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
-  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
-  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
-  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
-  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
-  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
-  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
-  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
-  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
-  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
-  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
-  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
-  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
-  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
-  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError, () →* void onDone, core::bool* cancelOnError}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
 }
-static method foo() → asy::Stream<core::List<core::int*>*>* async* 
+static method foo() → asy::Stream<core::List<core::int>> async* 
   ;
-static method bar() → core::Iterable<core::Map<core::int*, core::int*>*>* sync* 
+static method bar() → core::Iterable<core::Map<core::int, core::int>> sync* 
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
index 1f13874..f4276e4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -32,88 +32,36 @@
 
 import "dart:async";
 
-abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
-  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
-    return null;
-  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
-  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
-  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
-  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
-  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
-  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
-  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
-  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
-  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
-  abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
-  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
-  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
-  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
-  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
-  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
-  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
-  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
-  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
-  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
-  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
-  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
-  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
-  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
-  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
-  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
-  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
-  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
-  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
-  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
+abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
+  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
+    return throw "";
 }
-static method foo() → asy::Stream<core::List<core::int*>*>* async* {
-  yield core::_GrowableList::•<core::int*>(0);
+static method foo() → asy::Stream<core::List<core::int>> async* {
+  yield core::_GrowableList::•<core::int>(0);
   yield invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
  - 'MyStream' is from 'pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart'.
  - 'List' is from 'dart:core'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ MyStream();
-                                                                    ^" in self::MyStream::•<dynamic>() as{TypeError} core::List<core::int*>*;
+                                                                    ^" in self::MyStream::•<dynamic>() as{TypeError,ForNonNullableByDefault} core::List<core::int>;
   yield* invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
  - 'List' is from 'dart:core'.
  - 'Stream' is from 'dart:async'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
-                                                               ^" in core::_GrowableList::•<dynamic>(0) as{TypeError} asy::Stream<core::List<core::int*>*>*;
-  yield* self::MyStream::•<core::List<core::int*>*>();
+                                                               ^" in core::_GrowableList::•<dynamic>(0) as{TypeError,ForNonNullableByDefault} asy::Stream<core::List<core::int>>;
+  yield* self::MyStream::•<core::List<core::int>>();
 }
-static method bar() → core::Iterable<core::Map<core::int*, core::int*>*>* sync* {
-  yield core::Map::•<core::int*, core::int*>();
+static method bar() → core::Iterable<core::Map<core::int, core::int>> sync* {
+  yield core::Map::•<core::int, core::int>();
   yield invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:63: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Map<int, int>'.
  - 'List' is from 'dart:core'.
  - 'Map' is from 'dart:core'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
-                                                              ^" in core::_GrowableList::•<dynamic>(0) as{TypeError} core::Map<core::int*, core::int*>*;
+                                                              ^" in core::_GrowableList::•<dynamic>(0) as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::int>;
   yield* invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:79: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'Iterable<Map<int, int>>'.
  - 'Map' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic, dynamic */ Map();
-                                                                              ^" in core::Map::•<dynamic, dynamic>() as{TypeError} core::Iterable<core::Map<core::int*, core::int*>*>*;
-  yield* core::_GrowableList::•<core::Map<core::int*, core::int*>*>(0);
+                                                                              ^" in core::Map::•<dynamic, dynamic>() as{TypeError,ForNonNullableByDefault} core::Iterable<core::Map<core::int, core::int>>;
+  yield* core::_GrowableList::•<core::Map<core::int, core::int>>(0);
 }
 static method main() → dynamic {}
-
-constants  {
-  #C1 = null
-  #C2 = ""
-}
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart b/pkg/front_end/testcases/inference/dynamic_methods.dart
index a381658..0b0d8fc 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,10 +11,10 @@
 
 test() {
   dynamic d = new Foo();
-  var /*@ type=int* */ get_hashCode = d. /*@target=Object.hashCode*/ hashCode;
+  var /*@type=int*/ get_hashCode = d. /*@target=Object.hashCode*/ hashCode;
   var /*@ type=dynamic */ call_hashCode =
       d. /*@target=Object.hashCode*/ hashCode();
-  var /*@ type=String* */ call_toString =
+  var /*@type=String*/ call_toString =
       d. /*@target=Object.toString*/ toString();
   var /*@ type=dynamic */ call_toStringArg = d.toString(color: "pink");
   var /*@ type=dynamic */ call_foo0 = d.foo();
@@ -22,14 +22,14 @@
   var /*@ type=dynamic */ call_foo2 = d.foo(1, 2);
   var /*@ type=dynamic */ call_nsm0 = d.noSuchMethod();
   var /*@ type=dynamic */ call_nsm1 =
-      d. /*@target=Object.noSuchMethod*/ noSuchMethod(null);
+      d. /*@target=Object.noSuchMethod*/ noSuchMethod(throw '');
   var /*@ type=dynamic */ call_nsm2 = d.noSuchMethod(null, null);
-  var /*@ type=bool* */ equals_self = d /*@target=Object.==*/ == d;
-  var /*@ type=bool* */ equals_null = d  == null;
-  var /*@ type=bool* */ null_equals = null  == d;
-  var /*@ type=bool* */ not_equals_self = d /*@target=Object.==*/ != d;
-  var /*@ type=bool* */ not_equals_null = d  != null;
-  var /*@ type=bool* */ null_not_equals = null  != d;
+  var /*@type=bool*/ equals_self = d /*@target=Object.==*/ == d;
+  var /*@type=bool*/ equals_null = d  == null;
+  var /*@type=bool*/ null_equals = null  == d;
+  var /*@type=bool*/ not_equals_self = d /*@target=Object.==*/ != d;
+  var /*@type=bool*/ not_equals_null = d  != null;
+  var /*@type=bool*/ null_not_equals = null  != d;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.textual_outline.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.textual_outline.expect
index 520a2f0..d2690b8 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.textual_outline_modelled.expect
index e184ef2..441f1e9 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.expect
index 3cc9299..028eb3c 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,41 +10,31 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  method foo(core::int* x) → core::int*
+  method foo(core::int x) → core::int
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
   dynamic d = new self::Foo::•();
-  core::int* get_hashCode = d.{core::Object::hashCode}{core::int*};
+  core::int get_hashCode = d.{core::Object::hashCode}{core::int};
   dynamic call_hashCode = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:46: Error: 'hashCode' isn't a function or method and can't be invoked.
       d. /*@target=Object.hashCode*/ hashCode();
-                                             ^^^^..." in d.{core::Object::hashCode}{core::int*}{<unresolved>}.call();
-  core::String* call_toString = d.{core::Object::toString}(){() →* core::String*};
+                                             ^^^^..." in d.{core::Object::hashCode}{core::int}{<unresolved>}.call();
+  core::String call_toString = d.{core::Object::toString}(){() → core::String};
   dynamic call_toStringArg = d{dynamic}.toString(color: "pink");
   dynamic call_foo0 = d{dynamic}.foo();
   dynamic call_foo1 = d{dynamic}.foo(1);
   dynamic call_foo2 = d{dynamic}.foo(1, 2);
   dynamic call_nsm0 = d{dynamic}.noSuchMethod();
-  dynamic call_nsm1 = d.{core::Object::noSuchMethod}(null){(core::Invocation*) →* dynamic};
+  dynamic call_nsm1 = d.{core::Object::noSuchMethod}(throw ""){(core::Invocation) → dynamic};
   dynamic call_nsm2 = d{dynamic}.noSuchMethod(null, null);
-  core::bool* equals_self = d =={core::Object::==}{(core::Object*) →* core::bool*} d;
-  core::bool* equals_null = d == null;
-  core::bool* null_equals = d == null;
-  core::bool* not_equals_self = !(d =={core::Object::==}{(core::Object*) →* core::bool*} d);
-  core::bool* not_equals_null = !(d == null);
-  core::bool* null_not_equals = !(d == null);
+  core::bool equals_self = d =={core::Object::==}{(core::Object) → core::bool} d;
+  core::bool equals_null = d == null;
+  core::bool null_equals = d == null;
+  core::bool not_equals_self = !(d =={core::Object::==}{(core::Object) → core::bool} d);
+  core::bool not_equals_null = !(d == null);
+  core::bool null_not_equals = !(d == null);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.modular.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.modular.expect
index 3cc9299..028eb3c 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,41 +10,31 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  method foo(core::int* x) → core::int*
+  method foo(core::int x) → core::int
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
   dynamic d = new self::Foo::•();
-  core::int* get_hashCode = d.{core::Object::hashCode}{core::int*};
+  core::int get_hashCode = d.{core::Object::hashCode}{core::int};
   dynamic call_hashCode = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:46: Error: 'hashCode' isn't a function or method and can't be invoked.
       d. /*@target=Object.hashCode*/ hashCode();
-                                             ^^^^..." in d.{core::Object::hashCode}{core::int*}{<unresolved>}.call();
-  core::String* call_toString = d.{core::Object::toString}(){() →* core::String*};
+                                             ^^^^..." in d.{core::Object::hashCode}{core::int}{<unresolved>}.call();
+  core::String call_toString = d.{core::Object::toString}(){() → core::String};
   dynamic call_toStringArg = d{dynamic}.toString(color: "pink");
   dynamic call_foo0 = d{dynamic}.foo();
   dynamic call_foo1 = d{dynamic}.foo(1);
   dynamic call_foo2 = d{dynamic}.foo(1, 2);
   dynamic call_nsm0 = d{dynamic}.noSuchMethod();
-  dynamic call_nsm1 = d.{core::Object::noSuchMethod}(null){(core::Invocation*) →* dynamic};
+  dynamic call_nsm1 = d.{core::Object::noSuchMethod}(throw ""){(core::Invocation) → dynamic};
   dynamic call_nsm2 = d{dynamic}.noSuchMethod(null, null);
-  core::bool* equals_self = d =={core::Object::==}{(core::Object*) →* core::bool*} d;
-  core::bool* equals_null = d == null;
-  core::bool* null_equals = d == null;
-  core::bool* not_equals_self = !(d =={core::Object::==}{(core::Object*) →* core::bool*} d);
-  core::bool* not_equals_null = !(d == null);
-  core::bool* null_not_equals = !(d == null);
+  core::bool equals_self = d =={core::Object::==}{(core::Object) → core::bool} d;
+  core::bool equals_null = d == null;
+  core::bool null_equals = d == null;
+  core::bool not_equals_self = !(d =={core::Object::==}{(core::Object) → core::bool} d);
+  core::bool not_equals_null = !(d == null);
+  core::bool null_not_equals = !(d == null);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.outline.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.outline.expect
index 266c3b7..f85ff81 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
-  method foo(core::int* x) → core::int*
+  method foo(core::int x) → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.transformed.expect
index 3cc9299..028eb3c 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,41 +10,31 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  method foo(core::int* x) → core::int*
+  method foo(core::int x) → core::int
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
   dynamic d = new self::Foo::•();
-  core::int* get_hashCode = d.{core::Object::hashCode}{core::int*};
+  core::int get_hashCode = d.{core::Object::hashCode}{core::int};
   dynamic call_hashCode = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:46: Error: 'hashCode' isn't a function or method and can't be invoked.
       d. /*@target=Object.hashCode*/ hashCode();
-                                             ^^^^..." in d.{core::Object::hashCode}{core::int*}{<unresolved>}.call();
-  core::String* call_toString = d.{core::Object::toString}(){() →* core::String*};
+                                             ^^^^..." in d.{core::Object::hashCode}{core::int}{<unresolved>}.call();
+  core::String call_toString = d.{core::Object::toString}(){() → core::String};
   dynamic call_toStringArg = d{dynamic}.toString(color: "pink");
   dynamic call_foo0 = d{dynamic}.foo();
   dynamic call_foo1 = d{dynamic}.foo(1);
   dynamic call_foo2 = d{dynamic}.foo(1, 2);
   dynamic call_nsm0 = d{dynamic}.noSuchMethod();
-  dynamic call_nsm1 = d.{core::Object::noSuchMethod}(null){(core::Invocation*) →* dynamic};
+  dynamic call_nsm1 = d.{core::Object::noSuchMethod}(throw ""){(core::Invocation) → dynamic};
   dynamic call_nsm2 = d{dynamic}.noSuchMethod(null, null);
-  core::bool* equals_self = d =={core::Object::==}{(core::Object*) →* core::bool*} d;
-  core::bool* equals_null = d == null;
-  core::bool* null_equals = d == null;
-  core::bool* not_equals_self = !(d =={core::Object::==}{(core::Object*) →* core::bool*} d);
-  core::bool* not_equals_null = !(d == null);
-  core::bool* null_not_equals = !(d == null);
+  core::bool equals_self = d =={core::Object::==}{(core::Object) → core::bool} d;
+  core::bool equals_null = d == null;
+  core::bool null_equals = d == null;
+  core::bool not_equals_self = !(d =={core::Object::==}{(core::Object) → core::bool} d);
+  core::bool not_equals_null = !(d == null);
+  core::bool null_not_equals = !(d == null);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart
index 2cc4ef2..8797577 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C {
   final int x;
-  C() : x = /*@ typeArgs=int* */ f();
+  C() : x = /*@typeArgs=int*/ f();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.textual_outline.expect b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.textual_outline.expect
index 29f36b1..e2985ec 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C {
   final int x;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.textual_outline_modelled.expect
index 48c35b5..4ab415c 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C {
   C() : x = f();
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.expect b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.expect
index be4cd27..d8d638c 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x;
-  constructor •() → self::C*
-    : self::C::x = self::f<core::int*>(), super core::Object::•()
+  final field core::int x;
+  constructor •() → self::C
+    : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.modular.expect b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.modular.expect
index be4cd27..d8d638c 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x;
-  constructor •() → self::C*
-    : self::C::x = self::f<core::int*>(), super core::Object::•()
+  final field core::int x;
+  constructor •() → self::C
+    : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.outline.expect b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.outline.expect
index 9685fc7..93d551a 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x;
-  constructor •() → self::C*
+  final field core::int x;
+  constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.transformed.expect
index be4cd27..d8d638c 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x;
-  constructor •() → self::C*
-    : self::C::x = self::f<core::int*>(), super core::Object::•()
+  final field core::int x;
+  constructor •() → self::C
+    : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart
index 1aa57eb..90a54af4 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C implements B {
   final x;
-  C() : x = /*@ typeArgs=int* */ f();
+  C() : x = /*@typeArgs=int*/ f();
 }
 
 abstract class B {
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.textual_outline.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.textual_outline.expect
index da0ba76..63624e5 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C implements B {
   final x;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.textual_outline_modelled.expect
index d26853f..7b4cbc1 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 abstract class B {
   int get x;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.expect
index 4be2a2e..e2c8056 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.expect
@@ -1,39 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object implements self::B {
-  final field core::int* x;
-  constructor •() → self::C*
-    : self::C::x = self::f<core::int*>(), super core::Object::•()
+  final field core::int x;
+  constructor •() → self::C
+    : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.modular.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.modular.expect
index 4be2a2e..e2c8056 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.modular.expect
@@ -1,39 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object implements self::B {
-  final field core::int* x;
-  constructor •() → self::C*
-    : self::C::x = self::f<core::int*>(), super core::Object::•()
+  final field core::int x;
+  constructor •() → self::C
+    : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.outline.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.outline.expect
index 9159f0b..b9c3eb0 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object implements self::B {
-  final field core::int* x;
-  constructor •() → self::C*
+  final field core::int x;
+  constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.transformed.expect
index 4be2a2e..e2c8056 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.transformed.expect
@@ -1,39 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object implements self::B {
-  final field core::int* x;
-  constructor •() → self::C*
-    : self::C::x = self::f<core::int*>(), super core::Object::•()
+  final field core::int x;
+  constructor •() → self::C
+    : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart b/pkg/front_end/testcases/inference/field_initializer_context_this.dart
index 21b0a86..19cceaa 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_this.dart
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C {
   final int x;
-  C() : this.x = /*@ typeArgs=int* */ f();
+  C() : this.x = /*@typeArgs=int*/ f();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.textual_outline.expect b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.textual_outline.expect
index b34b6ab..1e1a021 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C {
   final int x;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.textual_outline_modelled.expect
index 3bf83d9..99df24f 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C {
   C() : this.x = f();
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.expect b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.expect
index be4cd27..d8d638c 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x;
-  constructor •() → self::C*
-    : self::C::x = self::f<core::int*>(), super core::Object::•()
+  final field core::int x;
+  constructor •() → self::C
+    : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.modular.expect b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.modular.expect
index be4cd27..d8d638c 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x;
-  constructor •() → self::C*
-    : self::C::x = self::f<core::int*>(), super core::Object::•()
+  final field core::int x;
+  constructor •() → self::C
+    : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.outline.expect b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.outline.expect
index 9685fc7..93d551a 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x;
-  constructor •() → self::C*
+  final field core::int x;
+  constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.transformed.expect
index be4cd27..d8d638c 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x;
-  constructor •() → self::C*
-    : self::C::x = self::f<core::int*>(), super core::Object::•()
+  final field core::int x;
+  constructor •() → self::C
+    : self::C::x = self::f<core::int>(), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart b/pkg/front_end/testcases/inference/field_initializer_parameter.dart
index 1716fed..f8779f9 100644
--- a/pkg/front_end/testcases/inference/field_initializer_parameter.dart
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
 
 class C {
   final x;
-  C(int p) : x = /*@ typeArgs=int* */ f(p);
+  C(int p) : x = /*@typeArgs=int*/ f(p);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.textual_outline.expect
index 478e8b6..94b8c9a 100644
--- a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 T f<T>(T t) => t;
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.textual_outline_modelled.expect
index 8c232d5..8596052 100644
--- a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 T f<T>(T t) => t;
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.expect b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.expect
index fa1a596..6e94c4a 100644
--- a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   final field dynamic x;
-  constructor •(core::int* p) → self::C*
-    : self::C::x = self::f<core::int*>(p), super core::Object::•()
+  constructor •(core::int p) → self::C
+    : self::C::x = self::f<core::int>(p), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>(self::f::T* t) → self::f::T*
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.modular.expect
index fa1a596..6e94c4a 100644
--- a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   final field dynamic x;
-  constructor •(core::int* p) → self::C*
-    : self::C::x = self::f<core::int*>(p), super core::Object::•()
+  constructor •(core::int p) → self::C
+    : self::C::x = self::f<core::int>(p), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>(self::f::T* t) → self::f::T*
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.outline.expect
index 73500a0..95702b4 100644
--- a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   final field dynamic x;
-  constructor •(core::int* p) → self::C*
+  constructor •(core::int p) → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>(self::f::T* t) → self::f::T*
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.transformed.expect
index fa1a596..6e94c4a 100644
--- a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   final field dynamic x;
-  constructor •(core::int* p) → self::C*
-    : self::C::x = self::f<core::int*>(p), super core::Object::•()
+  constructor •(core::int p) → self::C
+    : self::C::x = self::f<core::int>(p), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>(self::f::T* t) → self::f::T*
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
   return t;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart
index b31bdeb..7c308f7 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart
+++ b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
   final x = _x;
-  static int get _x => null;
+  static int get _x => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.textual_outline.expect
index 1b6c304..4c494df 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class C {
   final x = _x;
-  static int get _x => null;
+  static int get _x => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.textual_outline_modelled.expect
index 1b6c304..4c494df 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class C {
   final x = _x;
-  static int get _x => null;
+  static int get _x => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.expect b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.expect
index 0c7c096..ff7c2ec 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x = self::C::_x;
-  synthetic constructor •() → self::C*
+  final field core::int x = self::C::_x;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static get _x() → core::int*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static get _x() → core::int
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.modular.expect
index 0c7c096..ff7c2ec 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x = self::C::_x;
-  synthetic constructor •() → self::C*
+  final field core::int x = self::C::_x;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static get _x() → core::int*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static get _x() → core::int
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.outline.expect
index 5b1faba..0b026cb 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x;
-  synthetic constructor •() → self::C*
+  final field core::int x;
+  synthetic constructor •() → self::C
     ;
-  static get _x() → core::int*
+  static get _x() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.transformed.expect
index 0c7c096..ff7c2ec 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x = self::C::_x;
-  synthetic constructor •() → self::C*
+  final field core::int x = self::C::_x;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static get _x() → core::int*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static get _x() → core::int
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart
index d23a26d..a904cca 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart
+++ b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,6 +9,6 @@
   final x = y;
 }
 
-int get y => null;
+int get y => throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.textual_outline.expect
index 74b8ff9..f3f7e14 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class C {
   final x = y;
 }
 
-int get y => null;
+int get y => throw '';
 main() {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.textual_outline_modelled.expect
index 74b8ff9..f3f7e14 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class C {
   final x = y;
 }
 
-int get y => null;
+int get y => throw '';
 main() {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.expect b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.expect
index f7f1c21..351830c 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x = self::y;
-  synthetic constructor •() → self::C*
+  final field core::int x = self::y;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static get y() → core::int*
-  return null;
+static get y() → core::int
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.modular.expect
index f7f1c21..351830c 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x = self::y;
-  synthetic constructor •() → self::C*
+  final field core::int x = self::y;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static get y() → core::int*
-  return null;
+static get y() → core::int
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.outline.expect
index 49626d9..d9bed3b 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x;
-  synthetic constructor •() → self::C*
+  final field core::int x;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static get y() → core::int*
+static get y() → core::int
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.transformed.expect
index f7f1c21..351830c 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  final field core::int* x = self::y;
-  synthetic constructor •() → self::C*
+  final field core::int x = self::y;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static get y() → core::int*
-  return null;
+static get y() → core::int
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart
index c670437..fbc4673 100644
--- a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart
new file mode 100644
index 0000000..e399590
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.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.
+
+// @dart=2.9
+
+/*@testedFeatures=inference*/
+library test;
+
+test(dynamic o) async {
+  for (var /*@type=dynamic*/ x in o) {}
+  await for (var /*@type=dynamic*/ x in o) {}
+  int y;
+  for (y in o) {}
+  await for (y in o) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.textual_outline.expect
new file mode 100644
index 0000000..798dfe5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+// @dart = 2.9
+library test;
+
+test(dynamic o) async {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a899b5d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+// @dart = 2.9
+library test;
+
+main() {}
+test(dynamic o) async {}
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.weak.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.weak.expect
new file mode 100644
index 0000000..6e6bae7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.weak.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static method test(dynamic o) → dynamic async /* futureValueType= dynamic */ {
+  for (dynamic x in o as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  }
+  await for (dynamic x in o as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+  }
+  core::int* y;
+  for (final dynamic #t1 in o as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    y = #t1 as{TypeError,ForDynamic} core::int*;
+  }
+  await for (final dynamic #t2 in o as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+    y = #t2 as{TypeError,ForDynamic} core::int*;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.weak.modular.expect
new file mode 100644
index 0000000..6e6bae7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static method test(dynamic o) → dynamic async /* futureValueType= dynamic */ {
+  for (dynamic x in o as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  }
+  await for (dynamic x in o as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+  }
+  core::int* y;
+  for (final dynamic #t1 in o as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    y = #t1 as{TypeError,ForDynamic} core::int*;
+  }
+  await for (final dynamic #t2 in o as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+    y = #t2 as{TypeError,ForDynamic} core::int*;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.weak.outline.expect
new file mode 100644
index 0000000..52dc73d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test(dynamic o) → dynamic async 
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.weak.transformed.expect
new file mode 100644
index 0000000..51313c1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable2.dart.weak.transformed.expect
@@ -0,0 +1,51 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static method test(dynamic o) → dynamic async /* futureValueType= dynamic */ {
+  {
+    core::Iterator<dynamic>* :sync-for-iterator = (o as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      {}
+    }
+  }
+  {
+    asy::Stream<dynamic>* :stream = o as{TypeError,ForDynamic} asy::Stream<dynamic>*;
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+        {}
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  core::int* y;
+  {
+    core::Iterator<dynamic>* :sync-for-iterator = (o as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      {
+        y = #t2 as{TypeError,ForDynamic} core::int*;
+      }
+    }
+  }
+  {
+    asy::Stream<dynamic>* :stream = o as{TypeError,ForDynamic} asy::Stream<dynamic>*;
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t3 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final dynamic #t4 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+        {
+          y = #t4 as{TypeError,ForDynamic} core::int*;
+        }
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_in_loop_promotion.dart b/pkg/front_end/testcases/inference/for_in_loop_promotion.dart
index 0935ce0..8b6136a 100644
--- a/pkg/front_end/testcases/inference/for_in_loop_promotion.dart
+++ b/pkg/front_end/testcases/inference/for_in_loop_promotion.dart
@@ -1,14 +1,16 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void test(List<num> nums) {
-  for (var /*@ type=num* */ x in nums) {
+  for (var /*@type=num**/ x in nums) {
     if (x is int) {
-      var /*@ type=int* */ y = /*@ promotedType=int* */ x;
+      var /*@type=int**/ y = /*@promotedType=int**/ x;
     }
   }
 }
diff --git a/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart
new file mode 100644
index 0000000..cca98f3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart
@@ -0,0 +1,16 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+void test(List<num> nums) {
+  for (var /*@type=num*/ x in nums) {
+    if (x is int) {
+      var /*@type=int*/ y = /*@promotedType=int*/ x;
+    }
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.textual_outline.expect
new file mode 100644
index 0000000..9d1fb80
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+library test;
+
+void test(List<num> nums) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d7c5b5b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+library test;
+
+main() {}
+void test(List<num> nums) {}
diff --git a/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.weak.expect b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.weak.expect
new file mode 100644
index 0000000..38e6b00
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.weak.expect
@@ -0,0 +1,12 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test(core::List<core::num> nums) → void {
+  for (core::num x in nums) {
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.weak.modular.expect
new file mode 100644
index 0000000..38e6b00
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test(core::List<core::num> nums) → void {
+  for (core::num x in nums) {
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.weak.outline.expect
new file mode 100644
index 0000000..0da946e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test(core::List<core::num> nums) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.weak.transformed.expect
new file mode 100644
index 0000000..ee16a51
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_in_loop_promotion2.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test(core::List<core::num> nums) → void {
+  {
+    core::Iterator<core::num> :sync-for-iterator = nums.{core::Iterable::iterator}{core::Iterator<core::num>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      core::num x = :sync-for-iterator.{core::Iterator::current}{core::num};
+      {
+        if(x is{ForNonNullableByDefault} core::int) {
+          core::int y = x{core::int};
+        }
+      }
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart
index b9c867e..b408544 100644
--- a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
   for (num x = 0;; x /*@target=num.+*/ ++) {
     if (x /*@target=num.>=*/ >= 10) break;
     if (x is int) {
-      var /*@ type=int* */ y = /*@ promotedType=int* */ x;
+      var /*@type=int*/ y = /*@promotedType=int*/ x;
     }
   }
 }
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.textual_outline.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.textual_outline.expect
index dfdb7cb..a6bcf94 100644
--- a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void test() {}
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.textual_outline_modelled.expect
index 7d0b674..72a3ba0 100644
--- a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.expect
index f17816f..967b2c0 100644
--- a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
   #L1:
-  for (core::num* x = 0; ; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
-    if(x.{core::num::>=}(10){(core::num*) →* core::bool*})
+  for (core::num x = 0; ; x = x.{core::num::+}(1){(core::num) → core::num}) {
+    if(x.{core::num::>=}(10){(core::num) → core::bool})
       break #L1;
-    if(x is core::int*) {
-      core::int* y = x{core::int*};
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
     }
   }
 }
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.modular.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.modular.expect
index f17816f..967b2c0 100644
--- a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
   #L1:
-  for (core::num* x = 0; ; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
-    if(x.{core::num::>=}(10){(core::num*) →* core::bool*})
+  for (core::num x = 0; ; x = x.{core::num::+}(1){(core::num) → core::num}) {
+    if(x.{core::num::>=}(10){(core::num) → core::bool})
       break #L1;
-    if(x is core::int*) {
-      core::int* y = x{core::int*};
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
     }
   }
 }
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.outline.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.outline.expect
index c74ce2b..01b7bf5 100644
--- a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.transformed.expect
index f17816f..967b2c0 100644
--- a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
   #L1:
-  for (core::num* x = 0; ; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
-    if(x.{core::num::>=}(10){(core::num*) →* core::bool*})
+  for (core::num x = 0; ; x = x.{core::num::+}(1){(core::num) → core::num}) {
+    if(x.{core::num::>=}(10){(core::num) → core::bool})
       break #L1;
-    if(x is core::int*) {
-      core::int* y = x{core::int*};
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
     }
   }
 }
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart
new file mode 100644
index 0000000..b408544
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart
@@ -0,0 +1,17 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+void test() {
+  for (num x = 0;; x /*@target=num.+*/ ++) {
+    if (x /*@target=num.>=*/ >= 10) break;
+    if (x is int) {
+      var /*@type=int*/ y = /*@promotedType=int*/ x;
+    }
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.textual_outline.expect
new file mode 100644
index 0000000..a6bcf94
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+library test;
+
+void test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..72a3ba0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+library test;
+
+main() {}
+void test() {}
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.weak.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.weak.expect
new file mode 100644
index 0000000..967b2c0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.weak.expect
@@ -0,0 +1,15 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  #L1:
+  for (core::num x = 0; ; x = x.{core::num::+}(1){(core::num) → core::num}) {
+    if(x.{core::num::>=}(10){(core::num) → core::bool})
+      break #L1;
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.weak.modular.expect
new file mode 100644
index 0000000..967b2c0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  #L1:
+  for (core::num x = 0; ; x = x.{core::num::+}(1){(core::num) → core::num}) {
+    if(x.{core::num::>=}(10){(core::num) → core::bool})
+      break #L1;
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.weak.outline.expect
new file mode 100644
index 0000000..01b7bf5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.weak.transformed.expect
new file mode 100644
index 0000000..967b2c0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition2.dart.weak.transformed.expect
@@ -0,0 +1,15 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  #L1:
+  for (core::num x = 0; ; x = x.{core::num::+}(1){(core::num) → core::num}) {
+    if(x.{core::num::>=}(10){(core::num) → core::bool})
+      break #L1;
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart
index 9b6724b..63fe9ed 100644
--- a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart
+++ b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
   num x;
   for (x = 0; x /*@target=num.<*/ < 10; x /*@target=num.+*/ ++) {
     if (x is int) {
-      var /*@ type=int* */ y = /*@ promotedType=int* */ x;
+      var /*@type=int*/ y = /*@promotedType=int*/ x;
     }
   }
 }
diff --git a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.textual_outline.expect b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.textual_outline.expect
index dfdb7cb..a6bcf94 100644
--- a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void test() {}
diff --git a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.textual_outline_modelled.expect
index 7d0b674..72a3ba0 100644
--- a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.expect b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.expect
index 8f36a9c..98454d9 100644
--- a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::num* x;
-  for (final core::int* #t1 = x = 0; x.{core::num::<}(10){(core::num*) →* core::bool*}; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
-    if(x is core::int*) {
-      core::int* y = x{core::int*};
+  core::num x;
+  for (final core::int #t1 = x = 0; x.{core::num::<}(10){(core::num) → core::bool}; x = x.{core::num::+}(1){(core::num) → core::num}) {
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
     }
   }
 }
diff --git a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.modular.expect b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.modular.expect
index 8f36a9c..98454d9 100644
--- a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::num* x;
-  for (final core::int* #t1 = x = 0; x.{core::num::<}(10){(core::num*) →* core::bool*}; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
-    if(x is core::int*) {
-      core::int* y = x{core::int*};
+  core::num x;
+  for (final core::int #t1 = x = 0; x.{core::num::<}(10){(core::num) → core::bool}; x = x.{core::num::+}(1){(core::num) → core::num}) {
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
     }
   }
 }
diff --git a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.outline.expect b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.outline.expect
index c74ce2b..01b7bf5 100644
--- a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.transformed.expect
index 8f36a9c..98454d9 100644
--- a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::num* x;
-  for (final core::int* #t1 = x = 0; x.{core::num::<}(10){(core::num*) →* core::bool*}; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
-    if(x is core::int*) {
-      core::int* y = x{core::int*};
+  core::num x;
+  for (final core::int #t1 = x = 0; x.{core::num::<}(10){(core::num) → core::bool}; x = x.{core::num::+}(1){(core::num) → core::num}) {
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
     }
   }
 }
diff --git a/pkg/front_end/testcases/inference/for_loop_promotion.dart b/pkg/front_end/testcases/inference/for_loop_promotion.dart
index 7506811..51d4259 100644
--- a/pkg/front_end/testcases/inference/for_loop_promotion.dart
+++ b/pkg/front_end/testcases/inference/for_loop_promotion.dart
@@ -1,14 +1,16 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void test() {
   for (num x = 0; x /*@target=num.<*/ < 10; x /*@target=num.+*/ ++) {
     if (x is int) {
-      var /*@ type=int* */ y = /*@ promotedType=int* */ x;
+      var /*@type=int**/ y = /*@promotedType=int**/ x;
     }
   }
 }
diff --git a/pkg/front_end/testcases/inference/for_loop_promotion2.dart b/pkg/front_end/testcases/inference/for_loop_promotion2.dart
new file mode 100644
index 0000000..ade0346
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_promotion2.dart
@@ -0,0 +1,16 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+void test() {
+  for (num x = 0; x /*@target=num.<*/ < 10; x /*@target=num.+*/ ++) {
+    if (x is int) {
+      var /*@type=int*/ y = /*@promotedType=int*/ x;
+    }
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/for_loop_promotion2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/for_loop_promotion2.dart.textual_outline.expect
new file mode 100644
index 0000000..a6bcf94
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_promotion2.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+library test;
+
+void test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/for_loop_promotion2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/for_loop_promotion2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..72a3ba0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_promotion2.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+library test;
+
+main() {}
+void test() {}
diff --git a/pkg/front_end/testcases/inference/for_loop_promotion2.dart.weak.expect b/pkg/front_end/testcases/inference/for_loop_promotion2.dart.weak.expect
new file mode 100644
index 0000000..9c494da
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_promotion2.dart.weak.expect
@@ -0,0 +1,12 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  for (core::num x = 0; x.{core::num::<}(10){(core::num) → core::bool}; x = x.{core::num::+}(1){(core::num) → core::num}) {
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_loop_promotion2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/for_loop_promotion2.dart.weak.modular.expect
new file mode 100644
index 0000000..9c494da
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_promotion2.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  for (core::num x = 0; x.{core::num::<}(10){(core::num) → core::bool}; x = x.{core::num::+}(1){(core::num) → core::num}) {
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_loop_promotion2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/for_loop_promotion2.dart.weak.outline.expect
new file mode 100644
index 0000000..01b7bf5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_promotion2.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+
+static method test() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/for_loop_promotion2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/for_loop_promotion2.dart.weak.transformed.expect
new file mode 100644
index 0000000..9c494da
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_promotion2.dart.weak.transformed.expect
@@ -0,0 +1,12 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  for (core::num x = 0; x.{core::num::<}(10){(core::num) → core::bool}; x = x.{core::num::+}(1){(core::num) → core::num}) {
+    if(x is{ForNonNullableByDefault} core::int) {
+      core::int y = x{core::int};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_or_subtyping.dart b/pkg/front_end/testcases/inference/future_or_subtyping.dart
index 075ec72..7e5c647 100644
--- a/pkg/front_end/testcases/inference/future_or_subtyping.dart
+++ b/pkg/front_end/testcases/inference/future_or_subtyping.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,11 +9,10 @@
 
 void add(int x) {}
 add2(int y) {}
-test() {
-  Future<int> f;
-  var /*@ type=Future<void>* */ a =
+test(Future<int> f) {
+  var /*@type=Future<void>*/ a =
       f. /*@ typeArgs=void */ /*@target=Future.then*/ then(add);
-  var /*@ type=Future<dynamic>* */ b =
+  var /*@type=Future<dynamic>*/ b =
       f. /*@ typeArgs=dynamic */ /*@target=Future.then*/ then(add2);
 }
 
diff --git a/pkg/front_end/testcases/inference/future_or_subtyping.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_or_subtyping.dart.textual_outline.expect
index 656dc85..7dd4cd1 100644
--- a/pkg/front_end/testcases/inference/future_or_subtyping.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_or_subtyping.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
 void add(int x) {}
 add2(int y) {}
-test() {}
+test(Future<int> f) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_or_subtyping.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_or_subtyping.dart.textual_outline_modelled.expect
index d072e54..cc8d447 100644
--- a/pkg/front_end/testcases/inference/future_or_subtyping.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_or_subtyping.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
 add2(int y) {}
 main() {}
-test() {}
+test(Future<int> f) {}
 void add(int x) {}
diff --git a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.expect b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.expect
index 36d60ee..9b53f80 100644
--- a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.expect
@@ -1,16 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-static method add(core::int* x) → void {}
-static method add2(core::int* y) → dynamic {}
-static method test() → dynamic {
-  asy::Future<core::int*>* f;
-  asy::Future<void>* a = f.{asy::Future::then}<void>(#C1){((core::int*) →* FutureOr<void>*, {onError: core::Function*}) →* asy::Future<void>*};
-  asy::Future<dynamic>* b = f.{asy::Future::then}<dynamic>(#C2){((core::int*) →* FutureOr<dynamic>*, {onError: core::Function*}) →* asy::Future<dynamic>*};
+static method add(core::int x) → void {}
+static method add2(core::int y) → dynamic {}
+static method test(asy::Future<core::int> f) → dynamic {
+  asy::Future<void> a = f.{asy::Future::then}<void>(#C1){((core::int) → FutureOr<void>, {onError: core::Function?}) → asy::Future<void>};
+  asy::Future<dynamic> b = f.{asy::Future::then}<dynamic>(#C2){((core::int) → FutureOr<dynamic>, {onError: core::Function?}) → asy::Future<dynamic>};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.modular.expect
index 36d60ee..9b53f80 100644
--- a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.modular.expect
@@ -1,16 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-static method add(core::int* x) → void {}
-static method add2(core::int* y) → dynamic {}
-static method test() → dynamic {
-  asy::Future<core::int*>* f;
-  asy::Future<void>* a = f.{asy::Future::then}<void>(#C1){((core::int*) →* FutureOr<void>*, {onError: core::Function*}) →* asy::Future<void>*};
-  asy::Future<dynamic>* b = f.{asy::Future::then}<dynamic>(#C2){((core::int*) →* FutureOr<dynamic>*, {onError: core::Function*}) →* asy::Future<dynamic>*};
+static method add(core::int x) → void {}
+static method add2(core::int y) → dynamic {}
+static method test(asy::Future<core::int> f) → dynamic {
+  asy::Future<void> a = f.{asy::Future::then}<void>(#C1){((core::int) → FutureOr<void>, {onError: core::Function?}) → asy::Future<void>};
+  asy::Future<dynamic> b = f.{asy::Future::then}<dynamic>(#C2){((core::int) → FutureOr<dynamic>, {onError: core::Function?}) → asy::Future<dynamic>};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.outline.expect
index c763edf..2f1d106 100644
--- a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.outline.expect
@@ -1,14 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
+import "dart:async" as asy;
 
 import "dart:async";
 
-static method add(core::int* x) → void
+static method add(core::int x) → void
   ;
-static method add2(core::int* y) → dynamic
+static method add2(core::int y) → dynamic
   ;
-static method test() → dynamic
+static method test(asy::Future<core::int> f) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.transformed.expect
index 36d60ee..9b53f80 100644
--- a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.transformed.expect
@@ -1,16 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-static method add(core::int* x) → void {}
-static method add2(core::int* y) → dynamic {}
-static method test() → dynamic {
-  asy::Future<core::int*>* f;
-  asy::Future<void>* a = f.{asy::Future::then}<void>(#C1){((core::int*) →* FutureOr<void>*, {onError: core::Function*}) →* asy::Future<void>*};
-  asy::Future<dynamic>* b = f.{asy::Future::then}<dynamic>(#C2){((core::int*) →* FutureOr<dynamic>*, {onError: core::Function*}) →* asy::Future<dynamic>*};
+static method add(core::int x) → void {}
+static method add2(core::int y) → dynamic {}
+static method test(asy::Future<core::int> f) → dynamic {
+  asy::Future<void> a = f.{asy::Future::then}<void>(#C1){((core::int) → FutureOr<void>, {onError: core::Function?}) → asy::Future<void>};
+  asy::Future<dynamic> b = f.{asy::Future::then}<dynamic>(#C2){((core::int) → FutureOr<dynamic>, {onError: core::Function?}) → asy::Future<dynamic>};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then.dart b/pkg/front_end/testcases/inference/future_then.dart
index 0fd487d..e350388 100644
--- a/pkg/front_end/testcases/inference/future_then.dart
+++ b/pkg/front_end/testcases/inference/future_then.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,36 +11,35 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void test() {
-  MyFuture f;
-  Future<int> t1 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async =>
+void test(MyFuture f) {
+  Future<int> t1 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async =>
           await new Future<int>.value(3));
-  Future<int> t2 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  Future<int> t2 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return await new Future<int>.value(3);
   });
-  Future<int> t3 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async => 3);
-  Future<int> t4 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  Future<int> t3 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async => 3);
+  Future<int> t4 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return 3;
   });
-  Future<int> t5 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) =>
+  Future<int> t5 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) =>
           new Future<int>.value(3));
-  Future<int> t6 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) {
+  Future<int> t6 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) {
     return new Future<int>.value(3);
   });
-  Future<int> t7 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async =>
+  Future<int> t7 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async =>
           new Future<int>.value(3));
-  Future<int> t8 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  Future<int> t8 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return new Future<int>.value(3);
   });
 }
diff --git a/pkg/front_end/testcases/inference/future_then.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then.dart.textual_outline.expect
index fa6176d..efd6b56 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,8 +6,8 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void test() {}
+void test(MyFuture f) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_then.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then.dart.textual_outline_modelled.expect
index 2a04b20..1b0c6ac 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -6,9 +5,9 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(T x) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
 main() {}
-void test() {}
+void test(MyFuture f) {}
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.expect
index 806622d..c7f957d 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(self::MyFuture<dynamic> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.modular.expect
index 806622d..c7f957d 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.modular.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(self::MyFuture<dynamic> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
index 9492fb2..c0befdd 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
@@ -1,55 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void
+static method test(self::MyFuture<dynamic> f) → void
   ;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
index 06b5b67..59040bd 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(self::MyFuture<dynamic> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart b/pkg/front_end/testcases/inference/future_then_2.dart
index 5987e1a..523142d 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart
+++ b/pkg/front_end/testcases/inference/future_then_2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,36 +11,35 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void test() {
-  MyFuture f;
-  Future<int> t1 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async =>
+void test(MyFuture f) {
+  Future<int> t1 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async =>
           await new MyFuture<int>.value(3));
-  Future<int> t2 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  Future<int> t2 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return await new MyFuture<int>.value(3);
   });
-  Future<int> t3 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async => 3);
-  Future<int> t4 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  Future<int> t3 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async => 3);
+  Future<int> t4 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return 3;
   });
-  Future<int> t5 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=MyFuture<int*>* */ (/*@ type=dynamic */ _) =>
+  Future<int> t5 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=MyFuture<int>*/ (/*@ type=dynamic */ _) =>
           new MyFuture<int>.value(3));
-  Future<int> t6 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=MyFuture<int*>* */ (/*@ type=dynamic */ _) {
+  Future<int> t6 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=MyFuture<int>*/ (/*@ type=dynamic */ _) {
     return new MyFuture<int>.value(3);
   });
-  Future<int> t7 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async =>
+  Future<int> t7 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async =>
           new MyFuture<int>.value(3));
-  Future<int> t8 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  Future<int> t8 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return new MyFuture<int>.value(3);
   });
 }
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_2.dart.textual_outline.expect
index fa6176d..efd6b56 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,8 +6,8 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void test() {}
+void test(MyFuture f) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_2.dart.textual_outline_modelled.expect
index 2a04b20..1b0c6ac 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -6,9 +5,9 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(T x) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
 main() {}
-void test() {}
+void test(MyFuture f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
index 3239514..24bbd71 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(self::MyFuture<dynamic> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _) → self::MyFuture<core::int> {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.modular.expect
index 3239514..24bbd71 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.modular.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(self::MyFuture<dynamic> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _) → self::MyFuture<core::int> {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
index 6bf7851..c0befdd 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
@@ -1,55 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void
+static method test(self::MyFuture<dynamic> f) → void
   ;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_2.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
index 8e3d262..799dbca 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(self::MyFuture<dynamic> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _) → self::MyFuture<core::int> {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart b/pkg/front_end/testcases/inference/future_then_3.dart
index db97e58..89251a8 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart
+++ b/pkg/front_end/testcases/inference/future_then_3.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,36 +11,35 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void test() {
-  MyFuture f;
-  MyFuture<int> t1 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async =>
+void test(MyFuture f) {
+  MyFuture<int> t1 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async =>
           await new Future<int>.value(3));
-  MyFuture<int> t2 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  MyFuture<int> t2 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return await new Future<int>.value(3);
   });
-  MyFuture<int> t3 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async => 3);
-  MyFuture<int> t4 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  MyFuture<int> t3 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async => 3);
+  MyFuture<int> t4 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return 3;
   });
-  MyFuture<int> t5 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) =>
+  MyFuture<int> t5 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) =>
           new Future<int>.value(3));
-  MyFuture<int> t6 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) {
+  MyFuture<int> t6 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) {
     return new Future<int>.value(3);
   });
-  MyFuture<int> t7 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async =>
+  MyFuture<int> t7 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async =>
           new Future<int>.value(3));
-  MyFuture<int> t8 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  MyFuture<int> t8 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return new Future<int>.value(3);
   });
 }
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_3.dart.textual_outline.expect
index fa6176d..efd6b56 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,8 +6,8 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void test() {}
+void test(MyFuture f) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_3.dart.textual_outline_modelled.expect
index 2a04b20..1b0c6ac 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -6,9 +5,9 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(T x) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
 main() {}
-void test() {}
+void test(MyFuture f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
index 9bbf98e..e2c59bb 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(self::MyFuture<dynamic> f) → void {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.modular.expect
index 9bbf98e..e2c59bb 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.modular.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(self::MyFuture<dynamic> f) → void {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
index d8325ea..c0befdd 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
@@ -1,55 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void
+static method test(self::MyFuture<dynamic> f) → void
   ;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_3.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
index 53f1486..a49af5d 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(self::MyFuture<dynamic> f) → void {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart b/pkg/front_end/testcases/inference/future_then_4.dart
index 06ff323..f85dd42 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart
+++ b/pkg/front_end/testcases/inference/future_then_4.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,36 +11,35 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void test() {
-  MyFuture f;
-  MyFuture<int> t1 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async =>
+void test(MyFuture f) {
+  MyFuture<int> t1 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async =>
           await new MyFuture<int>.value(3));
-  MyFuture<int> t2 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  MyFuture<int> t2 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return await new MyFuture<int>.value(3);
   });
-  MyFuture<int> t3 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async => 3);
-  MyFuture<int> t4 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  MyFuture<int> t3 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async => 3);
+  MyFuture<int> t4 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return 3;
   });
-  MyFuture<int> t5 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=MyFuture<int*>* */ (/*@ type=dynamic */ _) =>
+  MyFuture<int> t5 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=MyFuture<int>*/ (/*@ type=dynamic */ _) =>
           new MyFuture<int>.value(3));
-  MyFuture<int> t6 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=MyFuture<int*>* */ (/*@ type=dynamic */ _) {
+  MyFuture<int> t6 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=MyFuture<int>*/ (/*@ type=dynamic */ _) {
     return new MyFuture<int>.value(3);
   });
-  MyFuture<int> t7 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async =>
+  MyFuture<int> t7 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async =>
           new MyFuture<int>.value(3));
-  MyFuture<int> t8 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  MyFuture<int> t8 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return new MyFuture<int>.value(3);
   });
 }
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_4.dart.textual_outline.expect
index fa6176d..efd6b56 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,8 +6,8 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void test() {}
+void test(MyFuture f) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_4.dart.textual_outline_modelled.expect
index 2a04b20..1b0c6ac 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -6,9 +5,9 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(T x) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
 main() {}
-void test() {}
+void test(MyFuture f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
index f4d9ecd..fc93c1c 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(self::MyFuture<dynamic> f) → void {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _) → self::MyFuture<core::int> {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.modular.expect
index f4d9ecd..fc93c1c 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.modular.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(self::MyFuture<dynamic> f) → void {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _) → self::MyFuture<core::int> {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
index bd648b9..c0befdd 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
@@ -1,55 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void
+static method test(self::MyFuture<dynamic> f) → void
   ;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_4.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
index e29cac0..45d285d 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(self::MyFuture<dynamic> f) → void {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _) → self::MyFuture<core::int> {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart b/pkg/front_end/testcases/inference/future_then_5.dart
index 025513e..d409186 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart
+++ b/pkg/front_end/testcases/inference/future_then_5.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,36 +11,35 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void test() {
-  Future f;
-  Future<int> t1 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async =>
+void test(Future f) {
+  Future<int> t1 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async =>
           await new MyFuture<int>.value(3));
-  Future<int> t2 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  Future<int> t2 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return await new MyFuture<int>.value(3);
   });
-  Future<int> t3 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async => 3);
-  Future<int> t4 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  Future<int> t3 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async => 3);
+  Future<int> t4 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return 3;
   });
-  Future<int> t5 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=MyFuture<int*>* */ (/*@ type=dynamic */ _) =>
+  Future<int> t5 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=MyFuture<int>*/ (/*@ type=dynamic */ _) =>
           new MyFuture<int>.value(3));
-  Future<int> t6 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=MyFuture<int*>* */ (/*@ type=dynamic */ _) {
+  Future<int> t6 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=MyFuture<int>*/ (/*@ type=dynamic */ _) {
     return new MyFuture<int>.value(3);
   });
-  Future<int> t7 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async =>
+  Future<int> t7 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async =>
           new MyFuture<int>.value(3));
-  Future<int> t8 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  Future<int> t8 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return new MyFuture<int>.value(3);
   });
 }
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_5.dart.textual_outline.expect
index fa6176d..15314d1 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,8 +6,8 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void test() {}
+void test(Future f) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_5.dart.textual_outline_modelled.expect
index 2a04b20..a948218 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -6,9 +5,9 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(T x) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
 main() {}
-void test() {}
+void test(Future f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
index 0a41e1a..a3d1342 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(asy::Future<dynamic> f) → void {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((dynamic _) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((dynamic _) → self::MyFuture<core::int> {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.modular.expect
index 0a41e1a..a3d1342 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.modular.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(asy::Future<dynamic> f) → void {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((dynamic _) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((dynamic _) → self::MyFuture<core::int> {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
index bdf2de4..dcbf3b8 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
@@ -1,55 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void
+static method test(asy::Future<dynamic> f) → void
   ;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_5.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
index 1503ace..4b4a41f 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(asy::Future<dynamic> f) → void {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return new self::MyFuture::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((dynamic _) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((dynamic _) → self::MyFuture<core::int> {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return new self::MyFuture::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart b/pkg/front_end/testcases/inference/future_then_6.dart
index 566408f..35cd958 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart
+++ b/pkg/front_end/testcases/inference/future_then_6.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,36 +11,35 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void test() {
-  Future f;
-  Future<int> t1 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async =>
+void test(Future f) {
+  Future<int> t1 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async =>
           await new Future<int>.value(3));
-  Future<int> t2 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  Future<int> t2 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return await new Future<int>.value(3);
   });
-  Future<int> t3 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async => 3);
-  Future<int> t4 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  Future<int> t3 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async => 3);
+  Future<int> t4 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return 3;
   });
-  Future<int> t5 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) =>
+  Future<int> t5 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) =>
           new Future<int>.value(3));
-  Future<int> t6 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) {
+  Future<int> t6 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) {
     return new Future<int>.value(3);
   });
-  Future<int> t7 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async =>
+  Future<int> t7 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async =>
           new Future<int>.value(3));
-  Future<int> t8 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-      /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) async {
+  Future<int> t8 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) async {
     return new Future<int>.value(3);
   });
 }
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_6.dart.textual_outline.expect
index fa6176d..15314d1 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,8 +6,8 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void test() {}
+void test(Future f) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_6.dart.textual_outline_modelled.expect
index 2a04b20..a948218 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -6,9 +5,9 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(T x) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
 main() {}
-void test() {}
+void test(Future f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
index c12d5d2..076e9b4 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(asy::Future<dynamic> f) → void {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.modular.expect
index c12d5d2..076e9b4 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.modular.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(asy::Future<dynamic> f) → void {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
index 6308c69..dcbf3b8 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
@@ -1,55 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void
+static method test(asy::Future<dynamic> f) → void
   ;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_6.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
index 9ce9f77..dccede5 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
@@ -1,55 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method test() → void {
-  asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return await asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+static method test(asy::Future<dynamic> f) → void {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return await asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 3;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
-    return asy::Future::value<core::int*>(3);
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return asy::Future::value<core::int>(3);
+  }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
 }
 static method main() → dynamic {}
 
@@ -60,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart b/pkg/front_end/testcases/inference/future_then_conditional.dart
index fa98a95..50dc5e5 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
index c6f1986..a592afc 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
@@ -39,17 +39,17 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional.dart:12:7 -> SymbolConstant(#onTimeout)
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2.dart b/pkg/front_end/testcases/inference/future_then_conditional2.dart
new file mode 100644
index 0000000..8349e09
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2.dart
@@ -0,0 +1,35 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(MyFuture<bool> f) {
+  Future<int> t1 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=bool*/ x) async =>
+          x ? 2 : await new Future<int>.value(3));
+  Future<int> t2 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=bool*/ x) async {
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+  });
+  Future<int> t5 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*error:INVALID_CAST_FUNCTION_EXPR*/
+      /*@returnType=FutureOr<int>*/ (/*@type=bool*/ x) =>
+          x ? 2 : new Future<int>.value(3));
+  Future<int> t6 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=FutureOr<int>*/ (/*@type=bool*/ x) {
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+  });
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_conditional2.dart.textual_outline.expect
new file mode 100644
index 0000000..4d34d7c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(MyFuture<bool> f) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_conditional2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bb3c283
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+  dynamic noSuchMethod(invocation) => null;
+}
+
+main() {}
+void test(MyFuture<bool> f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional2.dart.weak.expect
new file mode 100644
index 0000000..dc8d05e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2.dart.weak.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+//                                                 ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new Future<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await asy::Future::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+                                                ^" in (await x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new Future<int>.value(3));
+            ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional2.dart.weak.modular.expect
new file mode 100644
index 0000000..dc8d05e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+//                                                 ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new Future<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await asy::Future::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+                                                ^" in (await x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new Future<int>.value(3));
+            ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional2.dart.weak.outline.expect
new file mode 100644
index 0000000..eede603
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2.dart.weak.outline.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    ;
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → 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}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
+Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional2.dart.weak.transformed.expect
new file mode 100644
index 0000000..77bf58c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2.dart.weak.transformed.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+//                                                 ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new Future<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await asy::Future::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+                                                ^" in (await x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new Future<int>.value(3));
+            ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_2.dart b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart
new file mode 100644
index 0000000..e45736d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart
@@ -0,0 +1,37 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(MyFuture<bool> f) {
+  Future<int> t1 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=bool*/ x) async =>
+          x ? 2 : await new MyFuture<int>.value(3));
+  Future<int> t2 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=bool*/ x) async {
+    return /*info:DOWN_CAST_COMPOSITE*/ await x
+        ? 2
+        : new MyFuture<int>.value(3);
+  });
+  Future<int> t5 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*info:INFERRED_TYPE_CLOSURE,error:INVALID_CAST_FUNCTION_EXPR*/
+      /*@returnType=FutureOr<int>*/ (/*@type=bool*/ x) =>
+          x ? 2 : new MyFuture<int>.value(3));
+  Future<int> t6 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=FutureOr<int>*/ (/*@type=bool*/ x) {
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+  });
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.textual_outline.expect
new file mode 100644
index 0000000..4d34d7c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(MyFuture<bool> f) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bb3c283
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+  dynamic noSuchMethod(invocation) => null;
+}
+
+main() {}
+void test(MyFuture<bool> f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.weak.expect
new file mode 100644
index 0000000..9ae1043
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.weak.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_2.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//         ? 2
+//         ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_2.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new MyFuture<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_2.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await new self::MyFuture::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_2.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+        ? 2
+        ^" in (await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_2.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new MyFuture<int>.value(3));
+            ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_2.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.weak.modular.expect
new file mode 100644
index 0000000..9ae1043
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_2.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//         ? 2
+//         ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_2.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new MyFuture<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_2.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await new self::MyFuture::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_2.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+        ? 2
+        ^" in (await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_2.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new MyFuture<int>.value(3));
+            ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_2.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.weak.outline.expect
new file mode 100644
index 0000000..eede603
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.weak.outline.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    ;
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → 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}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
+Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..ce018e4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_2.dart.weak.transformed.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_2.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//         ? 2
+//         ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_2.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new MyFuture<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_2.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await new self::MyFuture::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_2.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+        ? 2
+        ^" in (await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_2.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new MyFuture<int>.value(3));
+            ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_2.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_3.dart b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart
new file mode 100644
index 0000000..717a4dd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart
@@ -0,0 +1,35 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(MyFuture<bool> f) {
+  MyFuture<int> t1 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=bool*/ x) async =>
+          x ? 2 : await new Future<int>.value(3));
+  MyFuture<int> t2 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=bool*/ x) async {
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+  });
+  MyFuture<int> t5 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*info:INFERRED_TYPE_CLOSURE,error:INVALID_CAST_FUNCTION_EXPR*/
+      /*@returnType=FutureOr<int>*/ (/*@type=bool*/ x) =>
+          x ? 2 : new Future<int>.value(3));
+  MyFuture<int> t6 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=FutureOr<int>*/ (/*@type=bool*/ x) {
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+  });
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.textual_outline.expect
new file mode 100644
index 0000000..4d34d7c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(MyFuture<bool> f) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bb3c283
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+  dynamic noSuchMethod(invocation) => null;
+}
+
+main() {}
+void test(MyFuture<bool> f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.weak.expect
new file mode 100644
index 0000000..88f1310
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.weak.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_3.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+//                                                 ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_3.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new Future<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_3.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await asy::Future::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_3.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+                                                ^" in (await x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_3.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new Future<int>.value(3));
+            ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_3.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.weak.modular.expect
new file mode 100644
index 0000000..88f1310
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_3.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+//                                                 ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_3.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new Future<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_3.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await asy::Future::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_3.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+                                                ^" in (await x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_3.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new Future<int>.value(3));
+            ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_3.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.weak.outline.expect
new file mode 100644
index 0000000..eede603
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.weak.outline.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    ;
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → 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}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
+Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.weak.transformed.expect
new file mode 100644
index 0000000..b0ac878
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_3.dart.weak.transformed.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_3.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+//                                                 ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_3.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new Future<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_3.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await asy::Future::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_3.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+                                                ^" in (await x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_3.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new Future<int>.value(3));
+            ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_3.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_4.dart b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart
new file mode 100644
index 0000000..ef9fdc0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart
@@ -0,0 +1,37 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(MyFuture<bool> f) {
+  MyFuture<int> t1 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=bool*/ x) async =>
+          x ? 2 : await new MyFuture<int>.value(3));
+  MyFuture<int> t2 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=bool*/ x) async {
+    return /*info:DOWN_CAST_COMPOSITE*/ await x
+        ? 2
+        : new MyFuture<int>.value(3);
+  });
+  MyFuture<int> t5 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*info:INFERRED_TYPE_CLOSURE,error:INVALID_CAST_FUNCTION_EXPR*/
+      /*@returnType=FutureOr<int>*/ (/*@type=bool*/ x) =>
+          x ? 2 : new MyFuture<int>.value(3));
+  MyFuture<int> t6 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=FutureOr<int>*/ (/*@type=bool*/ x) {
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+  });
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.textual_outline.expect
new file mode 100644
index 0000000..4d34d7c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(MyFuture<bool> f) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bb3c283
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+  dynamic noSuchMethod(invocation) => null;
+}
+
+main() {}
+void test(MyFuture<bool> f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.weak.expect
new file mode 100644
index 0000000..ff4e173
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.weak.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_4.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//         ? 2
+//         ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_4.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new MyFuture<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_4.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await new self::MyFuture::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_4.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+        ? 2
+        ^" in (await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_4.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new MyFuture<int>.value(3));
+            ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_4.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.weak.modular.expect
new file mode 100644
index 0000000..ff4e173
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_4.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//         ? 2
+//         ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_4.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new MyFuture<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_4.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await new self::MyFuture::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_4.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+        ? 2
+        ^" in (await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_4.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new MyFuture<int>.value(3));
+            ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_4.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.weak.outline.expect
new file mode 100644
index 0000000..eede603
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.weak.outline.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    ;
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → 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}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
+Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.weak.transformed.expect
new file mode 100644
index 0000000..1420955
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_4.dart.weak.transformed.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_4.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//         ? 2
+//         ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_4.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new MyFuture<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_4.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::bool> f) → void {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await new self::MyFuture::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_4.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+        ? 2
+        ^" in (await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_4.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new MyFuture<int>.value(3));
+            ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_4.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_5.dart b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart
new file mode 100644
index 0000000..10a2196
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart
@@ -0,0 +1,37 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(Future<bool> f) {
+  Future<int> t1 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=bool*/ x) async =>
+          x ? 2 : await new MyFuture<int>.value(3));
+  Future<int> t2 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=bool*/ x) async {
+    return /*info:DOWN_CAST_COMPOSITE*/ await x
+        ? 2
+        : new MyFuture<int>.value(3);
+  });
+  Future<int> t5 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*info:INFERRED_TYPE_CLOSURE,error:INVALID_CAST_FUNCTION_EXPR*/
+      /*@returnType=FutureOr<int>*/ (/*@type=bool*/ x) =>
+          x ? 2 : new MyFuture<int>.value(3));
+  Future<int> t6 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=FutureOr<int>*/ (/*@type=bool*/ x) {
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+  });
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.textual_outline.expect
new file mode 100644
index 0000000..6a42c50
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(Future<bool> f) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5cd19c2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+  dynamic noSuchMethod(invocation) => null;
+}
+
+main() {}
+void test(Future<bool> f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.weak.expect
new file mode 100644
index 0000000..efa8914
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.weak.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_5.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//         ? 2
+//         ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_5.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new MyFuture<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_5.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(asy::Future<core::bool> f) → void {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await new self::MyFuture::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_5.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+        ? 2
+        ^" in (await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_5.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new MyFuture<int>.value(3));
+            ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_5.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.weak.modular.expect
new file mode 100644
index 0000000..efa8914
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_5.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//         ? 2
+//         ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_5.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new MyFuture<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_5.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(asy::Future<core::bool> f) → void {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await new self::MyFuture::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_5.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+        ? 2
+        ^" in (await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_5.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new MyFuture<int>.value(3));
+            ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_5.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.weak.outline.expect
new file mode 100644
index 0000000..65754eb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.weak.outline.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    ;
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → 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}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(asy::Future<core::bool> f) → void
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
+Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.weak.transformed.expect
new file mode 100644
index 0000000..3ef32de
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_5.dart.weak.transformed.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_5.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//         ? 2
+//         ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_5.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new MyFuture<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_5.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(asy::Future<core::bool> f) → void {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await new self::MyFuture::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_5.dart:24:9: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+        ? 2
+        ^" in (await x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_5.dart:30:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new MyFuture<int>.value(3));
+            ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_5.dart:33:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new MyFuture<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : new self::MyFuture::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_6.dart b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart
new file mode 100644
index 0000000..4dc4a7e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart
@@ -0,0 +1,35 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(Future<bool> f) {
+  Future<int> t1 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=bool*/ x) async =>
+          x ? 2 : await new Future<int>.value(3));
+  Future<int> t2 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=bool*/ x) async {
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+  });
+  Future<int> t5 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*info:INFERRED_TYPE_CLOSURE,error:INVALID_CAST_FUNCTION_EXPR*/
+      /*@returnType=FutureOr<int>*/ (/*@type=bool*/ x) =>
+          x ? 2 : new Future<int>.value(3));
+  Future<int> t6 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+      /*@returnType=FutureOr<int>*/ (/*@type=bool*/ x) {
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+  });
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.textual_outline.expect
new file mode 100644
index 0000000..6a42c50
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(Future<bool> f) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5cd19c2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+  dynamic noSuchMethod(invocation) => null;
+}
+
+main() {}
+void test(Future<bool> f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.weak.expect
new file mode 100644
index 0000000..c7c7f3e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.weak.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_6.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+//                                                 ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_6.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new Future<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_6.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(asy::Future<core::bool> f) → void {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await asy::Future::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_6.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+                                                ^" in (await x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_6.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new Future<int>.value(3));
+            ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_6.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.weak.modular.expect
new file mode 100644
index 0000000..c7c7f3e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_6.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+//                                                 ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_6.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new Future<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_6.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(asy::Future<core::bool> f) → void {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await asy::Future::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_6.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+                                                ^" in (await x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_6.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new Future<int>.value(3));
+            ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_6.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.weak.outline.expect
new file mode 100644
index 0000000..65754eb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.weak.outline.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    ;
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → 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}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(asy::Future<core::bool> f) → void
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
+Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.weak.transformed.expect
new file mode 100644
index 0000000..cf18067
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional2_6.dart.weak.transformed.expect
@@ -0,0 +1,78 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_6.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+//                                                 ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_6.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ? 2 : new Future<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_conditional2_6.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(asy::Future<core::bool> f) → void {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ => x ?{core::int} 2 : await asy::Future::value<core::int>(3)){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_6.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ? 2 : new Future<int>.value(3);
+                                                ^" in (await x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((core::bool x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_6.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ? 2 : new Future<int>.value(3));
+            ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((core::bool x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_conditional2_6.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ? 2 : new Future<int>.value(3);
+                                          ^" in (x ?{core::Object} 2 : asy::Future::value<core::int>(3)) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::bool) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart b/pkg/front_end/testcases/inference/future_then_conditional_2.dart
index c942646..ba96a67 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
index c076dc4..c495ab1 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
@@ -39,17 +39,17 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_2.dart:12:7 -> SymbolConstant(#onTimeout)
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart b/pkg/front_end/testcases/inference/future_then_conditional_3.dart
index b794b14..fca986c 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
index 9969d8c..e9bed35 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
@@ -39,17 +39,17 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_3.dart:12:7 -> SymbolConstant(#onTimeout)
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart b/pkg/front_end/testcases/inference/future_then_conditional_4.dart
index 70c0c75..c66a08e 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
index 242640b..bdb47ae 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
@@ -39,17 +39,17 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_4.dart:12:7 -> SymbolConstant(#onTimeout)
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart b/pkg/front_end/testcases/inference/future_then_conditional_5.dart
index 4b63f73..c49fc8d 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
index 072b257..d0ca973 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
@@ -39,17 +39,17 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_5.dart:12:7 -> SymbolConstant(#onTimeout)
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart b/pkg/front_end/testcases/inference/future_then_conditional_6.dart
index 0c8ea52..2300f3b 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
index 78864f5..1eecd7d 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
@@ -39,17 +39,17 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_conditional_6.dart:12:7 -> SymbolConstant(#onTimeout)
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart b/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart
index 0d4ca6f..c7e1423 100644
--- a/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart
+++ b/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart
new file mode 100644
index 0000000..7098f1b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart
@@ -0,0 +1,20 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+test(Future<int> f) {
+  Future<List<int>> b = /*info:ASSIGNMENT_CAST should be pass*/ f
+      . /*@typeArgs=List<dynamic>*/ /*@target=Future.then*/ then(
+          /*@returnType=List<dynamic>*/ (/*@type=int*/ x) => /*@ typeArgs=dynamic */ [])
+      . /*@target=Future.whenComplete*/ whenComplete(
+          /*@ returnType=Null */ () {});
+  b = f. /*@typeArgs=List<int>*/ /*@target=Future.then*/ then(
+      /*@returnType=List<int>*/ (/*@type=int*/ x) => /*@typeArgs=int*/ []);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.textual_outline.expect
new file mode 100644
index 0000000..e44f2cb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+library test;
+
+import 'dart:async';
+
+test(Future<int> f) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..17e14e1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+library test;
+
+import 'dart:async';
+
+main() {}
+test(Future<int> f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.weak.expect
new file mode 100644
index 0000000..936d1ab
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.weak.expect
@@ -0,0 +1,25 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart:14:41: Error: A value of type 'Future<List<dynamic>>' can't be assigned to a variable of type 'Future<List<int>>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'List' is from 'dart:core'.
+//       . /*@target=Future.whenComplete*/ whenComplete(
+//                                         ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method test(asy::Future<core::int> f) → dynamic {
+  asy::Future<core::List<core::int>> b = invalid-expression "pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart:14:41: Error: A value of type 'Future<List<dynamic>>' can't be assigned to a variable of type 'Future<List<int>>'.
+ - 'Future' is from 'dart:async'.
+ - 'List' is from 'dart:core'.
+      . /*@target=Future.whenComplete*/ whenComplete(
+                                        ^" in f.{asy::Future::then}<core::List<dynamic>>((core::int x) → core::List<dynamic> => <dynamic>[]){((core::int) → FutureOr<core::List<dynamic>>, {onError: core::Function?}) → asy::Future<core::List<dynamic>>}.{asy::Future::whenComplete}(() → Null {}){(() → FutureOr<void>) → asy::Future<core::List<dynamic>>} as{TypeError,ForNonNullableByDefault} asy::Future<core::List<core::int>>;
+  b = f.{asy::Future::then}<core::List<core::int>>((core::int x) → core::List<core::int> => <core::int>[]){((core::int) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.weak.modular.expect
new file mode 100644
index 0000000..936d1ab
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart:14:41: Error: A value of type 'Future<List<dynamic>>' can't be assigned to a variable of type 'Future<List<int>>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'List' is from 'dart:core'.
+//       . /*@target=Future.whenComplete*/ whenComplete(
+//                                         ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method test(asy::Future<core::int> f) → dynamic {
+  asy::Future<core::List<core::int>> b = invalid-expression "pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart:14:41: Error: A value of type 'Future<List<dynamic>>' can't be assigned to a variable of type 'Future<List<int>>'.
+ - 'Future' is from 'dart:async'.
+ - 'List' is from 'dart:core'.
+      . /*@target=Future.whenComplete*/ whenComplete(
+                                        ^" in f.{asy::Future::then}<core::List<dynamic>>((core::int x) → core::List<dynamic> => <dynamic>[]){((core::int) → FutureOr<core::List<dynamic>>, {onError: core::Function?}) → asy::Future<core::List<dynamic>>}.{asy::Future::whenComplete}(() → Null {}){(() → FutureOr<void>) → asy::Future<core::List<dynamic>>} as{TypeError,ForNonNullableByDefault} asy::Future<core::List<core::int>>;
+  b = f.{asy::Future::then}<core::List<core::int>>((core::int x) → core::List<core::int> => <core::int>[]){((core::int) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.weak.outline.expect
new file mode 100644
index 0000000..af46efd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.weak.outline.expect
@@ -0,0 +1,11 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method test(asy::Future<core::int> f) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.weak.transformed.expect
new file mode 100644
index 0000000..3a467cd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart.weak.transformed.expect
@@ -0,0 +1,25 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart:14:41: Error: A value of type 'Future<List<dynamic>>' can't be assigned to a variable of type 'Future<List<int>>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'List' is from 'dart:core'.
+//       . /*@target=Future.whenComplete*/ whenComplete(
+//                                         ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method test(asy::Future<core::int> f) → dynamic {
+  asy::Future<core::List<core::int>> b = invalid-expression "pkg/front_end/testcases/inference/future_then_downwards_method_target2.dart:14:41: Error: A value of type 'Future<List<dynamic>>' can't be assigned to a variable of type 'Future<List<int>>'.
+ - 'Future' is from 'dart:async'.
+ - 'List' is from 'dart:core'.
+      . /*@target=Future.whenComplete*/ whenComplete(
+                                        ^" in f.{asy::Future::then}<core::List<dynamic>>((core::int x) → core::List<dynamic> => core::_GrowableList::•<dynamic>(0)){((core::int) → FutureOr<core::List<dynamic>>, {onError: core::Function?}) → asy::Future<core::List<dynamic>>}.{asy::Future::whenComplete}(() → Null {}){(() → FutureOr<void>) → asy::Future<core::List<dynamic>>} as{TypeError,ForNonNullableByDefault} asy::Future<core::List<core::int>>;
+  b = f.{asy::Future::then}<core::List<core::int>>((core::int x) → core::List<core::int> => core::_GrowableList::•<core::int>(0)){((core::int) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_explicit_future.dart b/pkg/front_end/testcases/inference/future_then_explicit_future.dart
index 7bf66ef..a092a01 100644
--- a/pkg/front_end/testcases/inference/future_then_explicit_future.dart
+++ b/pkg/front_end/testcases/inference/future_then_explicit_future.dart
@@ -1,26 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import "dart:async";
 
-m1() {
-  Future<int> f;
-  var /*@type=Future<Future<List<int*>*>*>**/ x = f. /*@target=Future.then*/ then<
+m1(Future<int> f) {
+  var /*@type=Future<Future<List<int>>>*/ x = f. /*@target=Future.then*/ then<
           Future<List<int>>>(
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/
-      /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
+      /*@returnType=FutureOr<Future<List<int>>>*/ (/*@type=int*/ x) => /*@typeArgs=dynamic*/ []);
   Future<List<int>> y = x;
 }
 
-m2() {
-  Future<int> f;
-  var /*@type=Future<List<int*>*>**/ x = f. /*@target=Future.then*/ then<
-          List<int>>(
-      /*@returnType=List<int*>**/ (/*@type=int**/ x) => /*@typeArgs=int**/ []);
+m2(Future<int> f) {
+  var /*@type=Future<List<int>>*/ x =
+      f. /*@target=Future.then*/ then<List<int>>(
+          /*@returnType=List<int>*/ (/*@type=int*/ x) => /*@typeArgs=int*/ []);
   Future<List<int>> y = x;
 }
 
diff --git a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.textual_outline.expect
index 56fb911..119cbcf 100644
--- a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 import "dart:async";
 
-m1() {}
-m2() {}
+m1(Future<int> f) {}
+m2(Future<int> f) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.textual_outline_modelled.expect
index 56fb911..119cbcf 100644
--- a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 import "dart:async";
 
-m1() {}
-m2() {}
+m1(Future<int> f) {}
+m2(Future<int> f) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.expect
index 668e6c8..ed4f3ff 100644
--- a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:99: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'FutureOr<Future<List<int>>>'.
+// pkg/front_end/testcases/inference/future_then_explicit_future.dart:14:94: Error: A value of type 'List<dynamic>' can't be returned from a function with return type 'FutureOr<Future<List<int>>>'.
 //  - 'List' is from 'dart:core'.
 //  - 'Future' is from 'dart:async'.
-//       /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
-//                                                                                                   ^
+//       /*@returnType=FutureOr<Future<List<int>>>*/ (/*@type=int*/ x) => /*@typeArgs=dynamic*/ []);
+//                                                                                              ^
 //
-// pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
+// pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
 //  - 'Future' is from 'dart:async'.
 //  - 'List' is from 'dart:core'.
 //   Future<List<int>> y = x;
@@ -20,22 +20,20 @@
 
 import "dart:async";
 
-static method m1() → dynamic {
-  asy::Future<core::int*>* f;
-  asy::Future<asy::Future<core::List<core::int*>*>*>* x = f.{asy::Future::then}<asy::Future<core::List<core::int*>*>*>((core::int* x) → FutureOr<asy::Future<core::List<core::int*>*>*>* => invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:99: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'FutureOr<Future<List<int>>>'.
+static method m1(asy::Future<core::int> f) → dynamic {
+  asy::Future<asy::Future<core::List<core::int>>> x = f.{asy::Future::then}<asy::Future<core::List<core::int>>>((core::int x) → FutureOr<asy::Future<core::List<core::int>>> => invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:14:94: Error: A value of type 'List<dynamic>' can't be returned from a function with return type 'FutureOr<Future<List<int>>>'.
  - 'List' is from 'dart:core'.
  - 'Future' is from 'dart:async'.
-      /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
-                                                                                                  ^" in <dynamic>[] as{TypeError} FutureOr<asy::Future<core::List<core::int*>*>*>*){((core::int*) →* FutureOr<asy::Future<core::List<core::int*>*>*>*, {onError: core::Function*}) →* asy::Future<asy::Future<core::List<core::int*>*>*>*};
-  asy::Future<core::List<core::int*>*>* y = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
+      /*@returnType=FutureOr<Future<List<int>>>*/ (/*@type=int*/ x) => /*@typeArgs=dynamic*/ []);
+                                                                                             ^" in <dynamic>[] as{TypeError,ForNonNullableByDefault} FutureOr<asy::Future<core::List<core::int>>>){((core::int) → FutureOr<asy::Future<core::List<core::int>>>, {onError: core::Function?}) → asy::Future<asy::Future<core::List<core::int>>>};
+  asy::Future<core::List<core::int>> y = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
  - 'Future' is from 'dart:async'.
  - 'List' is from 'dart:core'.
   Future<List<int>> y = x;
-                        ^" in x as{TypeError} asy::Future<core::List<core::int*>*>*;
+                        ^" in x as{TypeError,ForNonNullableByDefault} asy::Future<core::List<core::int>>;
 }
-static method m2() → dynamic {
-  asy::Future<core::int*>* f;
-  asy::Future<core::List<core::int*>*>* x = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => <core::int*>[]){((core::int*) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-  asy::Future<core::List<core::int*>*>* y = x;
+static method m2(asy::Future<core::int> f) → dynamic {
+  asy::Future<core::List<core::int>> x = f.{asy::Future::then}<core::List<core::int>>((core::int x) → core::List<core::int> => <core::int>[]){((core::int) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+  asy::Future<core::List<core::int>> y = x;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.modular.expect
index 668e6c8..ed4f3ff 100644
--- a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:99: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'FutureOr<Future<List<int>>>'.
+// pkg/front_end/testcases/inference/future_then_explicit_future.dart:14:94: Error: A value of type 'List<dynamic>' can't be returned from a function with return type 'FutureOr<Future<List<int>>>'.
 //  - 'List' is from 'dart:core'.
 //  - 'Future' is from 'dart:async'.
-//       /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
-//                                                                                                   ^
+//       /*@returnType=FutureOr<Future<List<int>>>*/ (/*@type=int*/ x) => /*@typeArgs=dynamic*/ []);
+//                                                                                              ^
 //
-// pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
+// pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
 //  - 'Future' is from 'dart:async'.
 //  - 'List' is from 'dart:core'.
 //   Future<List<int>> y = x;
@@ -20,22 +20,20 @@
 
 import "dart:async";
 
-static method m1() → dynamic {
-  asy::Future<core::int*>* f;
-  asy::Future<asy::Future<core::List<core::int*>*>*>* x = f.{asy::Future::then}<asy::Future<core::List<core::int*>*>*>((core::int* x) → FutureOr<asy::Future<core::List<core::int*>*>*>* => invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:99: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'FutureOr<Future<List<int>>>'.
+static method m1(asy::Future<core::int> f) → dynamic {
+  asy::Future<asy::Future<core::List<core::int>>> x = f.{asy::Future::then}<asy::Future<core::List<core::int>>>((core::int x) → FutureOr<asy::Future<core::List<core::int>>> => invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:14:94: Error: A value of type 'List<dynamic>' can't be returned from a function with return type 'FutureOr<Future<List<int>>>'.
  - 'List' is from 'dart:core'.
  - 'Future' is from 'dart:async'.
-      /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
-                                                                                                  ^" in <dynamic>[] as{TypeError} FutureOr<asy::Future<core::List<core::int*>*>*>*){((core::int*) →* FutureOr<asy::Future<core::List<core::int*>*>*>*, {onError: core::Function*}) →* asy::Future<asy::Future<core::List<core::int*>*>*>*};
-  asy::Future<core::List<core::int*>*>* y = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
+      /*@returnType=FutureOr<Future<List<int>>>*/ (/*@type=int*/ x) => /*@typeArgs=dynamic*/ []);
+                                                                                             ^" in <dynamic>[] as{TypeError,ForNonNullableByDefault} FutureOr<asy::Future<core::List<core::int>>>){((core::int) → FutureOr<asy::Future<core::List<core::int>>>, {onError: core::Function?}) → asy::Future<asy::Future<core::List<core::int>>>};
+  asy::Future<core::List<core::int>> y = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
  - 'Future' is from 'dart:async'.
  - 'List' is from 'dart:core'.
   Future<List<int>> y = x;
-                        ^" in x as{TypeError} asy::Future<core::List<core::int*>*>*;
+                        ^" in x as{TypeError,ForNonNullableByDefault} asy::Future<core::List<core::int>>;
 }
-static method m2() → dynamic {
-  asy::Future<core::int*>* f;
-  asy::Future<core::List<core::int*>*>* x = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => <core::int*>[]){((core::int*) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-  asy::Future<core::List<core::int*>*>* y = x;
+static method m2(asy::Future<core::int> f) → dynamic {
+  asy::Future<core::List<core::int>> x = f.{asy::Future::then}<core::List<core::int>>((core::int x) → core::List<core::int> => <core::int>[]){((core::int) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+  asy::Future<core::List<core::int>> y = x;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.outline.expect
index 9513bdf..f4588e7 100644
--- a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.outline.expect
@@ -1,11 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
 
 import "dart:async";
 
-static method m1() → dynamic
+static method m1(asy::Future<core::int> f) → dynamic
   ;
-static method m2() → dynamic
+static method m2(asy::Future<core::int> f) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.transformed.expect
index 7fb1fa7..d632b1f 100644
--- a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:99: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'FutureOr<Future<List<int>>>'.
+// pkg/front_end/testcases/inference/future_then_explicit_future.dart:14:94: Error: A value of type 'List<dynamic>' can't be returned from a function with return type 'FutureOr<Future<List<int>>>'.
 //  - 'List' is from 'dart:core'.
 //  - 'Future' is from 'dart:async'.
-//       /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
-//                                                                                                   ^
+//       /*@returnType=FutureOr<Future<List<int>>>*/ (/*@type=int*/ x) => /*@typeArgs=dynamic*/ []);
+//                                                                                              ^
 //
-// pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
+// pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
 //  - 'Future' is from 'dart:async'.
 //  - 'List' is from 'dart:core'.
 //   Future<List<int>> y = x;
@@ -20,22 +20,20 @@
 
 import "dart:async";
 
-static method m1() → dynamic {
-  asy::Future<core::int*>* f;
-  asy::Future<asy::Future<core::List<core::int*>*>*>* x = f.{asy::Future::then}<asy::Future<core::List<core::int*>*>*>((core::int* x) → FutureOr<asy::Future<core::List<core::int*>*>*>* => invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:99: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'FutureOr<Future<List<int>>>'.
+static method m1(asy::Future<core::int> f) → dynamic {
+  asy::Future<asy::Future<core::List<core::int>>> x = f.{asy::Future::then}<asy::Future<core::List<core::int>>>((core::int x) → FutureOr<asy::Future<core::List<core::int>>> => invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:14:94: Error: A value of type 'List<dynamic>' can't be returned from a function with return type 'FutureOr<Future<List<int>>>'.
  - 'List' is from 'dart:core'.
  - 'Future' is from 'dart:async'.
-      /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
-                                                                                                  ^" in core::_GrowableList::•<dynamic>(0) as{TypeError} FutureOr<asy::Future<core::List<core::int*>*>*>*){((core::int*) →* FutureOr<asy::Future<core::List<core::int*>*>*>*, {onError: core::Function*}) →* asy::Future<asy::Future<core::List<core::int*>*>*>*};
-  asy::Future<core::List<core::int*>*>* y = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
+      /*@returnType=FutureOr<Future<List<int>>>*/ (/*@type=int*/ x) => /*@typeArgs=dynamic*/ []);
+                                                                                             ^" in core::_GrowableList::•<dynamic>(0) as{TypeError,ForNonNullableByDefault} FutureOr<asy::Future<core::List<core::int>>>){((core::int) → FutureOr<asy::Future<core::List<core::int>>>, {onError: core::Function?}) → asy::Future<asy::Future<core::List<core::int>>>};
+  asy::Future<core::List<core::int>> y = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
  - 'Future' is from 'dart:async'.
  - 'List' is from 'dart:core'.
   Future<List<int>> y = x;
-                        ^" in x as{TypeError} asy::Future<core::List<core::int*>*>*;
+                        ^" in x as{TypeError,ForNonNullableByDefault} asy::Future<core::List<core::int>>;
 }
-static method m2() → dynamic {
-  asy::Future<core::int*>* f;
-  asy::Future<core::List<core::int*>*>* x = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => core::_GrowableList::•<core::int*>(0)){((core::int*) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-  asy::Future<core::List<core::int*>*>* y = x;
+static method m2(asy::Future<core::int> f) → dynamic {
+  asy::Future<core::List<core::int>> x = f.{asy::Future::then}<core::List<core::int>>((core::int x) → core::List<core::int> => core::_GrowableList::•<core::int>(0)){((core::int) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+  asy::Future<core::List<core::int>> y = x;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart b/pkg/front_end/testcases/inference/future_then_ifNull.dart
index 5b67f07..f515739 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
index 174999b..e4f06ff 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
@@ -39,17 +39,17 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_ifNull.dart:12:7 -> SymbolConstant(#onTimeout)
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull2.dart b/pkg/front_end/testcases/inference/future_then_ifNull2.dart
new file mode 100644
index 0000000..7a12612
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_ifNull2.dart
@@ -0,0 +1,35 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(MyFuture<int> f) {
+  Future<int> t1 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=int*/ x) async =>
+          x ?? await new Future<int>.value(3));
+  Future<int> t2 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=Future<int>*/ (/*@type=int*/ x) async {
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ?? new Future<int>.value(3);
+  });
+  Future<int> t5 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*error:INVALID_CAST_FUNCTION_EXPR*/
+      /*@returnType=FutureOr<int>*/ (/*@type=int*/ x) =>
+          x ?? new Future<int>.value(3));
+  Future<int> t6 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+      /*@returnType=FutureOr<int>*/ (/*@type=int*/ x) {
+    return /*info:DOWN_CAST_COMPOSITE*/ x ?? new Future<int>.value(3);
+  });
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_ifNull2.dart.textual_outline.expect
new file mode 100644
index 0000000..10317b5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_ifNull2.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+void test(MyFuture<int> f) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_ifNull2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b68784f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_ifNull2.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(T x) {}
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+  dynamic noSuchMethod(invocation) => null;
+}
+
+main() {}
+void test(MyFuture<int> f) {}
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_ifNull2.dart.weak.expect
new file mode 100644
index 0000000..12108cf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_ifNull2.dart.weak.expect
@@ -0,0 +1,94 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:20:11: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//           x ?? await new Future<int>.value(3));
+//           ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:23:41: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ?? new Future<int>.value(3);
+//                                         ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ?? new Future<int>.value(3);
+//                                                 ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:28:11: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//           x ?? new Future<int>.value(3));
+//           ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ?? new Future<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:31:41: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ?? new Future<int>.value(3);
+//                                         ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ?? new Future<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::int> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::int x) → asy::Future<core::int> async /* futureValueType= core::int */ => let final core::int #t1 = x in #t1 == null ?{core::int} await asy::Future::value<core::int>(3) : #t1){((core::int) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::int x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_ifNull2.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ?? new Future<int>.value(3);
+                                                ^" in (let final core::int #t2 = await x in #t2 == null ?{core::Object} asy::Future::value<core::int>(3) : #t2) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::int) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::int x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_ifNull2.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ?? new Future<int>.value(3));
+            ^" in (let final core::int #t3 = x in #t3 == null ?{core::Object} asy::Future::value<core::int>(3) : #t3) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::int) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::int x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_ifNull2.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ?? new Future<int>.value(3);
+                                          ^" in (let final core::int #t4 = x in #t4 == null ?{core::Object} asy::Future::value<core::int>(3) : #t4) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::int) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_ifNull2.dart.weak.modular.expect
new file mode 100644
index 0000000..12108cf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_ifNull2.dart.weak.modular.expect
@@ -0,0 +1,94 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:20:11: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//           x ?? await new Future<int>.value(3));
+//           ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:23:41: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ?? new Future<int>.value(3);
+//                                         ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ?? new Future<int>.value(3);
+//                                                 ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:28:11: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//           x ?? new Future<int>.value(3));
+//           ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ?? new Future<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:31:41: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ?? new Future<int>.value(3);
+//                                         ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ?? new Future<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::int> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::int x) → asy::Future<core::int> async /* futureValueType= core::int */ => let final core::int #t1 = x in #t1 == null ?{core::int} await asy::Future::value<core::int>(3) : #t1){((core::int) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::int x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_ifNull2.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ?? new Future<int>.value(3);
+                                                ^" in (let final core::int #t2 = await x in #t2 == null ?{core::Object} asy::Future::value<core::int>(3) : #t2) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::int) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::int x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_ifNull2.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ?? new Future<int>.value(3));
+            ^" in (let final core::int #t3 = x in #t3 == null ?{core::Object} asy::Future::value<core::int>(3) : #t3) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::int) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::int x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_ifNull2.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ?? new Future<int>.value(3);
+                                          ^" in (let final core::int #t4 = x in #t4 == null ?{core::Object} asy::Future::value<core::int>(3) : #t4) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::int) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_ifNull2.dart.weak.outline.expect
new file mode 100644
index 0000000..d4975b57
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_ifNull2.dart.weak.outline.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    ;
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → 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}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::int> f) → void
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
+Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_ifNull2.dart.weak.transformed.expect
new file mode 100644
index 0000000..68c0668
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_ifNull2.dart.weak.transformed.expect
@@ -0,0 +1,94 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:20:11: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//           x ?? await new Future<int>.value(3));
+//           ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:23:41: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ?? new Future<int>.value(3);
+//                                         ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ await x ?? new Future<int>.value(3);
+//                                                 ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:28:11: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//           x ?? new Future<int>.value(3));
+//           ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//           x ?? new Future<int>.value(3));
+//             ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:31:41: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ?? new Future<int>.value(3);
+//                                         ^
+//
+// pkg/front_end/testcases/inference/future_then_ifNull2.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+//  - 'Object' is from 'dart:core'.
+//     return /*info:DOWN_CAST_COMPOSITE*/ x ?? new Future<int>.value(3);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method test(self::MyFuture<core::int> f) → void {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((core::int x) → asy::Future<core::int> async /* futureValueType= core::int */ => let final core::int #t1 = x in #t1 == null ?{core::int} await asy::Future::value<core::int>(3) : #t1){((core::int) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((core::int x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_ifNull2.dart:23:49: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    return /*info:DOWN_CAST_COMPOSITE*/ await x ?? new Future<int>.value(3);
+                                                ^" in (let final core::int #t2 = await x in #t2 == null ?{core::Object} asy::Future::value<core::int>(3) : #t2) as{TypeError,ForNonNullableByDefault} core::int;
+  }){((core::int) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((core::int x) → FutureOr<core::int> => invalid-expression "pkg/front_end/testcases/inference/future_then_ifNull2.dart:28:13: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+          x ?? new Future<int>.value(3));
+            ^" in (let final core::int #t3 = x in #t3 == null ?{core::Object} asy::Future::value<core::int>(3) : #t3) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>){((core::int) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((core::int x) → FutureOr<core::int> {
+    return invalid-expression "pkg/front_end/testcases/inference/future_then_ifNull2.dart:31:43: Error: A value of type 'Object' can't be returned from a function with return type 'FutureOr<int>'.
+ - 'Object' is from 'dart:core'.
+    return /*info:DOWN_CAST_COMPOSITE*/ x ?? new Future<int>.value(3);
+                                          ^" in (let final core::int #t4 = x in #t4 == null ?{core::Object} asy::Future::value<core::int>(3) : #t4) as{TypeError,ForNonNullableByDefault} FutureOr<core::int>;
+  }){((core::int) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart b/pkg/front_end/testcases/inference/future_then_upwards.dart
index 4b7c23e..34fb8c4 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,20 +11,20 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void main() {
-  var /*@ type=MyFuture<double*>* */ f =
-      foo(). /*@ typeArgs=double* */ /*@target=MyFuture.then*/ then(
-          /*@ returnType=double* */ (/*@ type=dynamic */ _) => 2.3);
+void test() {
+  var /*@type=MyFuture<double>*/ f = foo()
+      . /*@typeArgs=double*/ /*@target=MyFuture.then*/ then(
+          /*@returnType=double*/ (/*@ type=dynamic */ _) => 2.3);
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
 
   // The unnecessary cast is to illustrate that we inferred <double> for
   // the generic type args, even though we had a return type context.
   Future<num> f3 = /*info:UNNECESSARY_CAST*/ foo()
-          . /*@ typeArgs=double* */ /*@target=MyFuture.then*/ then(
-              /*@ returnType=double* */ (/*@ type=dynamic */ _) => 2.3)
+          . /*@typeArgs=double*/ /*@target=MyFuture.then*/ then(
+              /*@returnType=double*/ (/*@ type=dynamic */ _) => 2.3)
       as Future<double>;
 }
 
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.textual_outline.expect
index 1612af2..750b63f 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,8 +6,8 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void main() {}
+void test() {}
 MyFuture foo() => new MyFuture<int>.value(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.textual_outline_modelled.expect
index 4bd869a..851ea4e 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -8,8 +7,8 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(T x) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
-void main() {}
+void test() {}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
index ac37ff3..c54b258 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,44 +14,35 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
-  asy::Future<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
+static method test() → void {
+  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
+  asy::Future<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards.dart'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                ^" in f as{TypeError} asy::Future<core::int*>*;
-  asy::Future<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*} as asy::Future<core::double*>*;
+                                                ^" in f as{TypeError,ForNonNullableByDefault} asy::Future<core::int>;
+  asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as{ForNonNullableByDefault} asy::Future<core::double>;
 }
-static method foo() → self::MyFuture<dynamic>*
-  return new self::MyFuture::value<core::int*>(1);
+static method foo() → self::MyFuture<dynamic>
+  return new self::MyFuture::value<core::int>(1);
 
 constants  {
   #C1 = null
@@ -60,8 +51,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.modular.expect
index ac37ff3..c54b258 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,44 +14,35 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
-  asy::Future<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
+static method test() → void {
+  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
+  asy::Future<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards.dart'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                ^" in f as{TypeError} asy::Future<core::int*>*;
-  asy::Future<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*} as asy::Future<core::double*>*;
+                                                ^" in f as{TypeError,ForNonNullableByDefault} asy::Future<core::int>;
+  asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as{ForNonNullableByDefault} asy::Future<core::double>;
 }
-static method foo() → self::MyFuture<dynamic>*
-  return new self::MyFuture::value<core::int*>(1);
+static method foo() → self::MyFuture<dynamic>
+  return new self::MyFuture::value<core::int>(1);
 
 constants  {
   #C1 = null
@@ -60,8 +51,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
index 2f7fa11..95a470d 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
@@ -1,55 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method main() → void
+static method test() → void
   ;
-static method foo() → self::MyFuture<dynamic>*
+static method foo() → self::MyFuture<dynamic>
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
index 2303412..0df67f2 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,44 +14,35 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
-  asy::Future<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
+static method test() → void {
+  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
+  asy::Future<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards.dart'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                ^" in f as{TypeError} asy::Future<core::int*>*;
-  asy::Future<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
+                                                ^" in f as{TypeError,ForNonNullableByDefault} asy::Future<core::int>;
+  asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
 }
-static method foo() → self::MyFuture<dynamic>*
-  return new self::MyFuture::value<core::int*>(1);
+static method foo() → self::MyFuture<dynamic>
+  return new self::MyFuture::value<core::int>(1);
 
 constants  {
   #C1 = null
@@ -60,8 +51,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart b/pkg/front_end/testcases/inference/future_then_upwards_2.dart
index 42ecaf7..7903783 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,20 +11,20 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void main() {
-  var /*@ type=MyFuture<double*>* */ f =
-      foo(). /*@ typeArgs=double* */ /*@target=MyFuture.then*/ then(
-          /*@ returnType=double* */ (/*@ type=dynamic */ _) => 2.3);
+void test() {
+  var /*@type=MyFuture<double>*/ f =
+      foo(). /*@typeArgs=double*/ /*@target=MyFuture.then*/ then(
+          /*@returnType=double*/ (/*@ type=dynamic */ _) => 2.3);
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
 
   // The unnecessary cast is to illustrate that we inferred <double> for
   // the generic type args, even though we had a return type context.
   MyFuture<num> f3 = /*info:UNNECESSARY_CAST*/ foo()
-          . /*@ typeArgs=double* */ /*@target=MyFuture.then*/ then(
-              /*@ returnType=double* */ (/*@ type=dynamic */ _) => 2.3)
+          . /*@typeArgs=double*/ /*@target=MyFuture.then*/ then(
+              /*@returnType=double*/ (/*@ type=dynamic */ _) => 2.3)
       as MyFuture<double>;
 }
 
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.textual_outline.expect
index 1612af2..750b63f 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,8 +6,8 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-void main() {}
+void test() {}
 MyFuture foo() => new MyFuture<int>.value(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.textual_outline_modelled.expect
index 4bd869a..851ea4e 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -8,8 +7,8 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(T x) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
-void main() {}
+void test() {}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
index e071ff7..cdc2635 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,43 +13,34 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
-  self::MyFuture<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
+static method test() → void {
+  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
+  self::MyFuture<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards_2.dart'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                  ^" in f as{TypeError} self::MyFuture<core::int*>*;
-  self::MyFuture<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*} as self::MyFuture<core::double*>*;
+                                                  ^" in f as{TypeError,ForNonNullableByDefault} self::MyFuture<core::int>;
+  self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as{ForNonNullableByDefault} self::MyFuture<core::double>;
 }
-static method foo() → self::MyFuture<dynamic>*
-  return new self::MyFuture::value<core::int*>(1);
+static method foo() → self::MyFuture<dynamic>
+  return new self::MyFuture::value<core::int>(1);
 
 constants  {
   #C1 = null
@@ -58,8 +49,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.modular.expect
index e071ff7..cdc2635 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,43 +13,34 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
-  self::MyFuture<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
+static method test() → void {
+  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
+  self::MyFuture<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards_2.dart'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                  ^" in f as{TypeError} self::MyFuture<core::int*>*;
-  self::MyFuture<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*} as self::MyFuture<core::double*>*;
+                                                  ^" in f as{TypeError,ForNonNullableByDefault} self::MyFuture<core::int>;
+  self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as{ForNonNullableByDefault} self::MyFuture<core::double>;
 }
-static method foo() → self::MyFuture<dynamic>*
-  return new self::MyFuture::value<core::int*>(1);
+static method foo() → self::MyFuture<dynamic>
+  return new self::MyFuture::value<core::int>(1);
 
 constants  {
   #C1 = null
@@ -58,8 +49,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
index d1dd603..95a470d 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
@@ -1,55 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static method main() → void
+static method test() → void
   ;
-static method foo() → self::MyFuture<dynamic>*
+static method foo() → self::MyFuture<dynamic>
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_2.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
index 085b108..97e9554 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,43 +13,34 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
-  self::MyFuture<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
+static method test() → void {
+  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
+  self::MyFuture<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards_2.dart'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                  ^" in f as{TypeError} self::MyFuture<core::int*>*;
-  self::MyFuture<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
+                                                  ^" in f as{TypeError,ForNonNullableByDefault} self::MyFuture<core::int>;
+  self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
 }
-static method foo() → self::MyFuture<dynamic>*
-  return new self::MyFuture::value<core::int*>(1);
+static method foo() → self::MyFuture<dynamic>
+  return new self::MyFuture::value<core::int>(1);
 
 constants  {
   #C1 = null
@@ -58,8 +49,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart b/pkg/front_end/testcases/inference/future_then_upwards_3.dart
index 4656c30..09a7239 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,20 +11,20 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
 void test() {
-  var /*@ type=Future<double*>* */ f =
-      foo(). /*@ typeArgs=double* */ /*@target=Future.then*/ then(
-          /*@ returnType=double* */ (/*@ type=dynamic */ _) => 2.3);
+  var /*@type=Future<double>*/ f =
+      foo(). /*@typeArgs=double*/ /*@target=Future.then*/ then(
+          /*@returnType=double*/ (/*@ type=dynamic */ _) => 2.3);
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
 
   // The unnecessary cast is to illustrate that we inferred <double> for
   // the generic type args, even though we had a return type context.
   Future<num> f3 = /*info:UNNECESSARY_CAST*/ foo()
-          . /*@ typeArgs=double* */ /*@target=Future.then*/ then(
-              /*@ returnType=double* */ (/*@ type=dynamic */ _) => 2.3)
+          . /*@typeArgs=double*/ /*@target=Future.then*/ then(
+              /*@returnType=double*/ (/*@ type=dynamic */ _) => 2.3)
       as Future<double>;
 }
 
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.textual_outline.expect
index 1377a7b..7dbb7a2 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,7 +6,7 @@
   MyFuture() {}
   MyFuture.value(T x) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
 void test() {}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.textual_outline_modelled.expect
index 493f90d..6222e95 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -8,7 +7,7 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(T x) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
index c45ca17..eda2025 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,43 +13,34 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*};
-  asy::Future<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
+  asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>};
+  asy::Future<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                ^" in f as{TypeError} asy::Future<core::int*>*;
-  asy::Future<core::num*>* f3 = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*} as asy::Future<core::double*>*;
+                                                ^" in f as{TypeError,ForNonNullableByDefault} asy::Future<core::int>;
+  asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>} as{ForNonNullableByDefault} asy::Future<core::double>;
 }
-static method foo() → asy::Future<dynamic>*
-  return asy::Future::value<core::int*>(1);
+static method foo() → asy::Future<dynamic>
+  return asy::Future::value<core::int>(1);
 static method main() → dynamic {}
 
 constants  {
@@ -59,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.modular.expect
index c45ca17..eda2025 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,43 +13,34 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*};
-  asy::Future<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
+  asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>};
+  asy::Future<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                ^" in f as{TypeError} asy::Future<core::int*>*;
-  asy::Future<core::num*>* f3 = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*} as asy::Future<core::double*>*;
+                                                ^" in f as{TypeError,ForNonNullableByDefault} asy::Future<core::int>;
+  asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>} as{ForNonNullableByDefault} asy::Future<core::double>;
 }
-static method foo() → asy::Future<dynamic>*
-  return asy::Future::value<core::int*>(1);
+static method foo() → asy::Future<dynamic>
+  return asy::Future::value<core::int>(1);
 static method main() → dynamic {}
 
 constants  {
@@ -59,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
index 1d10649..cf476b4 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
@@ -1,57 +1,48 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
 static method test() → void
   ;
-static method foo() → asy::Future<dynamic>*
+static method foo() → asy::Future<dynamic>
   ;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_then_upwards_3.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
index 9c5d495..79b6308 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,43 +13,34 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+  constructor value(self::MyFuture::T% x) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*};
-  asy::Future<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
+  asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>};
+  asy::Future<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                ^" in f as{TypeError} asy::Future<core::int*>*;
-  asy::Future<core::num*>* f3 = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*};
+                                                ^" in f as{TypeError,ForNonNullableByDefault} asy::Future<core::int>;
+  asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>};
 }
-static method foo() → asy::Future<dynamic>*
-  return asy::Future::value<core::int*>(1);
+static method foo() → asy::Future<dynamic>
+  return asy::Future::value<core::int>(1);
 static method main() → dynamic {}
 
 constants  {
@@ -59,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart
index 7ac9156..c6017bc 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart
+++ b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart
@@ -1,22 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-test() {
-  Future<int> base;
-  var /*@ type=Future<bool*>* */ f =
-      base. /*@ typeArgs=bool* */ /*@target=Future.then*/ then(
-          /*@ returnType=bool* */ (/*@ type=int* */ x) {
+test(Future<int> base) {
+  var /*@type=Future<bool>*/ f =
+      base. /*@typeArgs=bool*/ /*@target=Future.then*/ then(
+          /*@returnType=bool*/ (/*@type=int*/ x) {
     return x /*@target=num.==*/ == 0;
   });
-  var /*@ type=Future<bool*>* */ g =
-      base. /*@ typeArgs=bool* */ /*@target=Future.then*/ then(
-          /*@ returnType=bool* */ (/*@ type=int* */ x) => x /*@target=num.==*/ == 0);
+  var /*@type=Future<bool>*/ g =
+      base. /*@typeArgs=bool*/ /*@target=Future.then*/ then(
+          /*@returnType=bool*/ (/*@type=int*/ x) => x /*@target=num.==*/ == 0);
   Future<bool> b = f;
   b = g;
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.textual_outline.expect
index a760906..20dfeba 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-test() {}
+test(Future<int> base) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.textual_outline_modelled.expect
index d817d9d..49fb529 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
 main() {}
-test() {}
+test(Future<int> base) {}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.expect
index 3acce35..3053e5a 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.expect
@@ -1,17 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method test() → dynamic {
-  asy::Future<core::int*>* base;
-  asy::Future<core::bool*>* f = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* {
-    return x =={core::num::==}{(core::Object*) →* core::bool*} 0;
-  }){((core::int*) →* FutureOr<core::bool*>*, {onError: core::Function*}) →* asy::Future<core::bool*>*};
-  asy::Future<core::bool*>* g = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* => x =={core::num::==}{(core::Object*) →* core::bool*} 0){((core::int*) →* FutureOr<core::bool*>*, {onError: core::Function*}) →* asy::Future<core::bool*>*};
-  asy::Future<core::bool*>* b = f;
+static method test(asy::Future<core::int> base) → dynamic {
+  asy::Future<core::bool> f = base.{asy::Future::then}<core::bool>((core::int x) → core::bool {
+    return x =={core::num::==}{(core::Object) → core::bool} 0;
+  }){((core::int) → FutureOr<core::bool>, {onError: core::Function?}) → asy::Future<core::bool>};
+  asy::Future<core::bool> g = base.{asy::Future::then}<core::bool>((core::int x) → core::bool => x =={core::num::==}{(core::Object) → core::bool} 0){((core::int) → FutureOr<core::bool>, {onError: core::Function?}) → asy::Future<core::bool>};
+  asy::Future<core::bool> b = f;
   b = g;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.modular.expect
index 3acce35..3053e5a 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.modular.expect
@@ -1,17 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method test() → dynamic {
-  asy::Future<core::int*>* base;
-  asy::Future<core::bool*>* f = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* {
-    return x =={core::num::==}{(core::Object*) →* core::bool*} 0;
-  }){((core::int*) →* FutureOr<core::bool*>*, {onError: core::Function*}) →* asy::Future<core::bool*>*};
-  asy::Future<core::bool*>* g = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* => x =={core::num::==}{(core::Object*) →* core::bool*} 0){((core::int*) →* FutureOr<core::bool*>*, {onError: core::Function*}) →* asy::Future<core::bool*>*};
-  asy::Future<core::bool*>* b = f;
+static method test(asy::Future<core::int> base) → dynamic {
+  asy::Future<core::bool> f = base.{asy::Future::then}<core::bool>((core::int x) → core::bool {
+    return x =={core::num::==}{(core::Object) → core::bool} 0;
+  }){((core::int) → FutureOr<core::bool>, {onError: core::Function?}) → asy::Future<core::bool>};
+  asy::Future<core::bool> g = base.{asy::Future::then}<core::bool>((core::int x) → core::bool => x =={core::num::==}{(core::Object) → core::bool} 0){((core::int) → FutureOr<core::bool>, {onError: core::Function?}) → asy::Future<core::bool>};
+  asy::Future<core::bool> b = f;
   b = g;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.outline.expect
index 666bc54..250af19 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.outline.expect
@@ -1,9 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
 
 import "dart:async";
 
-static method test() → dynamic
+static method test(asy::Future<core::int> base) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.transformed.expect
index 3acce35..3053e5a 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.transformed.expect
@@ -1,17 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method test() → dynamic {
-  asy::Future<core::int*>* base;
-  asy::Future<core::bool*>* f = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* {
-    return x =={core::num::==}{(core::Object*) →* core::bool*} 0;
-  }){((core::int*) →* FutureOr<core::bool*>*, {onError: core::Function*}) →* asy::Future<core::bool*>*};
-  asy::Future<core::bool*>* g = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* => x =={core::num::==}{(core::Object*) →* core::bool*} 0){((core::int*) →* FutureOr<core::bool*>*, {onError: core::Function*}) →* asy::Future<core::bool*>*};
-  asy::Future<core::bool*>* b = f;
+static method test(asy::Future<core::int> base) → dynamic {
+  asy::Future<core::bool> f = base.{asy::Future::then}<core::bool>((core::int x) → core::bool {
+    return x =={core::num::==}{(core::Object) → core::bool} 0;
+  }){((core::int) → FutureOr<core::bool>, {onError: core::Function?}) → asy::Future<core::bool>};
+  asy::Future<core::bool> g = base.{asy::Future::then}<core::bool>((core::int x) → core::bool => x =={core::num::==}{(core::Object) → core::bool} 0){((core::int) → FutureOr<core::bool>, {onError: core::Function?}) → asy::Future<core::bool>};
+  asy::Future<core::bool> b = f;
   b = g;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart b/pkg/front_end/testcases/inference/future_union_async_conditional.dart
index dc5a718..17c5293 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
index 41c31af..d33ff83 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
@@ -43,17 +43,17 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional.dart:12:7 -> SymbolConstant(#onTimeout)
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional2.dart b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart
new file mode 100644
index 0000000..1c50d10
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart
@@ -0,0 +1,31 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+Future<int> g1(bool x) async {
+  return /*info:DOWN_CAST_COMPOSITE*/ x
+      ? 42
+      : new /*@typeArgs=int*/ Future.value(42);
+}
+
+Future<int> g2(bool x) async => /*info:DOWN_CAST_COMPOSITE*/ x
+    ? 42
+    : new /*@typeArgs=int*/ Future.value(42);
+Future<int> g3(bool x) async {
+  var /*@type=Object*/ y = x ? 42 : new /*@typeArgs=int*/ Future.value(42);
+  return /*info:DOWN_CAST_COMPOSITE*/ y;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.textual_outline.expect
new file mode 100644
index 0000000..58c2107
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+Future<int> g1(bool x) async {}
+Future<int> g2(bool x) async => x ? 42 : new Future.value(42);
+Future<int> g3(bool x) async {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..dd143b4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+library test;
+
+import 'dart:async';
+
+Future<int> g1(bool x) async {}
+Future<int> g2(bool x) async => x ? 42 : new Future.value(42);
+Future<int> g3(bool x) async {}
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(x) {}
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+  dynamic noSuchMethod(invocation) => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.weak.expect
new file mode 100644
index 0000000..06325b8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.weak.expect
@@ -0,0 +1,81 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional2.dart:19:7: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//       ? 42
+//       ^
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional2.dart:24:5: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     ? 42
+//     ^
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional2.dart:28:39: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//   return /*info:DOWN_CAST_COMPOSITE*/ y;
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(dynamic x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method g1(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional2.dart:19:7: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+      ? 42
+      ^" in (x ?{core::Object} 42 : asy::Future::value<core::int>(42)) as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method g2(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ 
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional2.dart:24:5: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    ? 42
+    ^" in (x ?{core::Object} 42 : asy::Future::value<core::int>(42)) as{TypeError,ForNonNullableByDefault} core::int;
+static method g3(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  core::Object y = x ?{core::Object} 42 : asy::Future::value<core::int>(42);
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional2.dart:28:39: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+  return /*info:DOWN_CAST_COMPOSITE*/ y;
+                                      ^" in y as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.weak.modular.expect
new file mode 100644
index 0000000..06325b8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.weak.modular.expect
@@ -0,0 +1,81 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional2.dart:19:7: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//       ? 42
+//       ^
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional2.dart:24:5: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     ? 42
+//     ^
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional2.dart:28:39: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//   return /*info:DOWN_CAST_COMPOSITE*/ y;
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(dynamic x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method g1(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional2.dart:19:7: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+      ? 42
+      ^" in (x ?{core::Object} 42 : asy::Future::value<core::int>(42)) as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method g2(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ 
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional2.dart:24:5: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    ? 42
+    ^" in (x ?{core::Object} 42 : asy::Future::value<core::int>(42)) as{TypeError,ForNonNullableByDefault} core::int;
+static method g3(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  core::Object y = x ?{core::Object} 42 : asy::Future::value<core::int>(42);
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional2.dart:28:39: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+  return /*info:DOWN_CAST_COMPOSITE*/ y;
+                                      ^" in y as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.weak.outline.expect
new file mode 100644
index 0000000..1340fd2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.weak.outline.expect
@@ -0,0 +1,50 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    ;
+  constructor value(dynamic x) → self::MyFuture<self::MyFuture::T%>
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → 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}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method g1(core::bool x) → asy::Future<core::int> async 
+  ;
+static method g2(core::bool x) → asy::Future<core::int> async 
+  ;
+static method g3(core::bool x) → asy::Future<core::int> async 
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
+Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.weak.transformed.expect
new file mode 100644
index 0000000..069d3a0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional2.dart.weak.transformed.expect
@@ -0,0 +1,81 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional2.dart:19:7: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//       ? 42
+//       ^
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional2.dart:24:5: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     ? 42
+//     ^
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional2.dart:28:39: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//   return /*info:DOWN_CAST_COMPOSITE*/ y;
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(dynamic x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method g1(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional2.dart:19:7: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+      ? 42
+      ^" in (x ?{core::Object} 42 : asy::Future::value<core::int>(42)) as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method g2(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ 
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional2.dart:24:5: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    ? 42
+    ^" in (x ?{core::Object} 42 : asy::Future::value<core::int>(42)) as{TypeError,ForNonNullableByDefault} core::int;
+static method g3(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  core::Object y = x ?{core::Object} 42 : asy::Future::value<core::int>(42);
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional2.dart:28:39: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+  return /*info:DOWN_CAST_COMPOSITE*/ y;
+                                      ^" in y as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart
index d2765f85..a4102dd 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
index 0b1b385..f5ce356 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
@@ -43,17 +43,17 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_async_conditional_2.dart:12:7 -> SymbolConstant(#onTimeout)
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart
new file mode 100644
index 0000000..0c9ae69
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart
@@ -0,0 +1,32 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+Future<int> g1(bool x) async {
+  return /*info:DOWN_CAST_COMPOSITE*/ x
+      ? 42
+      : new /*@typeArgs=int*/ MyFuture.value(42);
+}
+
+Future<int> g2(bool x) async => /*info:DOWN_CAST_COMPOSITE*/ x
+    ? 42
+    : new /*@typeArgs=int*/ MyFuture.value(42);
+Future<int> g3(bool x) async {
+  var /*@type=Object*/ y =
+      x ? 42 : new /*@ typeArgs=dynamic */ MyFuture.value(42);
+  return /*info:DOWN_CAST_COMPOSITE*/ y;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.textual_outline.expect
new file mode 100644
index 0000000..4f4640c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+library test;
+
+import 'dart:async';
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(x) {}
+  dynamic noSuchMethod(invocation) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+}
+
+Future<int> g1(bool x) async {}
+Future<int> g2(bool x) async => x ? 42 : new MyFuture.value(42);
+Future<int> g3(bool x) async {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..98afcf1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+library test;
+
+import 'dart:async';
+
+Future<int> g1(bool x) async {}
+Future<int> g2(bool x) async => x ? 42 : new MyFuture.value(42);
+Future<int> g3(bool x) async {}
+
+class MyFuture<T> implements Future<T> {
+  MyFuture() {}
+  MyFuture.value(x) {}
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
+  dynamic noSuchMethod(invocation) => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.weak.expect
new file mode 100644
index 0000000..75d79fb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.weak.expect
@@ -0,0 +1,81 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:19:7: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//       ? 42
+//       ^
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:24:5: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     ? 42
+//     ^
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:29:39: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//   return /*info:DOWN_CAST_COMPOSITE*/ y;
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(dynamic x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method g1(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:19:7: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+      ? 42
+      ^" in (x ?{core::Object} 42 : new self::MyFuture::value<core::int>(42)) as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method g2(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ 
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:24:5: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    ? 42
+    ^" in (x ?{core::Object} 42 : new self::MyFuture::value<core::int>(42)) as{TypeError,ForNonNullableByDefault} core::int;
+static method g3(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  core::Object y = x ?{core::Object} 42 : new self::MyFuture::value<dynamic>(42);
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:29:39: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+  return /*info:DOWN_CAST_COMPOSITE*/ y;
+                                      ^" in y as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.weak.modular.expect
new file mode 100644
index 0000000..75d79fb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.weak.modular.expect
@@ -0,0 +1,81 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:19:7: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//       ? 42
+//       ^
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:24:5: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     ? 42
+//     ^
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:29:39: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//   return /*info:DOWN_CAST_COMPOSITE*/ y;
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(dynamic x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method g1(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:19:7: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+      ? 42
+      ^" in (x ?{core::Object} 42 : new self::MyFuture::value<core::int>(42)) as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method g2(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ 
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:24:5: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    ? 42
+    ^" in (x ?{core::Object} 42 : new self::MyFuture::value<core::int>(42)) as{TypeError,ForNonNullableByDefault} core::int;
+static method g3(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  core::Object y = x ?{core::Object} 42 : new self::MyFuture::value<dynamic>(42);
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:29:39: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+  return /*info:DOWN_CAST_COMPOSITE*/ y;
+                                      ^" in y as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.weak.outline.expect
new file mode 100644
index 0000000..1340fd2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.weak.outline.expect
@@ -0,0 +1,50 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    ;
+  constructor value(dynamic x) → self::MyFuture<self::MyFuture::T%>
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → 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}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method g1(core::bool x) → asy::Future<core::int> async 
+  ;
+static method g2(core::bool x) → asy::Future<core::int> async 
+  ;
+static method g3(core::bool x) → asy::Future<core::int> async 
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
+Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..b7502eb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart.weak.transformed.expect
@@ -0,0 +1,81 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:19:7: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//       ? 42
+//       ^
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:24:5: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//     ? 42
+//     ^
+//
+// pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:29:39: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//   return /*info:DOWN_CAST_COMPOSITE*/ y;
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  constructor value(dynamic x) → self::MyFuture<self::MyFuture::T%>
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
+}
+static method g1(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:19:7: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+      ? 42
+      ^" in (x ?{core::Object} 42 : new self::MyFuture::value<core::int>(42)) as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method g2(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ 
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:24:5: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+    ? 42
+    ^" in (x ?{core::Object} 42 : new self::MyFuture::value<core::int>(42)) as{TypeError,ForNonNullableByDefault} core::int;
+static method g3(core::bool x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  core::Object y = x ?{core::Object} 42 : new self::MyFuture::value<dynamic>(42);
+  return invalid-expression "pkg/front_end/testcases/inference/future_union_async_conditional_2_2.dart:29:39: Error: A value of type 'Object' can't be returned from an async function with return type 'Future<int>'.
+ - 'Object' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+  return /*info:DOWN_CAST_COMPOSITE*/ y;
+                                      ^" in y as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart b/pkg/front_end/testcases/inference/future_union_downwards.dart
index b0cad57..78d8b4f 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,28 +11,28 @@
   MyFuture() {}
   MyFuture.value([x]) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-MyFuture f;
+MyFuture f = throw '';
 // Instantiates Future<int>
-Future<int> t1 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-    /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) =>
-        new /*@ typeArgs=int* */ Future.value('hi'));
+Future<int> t1 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+    /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) =>
+        new /*@typeArgs=int*/ Future.value('hi'));
 
 // Instantiates List<int>
 Future<List<int>> t2 =
-    f. /*@ typeArgs=List<int*>* */ /*@target=MyFuture.then*/ then(
-        /*@ returnType=List<int*>* */ (/*@ type=dynamic */ _) => /*@ typeArgs=int* */ [
+    f. /*@typeArgs=List<int>*/ /*@target=MyFuture.then*/ then(
+        /*@returnType=List<int>*/ (/*@ type=dynamic */ _) => /*@typeArgs=int*/ [
               3
             ]);
 Future<List<int>> g2() async {
-  return /*@ typeArgs=int* */ [3];
+  return /*@typeArgs=int*/ [3];
 }
 
 Future<List<int>> g3() async {
-  return new /*@ typeArgs=List<int*>* */ Future.value(
-      /*@ typeArgs=int* */ [3]);
+  return new /*@typeArgs=List<int>*/ Future.value(
+      /*@typeArgs=int*/ [3]);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.textual_outline.expect
index cb0b37a..00f43db 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,10 +6,10 @@
   MyFuture() {}
   MyFuture.value([x]) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-MyFuture f;
+MyFuture f = throw '';
 Future<int> t1 = f.then((_) => new Future.value('hi'));
 Future<List<int>> t2 = f.then((_) => [3]);
 Future<List<int>> g2() async {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.textual_outline_modelled.expect
index 3348630..10cdb70 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,12 +6,12 @@
 Future<List<int>> g3() async {}
 Future<List<int>> t2 = f.then((_) => [3]);
 Future<int> t1 = f.then((_) => new Future.value('hi'));
-MyFuture f;
+MyFuture f = throw '';
 
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value([x]) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
index cc96345..986056a 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// 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>'.
-//         new /*@ typeArgs=int* */ Future.value('hi'));
-//                                               ^
+// pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+//         new /*@typeArgs=int*/ Future.value('hi'));
+//                                            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -12,43 +12,34 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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*>(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>'.
-        new /*@ typeArgs=int* */ Future.value('hi'));
-                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return <core::int*>[3];
+static field self::MyFuture<dynamic> f = throw "";
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+        new /*@typeArgs=int*/ Future.value('hi'));
+                                           ^" in "hi" as{TypeError,ForNonNullableByDefault} FutureOr<core::int>?)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
+static method g2() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return <core::int>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return asy::Future::value<core::List<core::int*>*>(<core::int*>[3]);
+static method g3() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return asy::Future::value<core::List<core::int>>(<core::int>[3]);
 }
 static method main() → dynamic {}
 
@@ -59,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.modular.expect
index cc96345..986056a 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// 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>'.
-//         new /*@ typeArgs=int* */ Future.value('hi'));
-//                                               ^
+// pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+//         new /*@typeArgs=int*/ Future.value('hi'));
+//                                            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -12,43 +12,34 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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*>(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>'.
-        new /*@ typeArgs=int* */ Future.value('hi'));
-                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return <core::int*>[3];
+static field self::MyFuture<dynamic> f = throw "";
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+        new /*@typeArgs=int*/ Future.value('hi'));
+                                           ^" in "hi" as{TypeError,ForNonNullableByDefault} FutureOr<core::int>?)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
+static method g2() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return <core::int>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return asy::Future::value<core::List<core::int*>*>(<core::int*>[3]);
+static method g3() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return asy::Future::value<core::List<core::int>>(<core::int>[3]);
 }
 static method main() → dynamic {}
 
@@ -59,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
index 871785f..5607d26 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
@@ -1,60 +1,51 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static field self::MyFuture<dynamic>* f;
-static field asy::Future<core::int*>* t1;
-static field asy::Future<core::List<core::int*>*>* t2;
-static method g2() → asy::Future<core::List<core::int*>*>* async 
+static field self::MyFuture<dynamic> f;
+static field asy::Future<core::int> t1;
+static field asy::Future<core::List<core::int>> t2;
+static method g2() → asy::Future<core::List<core::int>> async 
   ;
-static method g3() → asy::Future<core::List<core::int*>*>* async 
+static method g3() → asy::Future<core::List<core::int>> async 
   ;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
index 78822c8..f36588c 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// 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>'.
-//         new /*@ typeArgs=int* */ Future.value('hi'));
-//                                               ^
+// pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+//         new /*@typeArgs=int*/ Future.value('hi'));
+//                                            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -12,43 +12,34 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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*>(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>'.
-        new /*@ typeArgs=int* */ Future.value('hi'));
-                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return core::_GrowableList::_literal1<core::int*>(3);
+static field self::MyFuture<dynamic> f = throw "";
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+        new /*@typeArgs=int*/ Future.value('hi'));
+                                           ^" in "hi" as{TypeError,ForNonNullableByDefault} FutureOr<core::int>?)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => core::_GrowableList::_literal1<core::int>(3)){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
+static method g2() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return core::_GrowableList::_literal1<core::int>(3);
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3));
+static method g3() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return asy::Future::value<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(3));
 }
 static method main() → dynamic {}
 
@@ -59,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart b/pkg/front_end/testcases/inference/future_union_downwards_2.dart
index 368d014..fdec95d 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,28 +11,28 @@
   MyFuture() {}
   MyFuture.value([x]) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-MyFuture f;
+MyFuture f = throw '';
 // Instantiates Future<int>
-Future<int> t1 = f. /*@ typeArgs=int* */ /*@target=MyFuture.then*/ then(
-    /*@ returnType=MyFuture<int*>* */ (/*@ type=dynamic */ _) =>
-        new /*@ typeArgs=int* */ MyFuture.value('hi'));
+Future<int> t1 = f. /*@typeArgs=int*/ /*@target=MyFuture.then*/ then(
+    /*@returnType=MyFuture<int>*/ (/*@ type=dynamic */ _) =>
+        new /*@typeArgs=int*/ MyFuture.value('hi'));
 
 // Instantiates List<int>
 Future<List<int>> t2 =
-    f. /*@ typeArgs=List<int*>* */ /*@target=MyFuture.then*/ then(
-        /*@ returnType=List<int*>* */ (/*@ type=dynamic */ _) => /*@ typeArgs=int* */ [
+    f. /*@typeArgs=List<int>*/ /*@target=MyFuture.then*/ then(
+        /*@returnType=List<int>*/ (/*@ type=dynamic */ _) => /*@typeArgs=int*/ [
               3
             ]);
 Future<List<int>> g2() async {
-  return /*@ typeArgs=int* */ [3];
+  return /*@typeArgs=int*/ [3];
 }
 
 Future<List<int>> g3() async {
-  return new /*@ typeArgs=List<int*>* */ MyFuture.value(
-      /*@ typeArgs=int* */ [3]);
+  return new /*@typeArgs=List<int>*/ MyFuture.value(
+      /*@typeArgs=int*/ [3]);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.textual_outline.expect
index d07da2f..581c6b6 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,10 +6,10 @@
   MyFuture() {}
   MyFuture.value([x]) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-MyFuture f;
+MyFuture f = throw '';
 Future<int> t1 = f.then((_) => new MyFuture.value('hi'));
 Future<List<int>> t2 = f.then((_) => [3]);
 Future<List<int>> g2() async {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.textual_outline_modelled.expect
index 7eb12df..0522873 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,12 +6,12 @@
 Future<List<int>> g3() async {}
 Future<List<int>> t2 = f.then((_) => [3]);
 Future<int> t1 = f.then((_) => new MyFuture.value('hi'));
-MyFuture f;
+MyFuture f = throw '';
 
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value([x]) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
index ddc2463..6427ffa 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
@@ -1,45 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return <core::int*>[3];
+static field self::MyFuture<dynamic> f = throw "";
+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")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
+static method g2() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return <core::int>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return new self::MyFuture::value<core::List<core::int*>*>(<core::int*>[3]);
+static method g3() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return new self::MyFuture::value<core::List<core::int>>(<core::int>[3]);
 }
 static method main() → dynamic {}
 
@@ -50,8 +41,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.modular.expect
index ddc2463..6427ffa 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.modular.expect
@@ -1,45 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return <core::int*>[3];
+static field self::MyFuture<dynamic> f = throw "";
+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")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
+static method g2() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return <core::int>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return new self::MyFuture::value<core::List<core::int*>*>(<core::int*>[3]);
+static method g3() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return new self::MyFuture::value<core::List<core::int>>(<core::int>[3]);
 }
 static method main() → dynamic {}
 
@@ -50,8 +41,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
index cec3e52..5607d26 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
@@ -1,60 +1,51 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static field self::MyFuture<dynamic>* f;
-static field asy::Future<core::int*>* t1;
-static field asy::Future<core::List<core::int*>*>* t2;
-static method g2() → asy::Future<core::List<core::int*>*>* async 
+static field self::MyFuture<dynamic> f;
+static field asy::Future<core::int> t1;
+static field asy::Future<core::List<core::int>> t2;
+static method g2() → asy::Future<core::List<core::int>> async 
   ;
-static method g3() → asy::Future<core::List<core::int*>*>* async 
+static method g3() → asy::Future<core::List<core::int>> async 
   ;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_2.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
index e0786f8..e3d49b7 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
@@ -1,45 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return core::_GrowableList::_literal1<core::int*>(3);
+static field self::MyFuture<dynamic> f = throw "";
+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")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => core::_GrowableList::_literal1<core::int>(3)){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
+static method g2() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return core::_GrowableList::_literal1<core::int>(3);
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return new self::MyFuture::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3));
+static method g3() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return new self::MyFuture::value<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(3));
 }
 static method main() → dynamic {}
 
@@ -50,8 +41,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart b/pkg/front_end/testcases/inference/future_union_downwards_3.dart
index c53a139..5408834 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,25 +11,25 @@
   MyFuture() {}
   MyFuture.value([x]) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-Future f;
+Future f = throw '';
 // Instantiates Future<int>
-Future<int> t1 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-    /*@ returnType=Future<int*>* */ (/*@ type=dynamic */ _) =>
-        new /*@ typeArgs=int* */ Future.value('hi'));
+Future<int> t1 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+    /*@returnType=Future<int>*/ (/*@ type=dynamic */ _) =>
+        new /*@typeArgs=int*/ Future.value('hi'));
 
 // Instantiates List<int>
-Future<List<int>> t2 = f. /*@ typeArgs=List<int*>* */ /*@target=Future.then*/ then(
-    /*@ returnType=List<int*>* */ (/*@ type=dynamic */ _) => /*@ typeArgs=int* */ [3]);
+Future<List<int>> t2 = f. /*@typeArgs=List<int>*/ /*@target=Future.then*/ then(
+    /*@returnType=List<int>*/ (/*@ type=dynamic */ _) => /*@typeArgs=int*/ [3]);
 Future<List<int>> g2() async {
-  return /*@ typeArgs=int* */ [3];
+  return /*@typeArgs=int*/ [3];
 }
 
 Future<List<int>> g3() async {
-  return new /*@ typeArgs=List<int*>* */ Future.value(
-      /*@ typeArgs=int* */ [3]);
+  return new /*@typeArgs=List<int>*/ Future.value(
+      /*@typeArgs=int*/ [3]);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.textual_outline.expect
index 175a1fe..ea397e4 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,10 +6,10 @@
   MyFuture() {}
   MyFuture.value([x]) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-Future f;
+Future f = throw '';
 Future<int> t1 = f.then((_) => new Future.value('hi'));
 Future<List<int>> t2 = f.then((_) => [3]);
 Future<List<int>> g2() async {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.textual_outline_modelled.expect
index cda59eb..498f6d5 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,12 +6,12 @@
 Future<List<int>> g3() async {}
 Future<List<int>> t2 = f.then((_) => [3]);
 Future<int> t1 = f.then((_) => new Future.value('hi'));
-Future f;
+Future f = throw '';
 
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value([x]) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
index a49daa8..e195bf1 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// 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>'.
-//         new /*@ typeArgs=int* */ Future.value('hi'));
-//                                               ^
+// pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+//         new /*@typeArgs=int*/ Future.value('hi'));
+//                                            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -12,43 +12,34 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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*>(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>'.
-        new /*@ typeArgs=int* */ Future.value('hi'));
-                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return <core::int*>[3];
+static field asy::Future<dynamic> f = throw "";
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+        new /*@typeArgs=int*/ Future.value('hi'));
+                                           ^" in "hi" as{TypeError,ForNonNullableByDefault} FutureOr<core::int>?)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+static method g2() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return <core::int>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return asy::Future::value<core::List<core::int*>*>(<core::int*>[3]);
+static method g3() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return asy::Future::value<core::List<core::int>>(<core::int>[3]);
 }
 static method main() → dynamic {}
 
@@ -59,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.modular.expect
index a49daa8..e195bf1 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// 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>'.
-//         new /*@ typeArgs=int* */ Future.value('hi'));
-//                                               ^
+// pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+//         new /*@typeArgs=int*/ Future.value('hi'));
+//                                            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -12,43 +12,34 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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*>(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>'.
-        new /*@ typeArgs=int* */ Future.value('hi'));
-                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return <core::int*>[3];
+static field asy::Future<dynamic> f = throw "";
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+        new /*@typeArgs=int*/ Future.value('hi'));
+                                           ^" in "hi" as{TypeError,ForNonNullableByDefault} FutureOr<core::int>?)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+static method g2() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return <core::int>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return asy::Future::value<core::List<core::int*>*>(<core::int*>[3]);
+static method g3() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return asy::Future::value<core::List<core::int>>(<core::int>[3]);
 }
 static method main() → dynamic {}
 
@@ -59,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
index 2ba5919..de936c2 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
@@ -1,60 +1,51 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static field asy::Future<dynamic>* f;
-static field asy::Future<core::int*>* t1;
-static field asy::Future<core::List<core::int*>*>* t2;
-static method g2() → asy::Future<core::List<core::int*>*>* async 
+static field asy::Future<dynamic> f;
+static field asy::Future<core::int> t1;
+static field asy::Future<core::List<core::int>> t2;
+static method g2() → asy::Future<core::List<core::int>> async 
   ;
-static method g3() → asy::Future<core::List<core::int*>*>* async 
+static method g3() → asy::Future<core::List<core::int>> async 
   ;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_3.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
index 0c3bc84..1c2a48f 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// 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>'.
-//         new /*@ typeArgs=int* */ Future.value('hi'));
-//                                               ^
+// pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+//         new /*@typeArgs=int*/ Future.value('hi'));
+//                                            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -12,43 +12,34 @@
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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*>(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>'.
-        new /*@ typeArgs=int* */ Future.value('hi'));
-                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return core::_GrowableList::_literal1<core::int*>(3);
+static field asy::Future<dynamic> f = throw "";
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+        new /*@typeArgs=int*/ Future.value('hi'));
+                                           ^" in "hi" as{TypeError,ForNonNullableByDefault} FutureOr<core::int>?)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => core::_GrowableList::_literal1<core::int>(3)){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+static method g2() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return core::_GrowableList::_literal1<core::int>(3);
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3));
+static method g3() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return asy::Future::value<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(3));
 }
 static method main() → dynamic {}
 
@@ -59,8 +50,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart b/pkg/front_end/testcases/inference/future_union_downwards_4.dart
index c6beb37..f65980e 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,25 +11,25 @@
   MyFuture() {}
   MyFuture.value([x]) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-Future f;
+Future f = throw '';
 // Instantiates Future<int>
-Future<int> t1 = f. /*@ typeArgs=int* */ /*@target=Future.then*/ then(
-    /*@ returnType=MyFuture<int*>* */ (/*@ type=dynamic */ _) =>
-        new /*@ typeArgs=int* */ MyFuture.value('hi'));
+Future<int> t1 = f. /*@typeArgs=int*/ /*@target=Future.then*/ then(
+    /*@returnType=MyFuture<int>*/ (/*@ type=dynamic */ _) =>
+        new /*@typeArgs=int*/ MyFuture.value('hi'));
 
 // Instantiates List<int>
-Future<List<int>> t2 = f. /*@ typeArgs=List<int*>* */ /*@target=Future.then*/ then(
-    /*@ returnType=List<int*>* */ (/*@ type=dynamic */ _) => /*@ typeArgs=int* */ [3]);
+Future<List<int>> t2 = f. /*@typeArgs=List<int>*/ /*@target=Future.then*/ then(
+    /*@returnType=List<int>*/ (/*@ type=dynamic */ _) => /*@typeArgs=int*/ [3]);
 Future<List<int>> g2() async {
-  return /*@ typeArgs=int* */ [3];
+  return /*@typeArgs=int*/ [3];
 }
 
 Future<List<int>> g3() async {
-  return new /*@ typeArgs=List<int*>* */ MyFuture.value(
-      /*@ typeArgs=int* */ [3]);
+  return new /*@typeArgs=List<int>*/ MyFuture.value(
+      /*@typeArgs=int*/ [3]);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.textual_outline.expect
index 3616ccf..c41fa7a 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,10 +6,10 @@
   MyFuture() {}
   MyFuture.value([x]) {}
   dynamic noSuchMethod(invocation) => null;
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
 }
 
-Future f;
+Future f = throw '';
 Future<int> t1 = f.then((_) => new MyFuture.value('hi'));
 Future<List<int>> t2 = f.then((_) => [3]);
 Future<List<int>> g2() async {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.textual_outline_modelled.expect
index 23bbb61..7414db2 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -7,12 +6,12 @@
 Future<List<int>> g3() async {}
 Future<List<int>> t2 = f.then((_) => [3]);
 Future<int> t1 = f.then((_) => new MyFuture.value('hi'));
-Future f;
+Future f = throw '';
 
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value([x]) {}
-  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
+  MyFuture<S> then<S>(FutureOr<S> f(T x), {Function? onError}) => throw '';
   dynamic noSuchMethod(invocation) => null;
 }
 
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
index dcf9785..780b5a0 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
@@ -1,45 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return <core::int*>[3];
+static field asy::Future<dynamic> f = throw "";
+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")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+static method g2() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return <core::int>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return new self::MyFuture::value<core::List<core::int*>*>(<core::int*>[3]);
+static method g3() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return new self::MyFuture::value<core::List<core::int>>(<core::int>[3]);
 }
 static method main() → dynamic {}
 
@@ -50,8 +41,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.modular.expect
index dcf9785..780b5a0 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.modular.expect
@@ -1,45 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return <core::int*>[3];
+static field asy::Future<dynamic> f = throw "";
+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")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+static method g2() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return <core::int>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return new self::MyFuture::value<core::List<core::int*>*>(<core::int*>[3]);
+static method g3() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return new self::MyFuture::value<core::List<core::int>>(<core::int>[3]);
 }
 static method main() → dynamic {}
 
@@ -50,8 +41,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
index a8d85df..de936c2 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
@@ -1,60 +1,51 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     ;
-  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T%>
     ;
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = null}) → self::MyFuture<self::MyFuture::then::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method 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>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → 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}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout}) → 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}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::MyFuture::T%>;
 }
-static field asy::Future<dynamic>* f;
-static field asy::Future<core::int*>* t1;
-static field asy::Future<core::List<core::int*>*>* t2;
-static method g2() → asy::Future<core::List<core::int*>*>* async 
+static field asy::Future<dynamic> f;
+static field asy::Future<core::int> t1;
+static field asy::Future<core::List<core::int>> t2;
+static method g2() → asy::Future<core::List<core::int>> async 
   ;
-static method g3() → asy::Future<core::List<core::int*>*>* async 
+static method g3() → asy::Future<core::List<core::int>> async 
   ;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///future_union_downwards_4.dart:10:7 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 46, effectively constant: 13
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
index 756da4f..025e2eb 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
@@ -1,45 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
-  constructor •() → self::MyFuture<self::MyFuture::T*>*
+class MyFuture<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::MyFuture::T%> {
+  constructor •() → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T%>
     : super core::Object::•() {}
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method 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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
-  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  method then<S extends core::Object? = dynamic>((self::MyFuture::T%) → FutureOr<self::MyFuture::then::S%>f, {core::Function? onError = #C1}) → self::MyFuture<self::MyFuture::then::S%>
+    return throw "";
+  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>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::MyFuture::T%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::MyFuture::T%>onTimeout = #C1}) → asy::Future<self::MyFuture::T%>
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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(#C9, 0, #C3, #C10, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return core::_GrowableList::_literal1<core::int*>(3);
+static field asy::Future<dynamic> f = throw "";
+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")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => core::_GrowableList::_literal1<core::int>(3)){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+static method g2() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return core::_GrowableList::_literal1<core::int>(3);
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
-  return new self::MyFuture::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3));
+static method g3() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ {
+  return new self::MyFuture::value<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(3));
 }
 static method main() → dynamic {}
 
@@ -50,8 +41,8 @@
   #C4 = #test
   #C5 = #whenComplete
   #C6 = <core::Symbol*, dynamic>{)
-  #C7 = #asStream
-  #C8 = <dynamic>[]
-  #C9 = #timeout
-  #C10 = #onTimeout
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #asStream
+  #C10 = <dynamic>[]
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart
index 77b326f..5147d46 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart
@@ -1,17 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-foo() async {
-  Future<List<A>> f1 = null;
-  Future<List<A>> f2 = null;
-  List<List<A>> merged = await Future. /*@ typeArgs=List<A*>* */ wait(
-      /*@ typeArgs=Future<List<A*>*>* */ [f1, f2]);
+foo(Future<List<A>> f1, Future<List<A>> f2) async {
+  List<List<A>> merged = await Future. /*@typeArgs=List<A>*/ wait(
+      /*@typeArgs=Future<List<A>>*/ [f1, f2]);
 }
 
 class A {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.textual_outline.expect
index 416be46..e4aa342 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-foo() async {}
+foo(Future<List<A>> f1, Future<List<A>> f2) async {}
 
 class A {}
 
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.textual_outline_modelled.expect
index 159a31b..4321312 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
 class A {}
 
-foo() async {}
+foo(Future<List<A>> f1, Future<List<A>> f2) async {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.expect
index b226943..acca84c 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -6,23 +6,11 @@
 import "dart:async";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo() → dynamic async /* futureValueType= dynamic */ {
-  has-declared-initializer asy::Future<core::List<self::A*>*>* f1 = null;
-  has-declared-initializer asy::Future<core::List<self::A*>*>* f2 = null;
-  core::List<core::List<self::A*>*>* merged = await asy::Future::wait<core::List<self::A*>*>(<asy::Future<core::List<self::A*>*>*>[f1, f2]);
+static method foo(asy::Future<core::List<self::A>> f1, asy::Future<core::List<self::A>> f2) → dynamic async /* futureValueType= dynamic */ {
+  core::List<core::List<self::A>> merged = await asy::Future::wait<core::List<self::A>>(<asy::Future<core::List<self::A>>>[f1, f2]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect
index b226943..acca84c 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -6,23 +6,11 @@
 import "dart:async";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo() → dynamic async /* futureValueType= dynamic */ {
-  has-declared-initializer asy::Future<core::List<self::A*>*>* f1 = null;
-  has-declared-initializer asy::Future<core::List<self::A*>*>* f2 = null;
-  core::List<core::List<self::A*>*>* merged = await asy::Future::wait<core::List<self::A*>*>(<asy::Future<core::List<self::A*>*>*>[f1, f2]);
+static method foo(asy::Future<core::List<self::A>> f1, asy::Future<core::List<self::A>> f2) → dynamic async /* futureValueType= dynamic */ {
+  core::List<core::List<self::A>> merged = await asy::Future::wait<core::List<self::A>>(<asy::Future<core::List<self::A>>>[f1, f2]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.outline.expect
index c6f79d3..cc54232 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.outline.expect
@@ -1,24 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
+import "dart:async" as asy;
 
 import "dart:async";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo() → dynamic async 
+static method foo(asy::Future<core::List<self::A>> f1, asy::Future<core::List<self::A>> f2) → dynamic async 
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
index d92020e..e7fde80 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -6,23 +6,11 @@
 import "dart:async";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo() → dynamic async /* futureValueType= dynamic */ {
-  has-declared-initializer asy::Future<core::List<self::A*>*>* f1 = null;
-  has-declared-initializer asy::Future<core::List<self::A*>*>* f2 = null;
-  core::List<core::List<self::A*>*>* merged = await asy::Future::wait<core::List<self::A*>*>(core::_GrowableList::_literal2<asy::Future<core::List<self::A*>*>*>(f1, f2));
+static method foo(asy::Future<core::List<self::A>> f1, asy::Future<core::List<self::A>> f2) → dynamic async /* futureValueType= dynamic */ {
+  core::List<core::List<self::A>> merged = await asy::Future::wait<core::List<self::A>>(core::_GrowableList::_literal2<asy::Future<core::List<self::A>>>(f1, f2));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart
index 95c5b37..2d5d58e 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,9 +9,8 @@
 
 T id<T>(T x) => x;
 
-test() async {
-  Future<String> f;
-  String s = await /*@ typeArgs=FutureOr<String*>* */ id(f);
+test(Future<String> f) async {
+  String s = await /*@typeArgs=FutureOr<String>*/ id(f);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.textual_outline.expect
index 10f9a56..285a794 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
 T id<T>(T x) => x;
-test() async {}
+test(Future<String> f) async {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.textual_outline_modelled.expect
index 026e937..d713ac0 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
 T id<T>(T x) => x;
 main() {}
-test() async {}
+test(Future<String> f) async {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.expect
index 9fb7dae..31a86d7 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.expect
@@ -1,14 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-static method id<T extends core::Object* = dynamic>(self::id::T* x) → self::id::T*
+static method id<T extends core::Object? = dynamic>(self::id::T% x) → self::id::T%
   return x;
-static method test() → dynamic async /* futureValueType= dynamic */ {
-  asy::Future<core::String*>* f;
-  core::String* s = await self::id<FutureOr<core::String*>*>(f);
+static method test(asy::Future<core::String> f) → dynamic async /* futureValueType= dynamic */ {
+  core::String s = await self::id<FutureOr<core::String>>(f);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.modular.expect
index 9fb7dae..31a86d7 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.modular.expect
@@ -1,14 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-static method id<T extends core::Object* = dynamic>(self::id::T* x) → self::id::T*
+static method id<T extends core::Object? = dynamic>(self::id::T% x) → self::id::T%
   return x;
-static method test() → dynamic async /* futureValueType= dynamic */ {
-  asy::Future<core::String*>* f;
-  core::String* s = await self::id<FutureOr<core::String*>*>(f);
+static method test(asy::Future<core::String> f) → dynamic async /* futureValueType= dynamic */ {
+  core::String s = await self::id<FutureOr<core::String>>(f);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.outline.expect
index ede3be0..409c727 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.outline.expect
@@ -1,12 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
+import "dart:async" as asy;
 
 import "dart:async";
 
-static method id<T extends core::Object* = dynamic>(self::id::T* x) → self::id::T*
+static method id<T extends core::Object? = dynamic>(self::id::T% x) → self::id::T%
   ;
-static method test() → dynamic async 
+static method test(asy::Future<core::String> f) → dynamic async 
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect
index 9fb7dae..31a86d7 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect
@@ -1,14 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-static method id<T extends core::Object* = dynamic>(self::id::T* x) → self::id::T*
+static method id<T extends core::Object? = dynamic>(self::id::T% x) → self::id::T%
   return x;
-static method test() → dynamic async /* futureValueType= dynamic */ {
-  asy::Future<core::String*>* f;
-  core::String* s = await self::id<FutureOr<core::String*>*>(f);
+static method test(asy::Future<core::String> f) → dynamic async /* futureValueType= dynamic */ {
+  core::String s = await self::id<FutureOr<core::String>>(f);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart
index 806491f..cec22b8 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart
@@ -1,19 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
 main() async {
-  var /*@ type=Future<B*>* */ b = new Future<B>.value(new B());
-  var /*@ type=Future<C*>* */ c = new Future<C>.value(new C());
-  var /*@ type=List<Future<A*>*>* */ lll = /*@ typeArgs=Future<A*>* */ [b, c];
-  var /*@ type=List<A*>* */ result = await Future. /*@ typeArgs=A* */ wait(lll);
-  var /*@ type=List<A*>* */ result2 = await Future. /*@ typeArgs=A* */ wait(
-      /*@ typeArgs=Future<A*>* */ [b, c]);
+  var /*@type=Future<B>*/ b = new Future<B>.value(new B());
+  var /*@type=Future<C>*/ c = new Future<C>.value(new C());
+  var /*@type=List<Future<A>>*/ lll = /*@typeArgs=Future<A>*/ [b, c];
+  var /*@type=List<A>*/ result = await Future. /*@typeArgs=A*/ wait(lll);
+  var /*@type=List<A>*/ result2 = await Future. /*@typeArgs=A*/ wait(
+      /*@typeArgs=Future<A>*/ [b, c]);
   List<A> list = result;
   list = result2;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.textual_outline.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.textual_outline.expect
index 7a4e0a9..b625587 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.textual_outline_modelled.expect
index ba709a1..0cb32a3 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.expect
index 8c17d48..3e12352 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -6,36 +6,26 @@
 import "dart:async";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 static method main() → dynamic async /* futureValueType= dynamic */ {
-  asy::Future<self::B*>* b = asy::Future::value<self::B*>(new self::B::•());
-  asy::Future<self::C*>* c = asy::Future::value<self::C*>(new self::C::•());
-  core::List<asy::Future<self::A*>*>* lll = <asy::Future<self::A*>*>[b, c];
-  core::List<self::A*>* result = await asy::Future::wait<self::A*>(lll);
-  core::List<self::A*>* result2 = await asy::Future::wait<self::A*>(<asy::Future<self::A*>*>[b, c]);
-  core::List<self::A*>* list = result;
+  asy::Future<self::B> b = asy::Future::value<self::B>(new self::B::•());
+  asy::Future<self::C> c = asy::Future::value<self::C>(new self::C::•());
+  core::List<asy::Future<self::A>> lll = <asy::Future<self::A>>[b, c];
+  core::List<self::A> result = await asy::Future::wait<self::A>(lll);
+  core::List<self::A> result2 = await asy::Future::wait<self::A>(<asy::Future<self::A>>[b, c]);
+  core::List<self::A> list = result;
   list = result2;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.modular.expect
index 8c17d48..3e12352 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -6,36 +6,26 @@
 import "dart:async";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 static method main() → dynamic async /* futureValueType= dynamic */ {
-  asy::Future<self::B*>* b = asy::Future::value<self::B*>(new self::B::•());
-  asy::Future<self::C*>* c = asy::Future::value<self::C*>(new self::C::•());
-  core::List<asy::Future<self::A*>*>* lll = <asy::Future<self::A*>*>[b, c];
-  core::List<self::A*>* result = await asy::Future::wait<self::A*>(lll);
-  core::List<self::A*>* result2 = await asy::Future::wait<self::A*>(<asy::Future<self::A*>*>[b, c]);
-  core::List<self::A*>* list = result;
+  asy::Future<self::B> b = asy::Future::value<self::B>(new self::B::•());
+  asy::Future<self::C> c = asy::Future::value<self::C>(new self::C::•());
+  core::List<asy::Future<self::A>> lll = <asy::Future<self::A>>[b, c];
+  core::List<self::A> result = await asy::Future::wait<self::A>(lll);
+  core::List<self::A> result2 = await asy::Future::wait<self::A>(<asy::Future<self::A>>[b, c]);
+  core::List<self::A> list = result;
   list = result2;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.outline.expect
index 1f4c3b4..0bb9032 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.outline.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 static method main() → dynamic async 
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect
index 057267c..b63d029 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -6,36 +6,26 @@
 import "dart:async";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 static method main() → dynamic async /* futureValueType= dynamic */ {
-  asy::Future<self::B*>* b = asy::Future::value<self::B*>(new self::B::•());
-  asy::Future<self::C*>* c = asy::Future::value<self::C*>(new self::C::•());
-  core::List<asy::Future<self::A*>*>* lll = core::_GrowableList::_literal2<asy::Future<self::A*>*>(b, c);
-  core::List<self::A*>* result = await asy::Future::wait<self::A*>(lll);
-  core::List<self::A*>* result2 = await asy::Future::wait<self::A*>(core::_GrowableList::_literal2<asy::Future<self::A*>*>(b, c));
-  core::List<self::A*>* list = result;
+  asy::Future<self::B> b = asy::Future::value<self::B>(new self::B::•());
+  asy::Future<self::C> c = asy::Future::value<self::C>(new self::C::•());
+  core::List<asy::Future<self::A>> lll = core::_GrowableList::_literal2<asy::Future<self::A>>(b, c);
+  core::List<self::A> result = await asy::Future::wait<self::A>(lll);
+  core::List<self::A> result2 = await asy::Future::wait<self::A>(core::_GrowableList::_literal2<asy::Future<self::A>>(b, c));
+  core::List<self::A> list = result;
   list = result2;
 }
diff --git a/pkg/front_end/testcases/inference/generator_closure.dart b/pkg/front_end/testcases/inference/generator_closure.dart
index c7b0b1c..ed7b973 100644
--- a/pkg/front_end/testcases/inference/generator_closure.dart
+++ b/pkg/front_end/testcases/inference/generator_closure.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,7 +10,7 @@
 void foo(Stream<int> Function() values) {}
 
 void main() {
-  foo(/*@ returnType=Stream<int*>* */ () async* {
+  foo(/*@returnType=Stream<int>*/ () async* {
     yield 0;
     yield 1;
   });
diff --git a/pkg/front_end/testcases/inference/generator_closure.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generator_closure.dart.textual_outline.expect
index 5d93834..d7b3836 100644
--- a/pkg/front_end/testcases/inference/generator_closure.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generator_closure.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/inference/generator_closure.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generator_closure.dart.textual_outline_modelled.expect
index 5d93834..d7b3836 100644
--- a/pkg/front_end/testcases/inference/generator_closure.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generator_closure.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/inference/generator_closure.dart.weak.expect b/pkg/front_end/testcases/inference/generator_closure.dart.weak.expect
index c703bed..b4d5076 100644
--- a/pkg/front_end/testcases/inference/generator_closure.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generator_closure.dart.weak.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method foo(() →* asy::Stream<core::int*>* values) → void {}
+static method foo(() → asy::Stream<core::int> values) → void {}
 static method main() → void {
-  self::foo(() → asy::Stream<core::int*>* async* {
+  self::foo(() → asy::Stream<core::int> async* {
     yield 0;
     yield 1;
   });
diff --git a/pkg/front_end/testcases/inference/generator_closure.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generator_closure.dart.weak.modular.expect
index c703bed..b4d5076 100644
--- a/pkg/front_end/testcases/inference/generator_closure.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generator_closure.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method foo(() →* asy::Stream<core::int*>* values) → void {}
+static method foo(() → asy::Stream<core::int> values) → void {}
 static method main() → void {
-  self::foo(() → asy::Stream<core::int*>* async* {
+  self::foo(() → asy::Stream<core::int> async* {
     yield 0;
     yield 1;
   });
diff --git a/pkg/front_end/testcases/inference/generator_closure.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generator_closure.dart.weak.outline.expect
index 394f01f..2b91af66 100644
--- a/pkg/front_end/testcases/inference/generator_closure.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generator_closure.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method foo(() →* asy::Stream<core::int*>* values) → void
+static method foo(() → asy::Stream<core::int> values) → void
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect
index c703bed..b4d5076 100644
--- a/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method foo(() →* asy::Stream<core::int*>* values) → void {}
+static method foo(() → asy::Stream<core::int> values) → void {}
 static method main() → void {
-  self::foo(() → asy::Stream<core::int*>* async* {
+  self::foo(() → asy::Stream<core::int> async* {
     yield 0;
     yield 1;
   });
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart
index 58c7fba..4d1bd29 100644
--- a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 typedef void ToValue<T>(T value);
 
-main() {
-  ToValue<T> f<T>(T x) => null;
-  var /*@type=(int*) ->* void*/ x = f<int>(42);
-  var /*@type=(int*) ->* void*/ y = f /*@typeArgs=int**/ (42);
+test() {
+  ToValue<T> f<T>(T x) => throw '';
+  var /*@type=(int) -> void*/ x = f<int>(42);
+  var /*@type=(int) -> void*/ y = f /*@typeArgs=int*/ (42);
   ToValue<int> takesInt = x;
   takesInt = y;
 }
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.textual_outline.expect
index 80672df..71191fd 100644
--- a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
 typedef void ToValue<T>(T value);
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.textual_outline_modelled.expect
index f3255a1..0fedb64 100644
--- a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
-main() {}
+test() {}
 typedef void ToValue<T>(T value);
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.expect
index b6875d1..47b181d 100644
--- a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef ToValue<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-static method main() → dynamic {
-  function f<T extends core::Object* = dynamic>(T* x) → (T*) →* void
-    return null;
-  (core::int*) →* void x = f<core::int*>(42){(core::int*) →* (core::int*) →* void};
-  (core::int*) →* void y = f<core::int*>(42){(core::int*) →* (core::int*) →* void};
-  (core::int*) →* void takesInt = x;
+typedef ToValue<contravariant T extends core::Object? = dynamic> = (T%) → void;
+static method test() → dynamic {
+  function f<T extends core::Object? = dynamic>(T% x) → (T%) → void
+    return throw "";
+  (core::int) → void x = f<core::int>(42){(core::int) → (core::int) → void};
+  (core::int) → void y = f<core::int>(42){(core::int) → (core::int) → void};
+  (core::int) → void takesInt = x;
   takesInt = y;
 }
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.modular.expect
index b6875d1..47b181d 100644
--- a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef ToValue<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-static method main() → dynamic {
-  function f<T extends core::Object* = dynamic>(T* x) → (T*) →* void
-    return null;
-  (core::int*) →* void x = f<core::int*>(42){(core::int*) →* (core::int*) →* void};
-  (core::int*) →* void y = f<core::int*>(42){(core::int*) →* (core::int*) →* void};
-  (core::int*) →* void takesInt = x;
+typedef ToValue<contravariant T extends core::Object? = dynamic> = (T%) → void;
+static method test() → dynamic {
+  function f<T extends core::Object? = dynamic>(T% x) → (T%) → void
+    return throw "";
+  (core::int) → void x = f<core::int>(42){(core::int) → (core::int) → void};
+  (core::int) → void y = f<core::int>(42){(core::int) → (core::int) → void};
+  (core::int) → void takesInt = x;
   takesInt = y;
 }
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.outline.expect
index 3a0416f..9768806 100644
--- a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef ToValue<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-static method main() → dynamic
+typedef ToValue<contravariant T extends core::Object? = dynamic> = (T%) → void;
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.transformed.expect
index b6875d1..47b181d 100644
--- a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef ToValue<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-static method main() → dynamic {
-  function f<T extends core::Object* = dynamic>(T* x) → (T*) →* void
-    return null;
-  (core::int*) →* void x = f<core::int*>(42){(core::int*) →* (core::int*) →* void};
-  (core::int*) →* void y = f<core::int*>(42){(core::int*) →* (core::int*) →* void};
-  (core::int*) →* void takesInt = x;
+typedef ToValue<contravariant T extends core::Object? = dynamic> = (T%) → void;
+static method test() → dynamic {
+  function f<T extends core::Object? = dynamic>(T% x) → (T%) → void
+    return throw "";
+  (core::int) → void x = f<core::int>(42){(core::int) → (core::int) → void};
+  (core::int) → void y = f<core::int>(42){(core::int) → (core::int) → void};
+  (core::int) → void takesInt = x;
   takesInt = y;
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart
index 1bf287e..82ebd4d 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart
@@ -1,12 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<S, T>(S s) => null;
-main() {
-  String x = /*@ typeArgs=int*, String* */ f(42);
-  String y = (f) /*@ typeArgs=int*, String* */ (42);
+T f<S, T>(S s) => throw '';
+
+test() {
+  String x = /*@typeArgs=int, String*/ f(42);
+  String y = (f) /*@typeArgs=int, String*/ (42);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.textual_outline.expect
index 737e479..adb7f53 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
-T f<S, T>(S s) => null;
-main() {}
+T f<S, T>(S s) => throw '';
+test() {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.textual_outline_modelled.expect
index 737e479..adb7f53 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
-T f<S, T>(S s) => null;
-main() {}
+T f<S, T>(S s) => throw '';
+test() {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.expect
index 421c4af..34c9ac5 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<S extends core::Object* = dynamic, T extends core::Object* = dynamic>(self::f::S* s) → self::f::T*
-  return null;
-static method main() → dynamic {
-  core::String* x = self::f<core::int*, core::String*>(42);
-  core::String* y = #C1<core::int*, core::String*>(42){(core::int*) →* core::String*};
+static method f<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::f::S% s) → self::f::T%
+  return throw "";
+static method test() → dynamic {
+  core::String x = self::f<core::int, core::String>(42);
+  core::String y = #C1<core::int, core::String>(42){(core::int) → core::String};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.modular.expect
index 421c4af..34c9ac5 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<S extends core::Object* = dynamic, T extends core::Object* = dynamic>(self::f::S* s) → self::f::T*
-  return null;
-static method main() → dynamic {
-  core::String* x = self::f<core::int*, core::String*>(42);
-  core::String* y = #C1<core::int*, core::String*>(42){(core::int*) →* core::String*};
+static method f<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::f::S% s) → self::f::T%
+  return throw "";
+static method test() → dynamic {
+  core::String x = self::f<core::int, core::String>(42);
+  core::String y = #C1<core::int, core::String>(42){(core::int) → core::String};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.outline.expect
index 9f34989..606de92 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<S extends core::Object* = dynamic, T extends core::Object* = dynamic>(self::f::S* s) → self::f::T*
+static method f<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::f::S% s) → self::f::T%
   ;
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.transformed.expect
index 421c4af..34c9ac5 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<S extends core::Object* = dynamic, T extends core::Object* = dynamic>(self::f::S* s) → self::f::T*
-  return null;
-static method main() → dynamic {
-  core::String* x = self::f<core::int*, core::String*>(42);
-  core::String* y = #C1<core::int*, core::String*>(42){(core::int*) →* core::String*};
+static method f<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::f::S% s) → self::f::T%
+  return throw "";
+static method test() → dynamic {
+  core::String x = self::f<core::int, core::String>(42);
+  core::String y = #C1<core::int, core::String>(42){(core::int) → core::String};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart
index 58b0e43..12c9b5a 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -23,6 +23,6 @@
   */
 
   new Foo<String>()
-      . /*error:COULD_NOT_INFER*/ /*@ typeArgs=int* */ /*@target=Foo.method*/ method(
+      . /*error:COULD_NOT_INFER*/ /*@typeArgs=int*/ /*@target=Foo.method*/ method(
           42);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.textual_outline.expect
index c0d3a00..c453bac 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo<T extends Pattern> {
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.textual_outline_modelled.expect
index c0d3a00..c453bac 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo<T extends Pattern> {
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.expect
index 3871d0a..b5fb8b3 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart:26:79: Error: Inferred type argument 'int' doesn't conform to the bound 'String' of the type variable 'U' on 'Foo<String>.method'.
+// pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart:26:76: Error: Inferred type argument 'int' doesn't conform to the bound 'String' of the type variable 'U' on 'Foo<String>.method'.
 //  - 'Foo' is from 'pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//       . /*error:COULD_NOT_INFER*/ /*@ typeArgs=int* */ /*@target=Foo.method*/ method(
-//                                                                               ^
+//       . /*error:COULD_NOT_INFER*/ /*@typeArgs=int*/ /*@target=Foo.method*/ method(
+//                                                                            ^
 //
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Pattern*> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+class Foo<T extends core::Pattern> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T>
     : super core::Object::•()
     ;
-  method method<covariant-by-class U extends self::Foo::T*>(self::Foo::method::U* u) → self::Foo::method::U*
+  method method<covariant-by-class U extends self::Foo::T>(self::Foo::method::U u) → self::Foo::method::U
     return u;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::Foo::•<core::String*>().{self::Foo::method}<core::int*>(42){(core::int*) →* core::int*};
+  new self::Foo::•<core::String>().{self::Foo::method}<core::int>(42){(core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.modular.expect
index 3871d0a..b5fb8b3 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.modular.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart:26:79: Error: Inferred type argument 'int' doesn't conform to the bound 'String' of the type variable 'U' on 'Foo<String>.method'.
+// pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart:26:76: Error: Inferred type argument 'int' doesn't conform to the bound 'String' of the type variable 'U' on 'Foo<String>.method'.
 //  - 'Foo' is from 'pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//       . /*error:COULD_NOT_INFER*/ /*@ typeArgs=int* */ /*@target=Foo.method*/ method(
-//                                                                               ^
+//       . /*error:COULD_NOT_INFER*/ /*@typeArgs=int*/ /*@target=Foo.method*/ method(
+//                                                                            ^
 //
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Pattern*> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+class Foo<T extends core::Pattern> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T>
     : super core::Object::•()
     ;
-  method method<covariant-by-class U extends self::Foo::T*>(self::Foo::method::U* u) → self::Foo::method::U*
+  method method<covariant-by-class U extends self::Foo::T>(self::Foo::method::U u) → self::Foo::method::U
     return u;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::Foo::•<core::String*>().{self::Foo::method}<core::int*>(42){(core::int*) →* core::int*};
+  new self::Foo::•<core::String>().{self::Foo::method}<core::int>(42){(core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.outline.expect
index 0542c0b..3c8a852 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Pattern*> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+class Foo<T extends core::Pattern> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T>
     ;
-  method method<covariant-by-class U extends self::Foo::T*>(self::Foo::method::U* u) → self::Foo::method::U*
+  method method<covariant-by-class U extends self::Foo::T>(self::Foo::method::U u) → self::Foo::method::U
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart
index a9994b2..c5494ef 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,30 +11,30 @@
 void printDouble(double x) => print(x);
 
 num myMax(num x, num y) =>
-    /*@ typeArgs=num* */ max(x, y);
+    /*@typeArgs=num*/ max(x, y);
 
 f() {
   // Okay if static types match.
-  printInt(/*@ typeArgs=int* */ max(1, 2));
-  printInt(/*@ typeArgs=int* */ min(1, 2));
-  printDouble(/*@ typeArgs=double* */ max(1.0, 2.0));
-  printDouble(/*@ typeArgs=double* */ min(1.0, 2.0));
+  printInt(/*@typeArgs=int*/ max(1, 2));
+  printInt(/*@typeArgs=int*/ min(1, 2));
+  printDouble(/*@typeArgs=double*/ max(1.0, 2.0));
+  printDouble(/*@typeArgs=double*/ min(1.0, 2.0));
 
   // No help for user-defined functions from num->num->num.
   printInt(myMax(1, 2));
   printInt(myMax(1, 2) as int);
 
   printInt(
-      /*@ typeArgs=int* */ max(1, 2.0));
+      /*@typeArgs=int*/ max(1, 2.0));
   printInt(
-      /*@ typeArgs=int* */ min(1, 2.0));
+      /*@typeArgs=int*/ min(1, 2.0));
   printDouble(
-      /*@ typeArgs=double* */ max(1, 2.0));
+      /*@typeArgs=double*/ max(1, 2.0));
   printDouble(
-      /*@ typeArgs=double* */ min(1, 2.0));
+      /*@typeArgs=double*/ min(1, 2.0));
 
   // Types other than int and double are not accepted.
-  printInt(/*@ typeArgs=int* */ min("hi", "there"));
+  printInt(/*@typeArgs=int*/ min("hi", "there"));
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.textual_outline.expect
index 36b34fe..b914263 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:math';
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.textual_outline_modelled.expect
index a560376..d493668 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:math';
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.expect
index 9c23381..5faad62 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.expect
@@ -1,22 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
-//       /*@ typeArgs=int* */ max(1, 2.0));
-//                                   ^
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:24:12: Error: The argument type 'num' can't be assigned to the parameter type 'int'.
+//   printInt(myMax(1, 2));
+//            ^
 //
-// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
-//       /*@ typeArgs=int* */ min(1, 2.0));
-//                                   ^
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:32: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//       /*@typeArgs=int*/ max(1, 2.0));
+//                                ^
 //
-// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:37: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-//   printInt(/*@ typeArgs=int* */ min("hi", "there"));
-//                                     ^
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:32: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//       /*@typeArgs=int*/ min(1, 2.0));
+//                                ^
 //
-// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:43: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-//   printInt(/*@ typeArgs=int* */ min("hi", "there"));
-//                                           ^
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:34: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//   printInt(/*@typeArgs=int*/ min("hi", "there"));
+//                                  ^
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:40: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//   printInt(/*@typeArgs=int*/ min("hi", "there"));
+//                                        ^
 //
 import self as self;
 import "dart:core" as core;
@@ -24,31 +28,33 @@
 
 import "dart:math";
 
-static method printInt(core::int* x) → void
+static method printInt(core::int x) → void
   return core::print(x);
-static method printDouble(core::double* x) → void
+static method printDouble(core::double x) → void
   return core::print(x);
-static method myMax(core::num* x, core::num* y) → core::num*
-  return math::max<core::num*>(x, y);
+static method myMax(core::num x, core::num y) → core::num
+  return math::max<core::num>(x, y);
 static method f() → dynamic {
-  self::printInt(math::max<core::int*>(1, 2));
-  self::printInt(math::min<core::int*>(1, 2));
-  self::printDouble(math::max<core::double*>(1.0, 2.0));
-  self::printDouble(math::min<core::double*>(1.0, 2.0));
-  self::printInt(self::myMax(1, 2) as{TypeError} core::int*);
-  self::printInt(self::myMax(1, 2) as core::int*);
-  self::printInt(math::max<core::int*>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
-      /*@ typeArgs=int* */ max(1, 2.0));
-                                  ^" in 2.0 as{TypeError} core::int*));
-  self::printInt(math::min<core::int*>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
-      /*@ typeArgs=int* */ min(1, 2.0));
-                                  ^" in 2.0 as{TypeError} core::int*));
-  self::printDouble(math::max<core::double*>(1.0, 2.0));
-  self::printDouble(math::min<core::double*>(1.0, 2.0));
-  self::printInt(math::min<core::int*>(invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:37: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-  printInt(/*@ typeArgs=int* */ min(\"hi\", \"there\"));
-                                    ^" in "hi" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:43: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-  printInt(/*@ typeArgs=int* */ min(\"hi\", \"there\"));
-                                          ^" in "there" as{TypeError} core::int*));
+  self::printInt(math::max<core::int>(1, 2));
+  self::printInt(math::min<core::int>(1, 2));
+  self::printDouble(math::max<core::double>(1.0, 2.0));
+  self::printDouble(math::min<core::double>(1.0, 2.0));
+  self::printInt(invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:24:12: Error: The argument type 'num' can't be assigned to the parameter type 'int'.
+  printInt(myMax(1, 2));
+           ^" in self::myMax(1, 2) as{TypeError,ForNonNullableByDefault} core::int);
+  self::printInt(self::myMax(1, 2) as{ForNonNullableByDefault} core::int);
+  self::printInt(math::max<core::int>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:32: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+      /*@typeArgs=int*/ max(1, 2.0));
+                               ^" in 2.0 as{TypeError,ForNonNullableByDefault} core::int));
+  self::printInt(math::min<core::int>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:32: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+      /*@typeArgs=int*/ min(1, 2.0));
+                               ^" in 2.0 as{TypeError,ForNonNullableByDefault} core::int));
+  self::printDouble(math::max<core::double>(1.0, 2.0));
+  self::printDouble(math::min<core::double>(1.0, 2.0));
+  self::printInt(math::min<core::int>(invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:34: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  printInt(/*@typeArgs=int*/ min(\"hi\", \"there\"));
+                                 ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:40: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  printInt(/*@typeArgs=int*/ min(\"hi\", \"there\"));
+                                       ^" in "there" as{TypeError,ForNonNullableByDefault} core::int));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.modular.expect
index 9c23381..5faad62 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.modular.expect
@@ -1,22 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
-//       /*@ typeArgs=int* */ max(1, 2.0));
-//                                   ^
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:24:12: Error: The argument type 'num' can't be assigned to the parameter type 'int'.
+//   printInt(myMax(1, 2));
+//            ^
 //
-// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
-//       /*@ typeArgs=int* */ min(1, 2.0));
-//                                   ^
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:32: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//       /*@typeArgs=int*/ max(1, 2.0));
+//                                ^
 //
-// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:37: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-//   printInt(/*@ typeArgs=int* */ min("hi", "there"));
-//                                     ^
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:32: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//       /*@typeArgs=int*/ min(1, 2.0));
+//                                ^
 //
-// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:43: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-//   printInt(/*@ typeArgs=int* */ min("hi", "there"));
-//                                           ^
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:34: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//   printInt(/*@typeArgs=int*/ min("hi", "there"));
+//                                  ^
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:40: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//   printInt(/*@typeArgs=int*/ min("hi", "there"));
+//                                        ^
 //
 import self as self;
 import "dart:core" as core;
@@ -24,31 +28,33 @@
 
 import "dart:math";
 
-static method printInt(core::int* x) → void
+static method printInt(core::int x) → void
   return core::print(x);
-static method printDouble(core::double* x) → void
+static method printDouble(core::double x) → void
   return core::print(x);
-static method myMax(core::num* x, core::num* y) → core::num*
-  return math::max<core::num*>(x, y);
+static method myMax(core::num x, core::num y) → core::num
+  return math::max<core::num>(x, y);
 static method f() → dynamic {
-  self::printInt(math::max<core::int*>(1, 2));
-  self::printInt(math::min<core::int*>(1, 2));
-  self::printDouble(math::max<core::double*>(1.0, 2.0));
-  self::printDouble(math::min<core::double*>(1.0, 2.0));
-  self::printInt(self::myMax(1, 2) as{TypeError} core::int*);
-  self::printInt(self::myMax(1, 2) as core::int*);
-  self::printInt(math::max<core::int*>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
-      /*@ typeArgs=int* */ max(1, 2.0));
-                                  ^" in 2.0 as{TypeError} core::int*));
-  self::printInt(math::min<core::int*>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
-      /*@ typeArgs=int* */ min(1, 2.0));
-                                  ^" in 2.0 as{TypeError} core::int*));
-  self::printDouble(math::max<core::double*>(1.0, 2.0));
-  self::printDouble(math::min<core::double*>(1.0, 2.0));
-  self::printInt(math::min<core::int*>(invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:37: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-  printInt(/*@ typeArgs=int* */ min(\"hi\", \"there\"));
-                                    ^" in "hi" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:43: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-  printInt(/*@ typeArgs=int* */ min(\"hi\", \"there\"));
-                                          ^" in "there" as{TypeError} core::int*));
+  self::printInt(math::max<core::int>(1, 2));
+  self::printInt(math::min<core::int>(1, 2));
+  self::printDouble(math::max<core::double>(1.0, 2.0));
+  self::printDouble(math::min<core::double>(1.0, 2.0));
+  self::printInt(invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:24:12: Error: The argument type 'num' can't be assigned to the parameter type 'int'.
+  printInt(myMax(1, 2));
+           ^" in self::myMax(1, 2) as{TypeError,ForNonNullableByDefault} core::int);
+  self::printInt(self::myMax(1, 2) as{ForNonNullableByDefault} core::int);
+  self::printInt(math::max<core::int>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:32: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+      /*@typeArgs=int*/ max(1, 2.0));
+                               ^" in 2.0 as{TypeError,ForNonNullableByDefault} core::int));
+  self::printInt(math::min<core::int>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:32: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+      /*@typeArgs=int*/ min(1, 2.0));
+                               ^" in 2.0 as{TypeError,ForNonNullableByDefault} core::int));
+  self::printDouble(math::max<core::double>(1.0, 2.0));
+  self::printDouble(math::min<core::double>(1.0, 2.0));
+  self::printInt(math::min<core::int>(invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:34: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  printInt(/*@typeArgs=int*/ min(\"hi\", \"there\"));
+                                 ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:40: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  printInt(/*@typeArgs=int*/ min(\"hi\", \"there\"));
+                                       ^" in "there" as{TypeError,ForNonNullableByDefault} core::int));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.outline.expect
index 47b4040..359d5d6 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.outline.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:math";
 
-static method printInt(core::int* x) → void
+static method printInt(core::int x) → void
   ;
-static method printDouble(core::double* x) → void
+static method printDouble(core::double x) → void
   ;
-static method myMax(core::num* x, core::num* y) → core::num*
+static method myMax(core::num x, core::num y) → core::num
   ;
 static method f() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.transformed.expect
index 9c23381..5faad62 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.transformed.expect
@@ -1,22 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
-//       /*@ typeArgs=int* */ max(1, 2.0));
-//                                   ^
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:24:12: Error: The argument type 'num' can't be assigned to the parameter type 'int'.
+//   printInt(myMax(1, 2));
+//            ^
 //
-// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
-//       /*@ typeArgs=int* */ min(1, 2.0));
-//                                   ^
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:32: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//       /*@typeArgs=int*/ max(1, 2.0));
+//                                ^
 //
-// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:37: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-//   printInt(/*@ typeArgs=int* */ min("hi", "there"));
-//                                     ^
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:32: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//       /*@typeArgs=int*/ min(1, 2.0));
+//                                ^
 //
-// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:43: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-//   printInt(/*@ typeArgs=int* */ min("hi", "there"));
-//                                           ^
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:34: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//   printInt(/*@typeArgs=int*/ min("hi", "there"));
+//                                  ^
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:40: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//   printInt(/*@typeArgs=int*/ min("hi", "there"));
+//                                        ^
 //
 import self as self;
 import "dart:core" as core;
@@ -24,31 +28,33 @@
 
 import "dart:math";
 
-static method printInt(core::int* x) → void
+static method printInt(core::int x) → void
   return core::print(x);
-static method printDouble(core::double* x) → void
+static method printDouble(core::double x) → void
   return core::print(x);
-static method myMax(core::num* x, core::num* y) → core::num*
-  return math::max<core::num*>(x, y);
+static method myMax(core::num x, core::num y) → core::num
+  return math::max<core::num>(x, y);
 static method f() → dynamic {
-  self::printInt(math::max<core::int*>(1, 2));
-  self::printInt(math::min<core::int*>(1, 2));
-  self::printDouble(math::max<core::double*>(1.0, 2.0));
-  self::printDouble(math::min<core::double*>(1.0, 2.0));
-  self::printInt(self::myMax(1, 2) as{TypeError} core::int*);
-  self::printInt(self::myMax(1, 2) as core::int*);
-  self::printInt(math::max<core::int*>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
-      /*@ typeArgs=int* */ max(1, 2.0));
-                                  ^" in 2.0 as{TypeError} core::int*));
-  self::printInt(math::min<core::int*>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
-      /*@ typeArgs=int* */ min(1, 2.0));
-                                  ^" in 2.0 as{TypeError} core::int*));
-  self::printDouble(math::max<core::double*>(1.0, 2.0));
-  self::printDouble(math::min<core::double*>(1.0, 2.0));
-  self::printInt(math::min<core::int*>(invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:37: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-  printInt(/*@ typeArgs=int* */ min(\"hi\", \"there\"));
-                                    ^" in "hi" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:43: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
-  printInt(/*@ typeArgs=int* */ min(\"hi\", \"there\"));
-                                          ^" in "there" as{TypeError} core::int*));
+  self::printInt(math::max<core::int>(1, 2));
+  self::printInt(math::min<core::int>(1, 2));
+  self::printDouble(math::max<core::double>(1.0, 2.0));
+  self::printDouble(math::min<core::double>(1.0, 2.0));
+  self::printInt(invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:24:12: Error: The argument type 'num' can't be assigned to the parameter type 'int'.
+  printInt(myMax(1, 2));
+           ^" in self::myMax(1, 2) as{TypeError,ForNonNullableByDefault} core::int);
+  self::printInt(self::myMax(1, 2) as{ForNonNullableByDefault} core::int);
+  self::printInt(math::max<core::int>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:32: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+      /*@typeArgs=int*/ max(1, 2.0));
+                               ^" in 2.0 as{TypeError,ForNonNullableByDefault} core::int));
+  self::printInt(math::min<core::int>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:32: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+      /*@typeArgs=int*/ min(1, 2.0));
+                               ^" in 2.0 as{TypeError,ForNonNullableByDefault} core::int));
+  self::printDouble(math::max<core::double>(1.0, 2.0));
+  self::printDouble(math::min<core::double>(1.0, 2.0));
+  self::printInt(math::min<core::int>(invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:34: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  printInt(/*@typeArgs=int*/ min(\"hi\", \"there\"));
+                                 ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:40: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  printInt(/*@typeArgs=int*/ min(\"hi\", \"there\"));
+                                       ^" in "there" as{TypeError,ForNonNullableByDefault} core::int));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart
index 5669aef..8bb231c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.textual_outline.expect
index 6f58ae4..2f8aafa 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.textual_outline_modelled.expect
index 6f58ae4..2f8aafa 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.expect
index 6c102fe..9487f9c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,32 +25,22 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(self::C::m::T% x) → self::C::m::T%
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method m(invalid-type x) → invalid-type
     return x;
 }
 static method main() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:18:73: Error: Expected 0 type arguments.
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:18:73: Error: Expected 0 type arguments.
       . /*error:WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD*/ /*@target=D.m*/ m<int>(
-                                                                        ^" in new self::D::•().{self::D::m}{<inapplicable>}.<core::int*>(42){(invalid-type) →* invalid-type};
+                                                                        ^" in new self::D::•().{self::D::m}{<inapplicable>}.<core::int>(42){(invalid-type) → invalid-type};
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.modular.expect
index 6c102fe..9487f9c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,32 +25,22 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(self::C::m::T% x) → self::C::m::T%
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method m(invalid-type x) → invalid-type
     return x;
 }
 static method main() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:18:73: Error: Expected 0 type arguments.
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:18:73: Error: Expected 0 type arguments.
       . /*error:WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD*/ /*@target=D.m*/ m<int>(
-                                                                        ^" in new self::D::•().{self::D::m}{<inapplicable>}.<core::int*>(42){(invalid-type) →* invalid-type};
+                                                                        ^" in new self::D::•().{self::D::m}{<inapplicable>}.<core::int>(42){(invalid-type) → invalid-type};
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.outline.expect
index 3d1f663..5d1e1c0 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,23 +21,13 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(self::C::m::T% x) → self::C::m::T%
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   method m(invalid-type x) → invalid-type
     ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart
index 89c2a52..8935116 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart
@@ -1,16 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>(List<T> s) => null;
-test() {
-  String x = /*@ typeArgs=String* */ f(/*@ typeArgs=String* */ ['hi']);
-  String y =
-      /*@ typeArgs=String* */ f(
-          /*@ typeArgs=String* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
-}
+T f<T>(List<T> s) => throw '';
 
-main() {}
+test() {
+  String x = /*@typeArgs=String*/ f(/*@typeArgs=String*/ ['hi']);
+  String y =
+      /*@typeArgs=String*/ f(
+          /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.textual_outline.expect
index 715dadf..f72a938 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.textual_outline.expect
@@ -1,6 +1,4 @@
-// @dart = 2.9
 library test;
 
-T f<T>(List<T> s) => null;
+T f<T>(List<T> s) => throw '';
 test() {}
-main() {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.textual_outline_modelled.expect
index 3de7c0a..f72a938 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.textual_outline_modelled.expect
@@ -1,6 +1,4 @@
-// @dart = 2.9
 library test;
 
-T f<T>(List<T> s) => null;
-main() {}
+T f<T>(List<T> s) => throw '';
 test() {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.expect
index 79f41c9..93e00e2 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.expect
@@ -1,20 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-//           /*@ typeArgs=String* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
-//                                                                               ^
+// pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:14:76: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
+//                                                                            ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>(core::List<self::f::T*>* s) → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>(core::List<self::f::T%> s) → self::f::T%
+  return throw "";
 static method test() → dynamic {
-  core::String* x = self::f<core::String*>(<core::String*>["hi"]);
-  core::String* y = self::f<core::String*>(<core::String*>[invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-          /*@ typeArgs=String* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
-                                                                              ^" in 42 as{TypeError} core::String*]);
+  core::String x = self::f<core::String>(<core::String>["hi"]);
+  core::String y = self::f<core::String>(<core::String>[invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:14:76: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+          /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
+                                                                           ^" in 42 as{TypeError,ForNonNullableByDefault} core::String]);
 }
-static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.modular.expect
index 79f41c9..93e00e2 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.modular.expect
@@ -1,20 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-//           /*@ typeArgs=String* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
-//                                                                               ^
+// pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:14:76: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
+//                                                                            ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>(core::List<self::f::T*>* s) → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>(core::List<self::f::T%> s) → self::f::T%
+  return throw "";
 static method test() → dynamic {
-  core::String* x = self::f<core::String*>(<core::String*>["hi"]);
-  core::String* y = self::f<core::String*>(<core::String*>[invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-          /*@ typeArgs=String* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
-                                                                              ^" in 42 as{TypeError} core::String*]);
+  core::String x = self::f<core::String>(<core::String>["hi"]);
+  core::String y = self::f<core::String>(<core::String>[invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:14:76: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+          /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
+                                                                           ^" in 42 as{TypeError,ForNonNullableByDefault} core::String]);
 }
-static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.outline.expect
index 649bb11..47f1bcc 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.outline.expect
@@ -1,10 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>(core::List<self::f::T*>* s) → self::f::T*
+static method f<T extends core::Object? = dynamic>(core::List<self::f::T%> s) → self::f::T%
   ;
 static method test() → dynamic
   ;
-static method main() → dynamic
-  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.transformed.expect
index 71fc12a..7a33c99 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.transformed.expect
@@ -1,20 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-//           /*@ typeArgs=String* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
-//                                                                               ^
+// pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:14:76: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
+//                                                                            ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>(core::List<self::f::T*>* s) → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>(core::List<self::f::T%> s) → self::f::T%
+  return throw "";
 static method test() → dynamic {
-  core::String* x = self::f<core::String*>(core::_GrowableList::_literal1<core::String*>("hi"));
-  core::String* y = self::f<core::String*>(core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
-          /*@ typeArgs=String* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
-                                                                              ^" in 42 as{TypeError} core::String*));
+  core::String x = self::f<core::String>(core::_GrowableList::_literal1<core::String>("hi"));
+  core::String y = self::f<core::String>(core::_GrowableList::_literal1<core::String>(invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:14:76: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+          /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
+                                                                           ^" in 42 as{TypeError,ForNonNullableByDefault} core::String));
 }
-static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart
index 61d1113..d878fef 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart
@@ -1,37 +1,35 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-void test() {
-  List<int> o;
-  int y = o. /*@ typeArgs=int* */ /*@target=Iterable.fold*/ fold(
+void test(List<int> o) {
+  int y = o. /*@typeArgs=int*/ /*@target=Iterable.fold*/ fold(
       0,
-      /*@ returnType=int* */ (/*@ type=int* */ x,
-              /*@ type=int* */ y) =>
+      /*@returnType=int*/ (/*@type=int*/ x,
+              /*@type=int*/ y) =>
           x /*@target=num.+*/ + y);
-  var /*@ type=dynamic */ z =
-      o. /*@ typeArgs=dynamic */ /*@target=Iterable.fold*/ fold(
+  var /*@type=int*/ z =
+      o. /*@typeArgs=int*/ /*@target=Iterable.fold*/ fold(
           0,
-          /*@ returnType=dynamic */ (/*@ type=dynamic */ x,
-              /*@ type=int* */ y) => /*info:DYNAMIC_INVOKE*/ x + y);
+          /*@returnType=int*/ (/*@type=int*/ x,
+              /*@type=int*/ y) => /*info:DYNAMIC_INVOKE*/ x /*@target=num.+*/+ y);
   y = /*info:DYNAMIC_CAST*/ z;
 }
 
-void functionExpressionInvocation() {
-  List<int> o;
-  int y = (o. /*@target=Iterable.fold*/ fold) /*@ typeArgs=int* */ (
+void functionExpressionInvocation(List<int> o) {
+  int y = (o. /*@target=Iterable.fold*/ fold) /*@typeArgs=int*/ (
       0,
-      /*@ returnType=int* */ (/*@ type=int* */ x,
-              /*@ type=int* */ y) =>
+      /*@returnType=int*/ (/*@type=int*/ x,
+              /*@type=int*/ y) =>
           x /*@target=num.+*/ + y);
-  var /*@ type=dynamic */ z =
-      (o. /*@target=Iterable.fold*/ fold) /*@ typeArgs=dynamic */ (
+  var /*@type=int*/ z =
+      (o. /*@target=Iterable.fold*/ fold) /*@typeArgs=int*/ (
           0,
-          /*@ returnType=dynamic */ (/*@ type=dynamic */ x,
-              /*@ type=int* */ y) => /*info:DYNAMIC_INVOKE*/ x + y);
+          /*@returnType=int*/ (/*@type=int*/ x,
+              /*@type=int*/ y) => /*info:DYNAMIC_INVOKE*/ x /*@target=num.+*/+ y);
   y = /*info:DYNAMIC_CAST*/ z;
 }
 
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.textual_outline.expect
index 7227f33..3e6b803 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.textual_outline.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
-void test() {}
-void functionExpressionInvocation() {}
+void test(List<int> o) {}
+void functionExpressionInvocation(List<int> o) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.textual_outline_modelled.expect
index 7f28e4c..de51537 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
 main() {}
-void functionExpressionInvocation() {}
-void test() {}
+void functionExpressionInvocation(List<int> o) {}
+void test(List<int> o) {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.expect
index b0966cb..7540e9e 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.expect
@@ -1,17 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test() → void {
-  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){(core::num*) →* core::int*}){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
-  dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x{dynamic}.+(y)){(dynamic, (dynamic, core::int*) →* dynamic) →* dynamic};
-  y = z as{TypeError,ForDynamic} core::int*;
+static method test(core::List<core::int> o) → void {
+  core::int y = o.{core::Iterable::fold}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y){(core::num) → core::int}){(core::int, (core::int, core::int) → core::int) → core::int};
+  core::int z = o.{core::Iterable::fold}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y){(core::num) → core::int}){(core::int, (core::int, core::int) → core::int) → core::int};
+  y = z;
 }
-static method functionExpressionInvocation() → void {
-  core::List<core::int*>* o;
-  core::int* y = o.{core::Iterable::fold}{<T extends core::Object* = dynamic>(T*, (T*, core::int*) →* T*) →* T*}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y){(core::num*) →* core::int*}){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
-  dynamic z = o.{core::Iterable::fold}{<T extends core::Object* = dynamic>(T*, (T*, core::int*) →* T*) →* T*}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x{dynamic}.+(y)){(dynamic, (dynamic, core::int*) →* dynamic) →* dynamic};
-  y = z as{TypeError,ForDynamic} core::int*;
+static method functionExpressionInvocation(core::List<core::int> o) → void {
+  core::int y = o.{core::Iterable::fold}{<T extends core::Object? = dynamic>(T%, (T%, core::int) → T%) → T%}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y){(core::num) → core::int}){(core::int, (core::int, core::int) → core::int) → core::int};
+  core::int z = o.{core::Iterable::fold}{<T extends core::Object? = dynamic>(T%, (T%, core::int) → T%) → T%}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y){(core::num) → core::int}){(core::int, (core::int, core::int) → core::int) → core::int};
+  y = z;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.modular.expect
index b0966cb..7540e9e 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.modular.expect
@@ -1,17 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test() → void {
-  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){(core::num*) →* core::int*}){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
-  dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x{dynamic}.+(y)){(dynamic, (dynamic, core::int*) →* dynamic) →* dynamic};
-  y = z as{TypeError,ForDynamic} core::int*;
+static method test(core::List<core::int> o) → void {
+  core::int y = o.{core::Iterable::fold}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y){(core::num) → core::int}){(core::int, (core::int, core::int) → core::int) → core::int};
+  core::int z = o.{core::Iterable::fold}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y){(core::num) → core::int}){(core::int, (core::int, core::int) → core::int) → core::int};
+  y = z;
 }
-static method functionExpressionInvocation() → void {
-  core::List<core::int*>* o;
-  core::int* y = o.{core::Iterable::fold}{<T extends core::Object* = dynamic>(T*, (T*, core::int*) →* T*) →* T*}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y){(core::num*) →* core::int*}){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
-  dynamic z = o.{core::Iterable::fold}{<T extends core::Object* = dynamic>(T*, (T*, core::int*) →* T*) →* T*}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x{dynamic}.+(y)){(dynamic, (dynamic, core::int*) →* dynamic) →* dynamic};
-  y = z as{TypeError,ForDynamic} core::int*;
+static method functionExpressionInvocation(core::List<core::int> o) → void {
+  core::int y = o.{core::Iterable::fold}{<T extends core::Object? = dynamic>(T%, (T%, core::int) → T%) → T%}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y){(core::num) → core::int}){(core::int, (core::int, core::int) → core::int) → core::int};
+  core::int z = o.{core::Iterable::fold}{<T extends core::Object? = dynamic>(T%, (T%, core::int) → T%) → T%}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y){(core::num) → core::int}){(core::int, (core::int, core::int) → core::int) → core::int};
+  y = z;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.outline.expect
index b3ae44d..fae9d0e 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.outline.expect
@@ -1,9 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method test() → void
+static method test(core::List<core::int> o) → void
   ;
-static method functionExpressionInvocation() → void
+static method functionExpressionInvocation(core::List<core::int> o) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.transformed.expect
index b0966cb..7540e9e 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.transformed.expect
@@ -1,17 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test() → void {
-  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){(core::num*) →* core::int*}){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
-  dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x{dynamic}.+(y)){(dynamic, (dynamic, core::int*) →* dynamic) →* dynamic};
-  y = z as{TypeError,ForDynamic} core::int*;
+static method test(core::List<core::int> o) → void {
+  core::int y = o.{core::Iterable::fold}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y){(core::num) → core::int}){(core::int, (core::int, core::int) → core::int) → core::int};
+  core::int z = o.{core::Iterable::fold}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y){(core::num) → core::int}){(core::int, (core::int, core::int) → core::int) → core::int};
+  y = z;
 }
-static method functionExpressionInvocation() → void {
-  core::List<core::int*>* o;
-  core::int* y = o.{core::Iterable::fold}{<T extends core::Object* = dynamic>(T*, (T*, core::int*) →* T*) →* T*}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y){(core::num*) →* core::int*}){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
-  dynamic z = o.{core::Iterable::fold}{<T extends core::Object* = dynamic>(T*, (T*, core::int*) →* T*) →* T*}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x{dynamic}.+(y)){(dynamic, (dynamic, core::int*) →* dynamic) →* dynamic};
-  y = z as{TypeError,ForDynamic} core::int*;
+static method functionExpressionInvocation(core::List<core::int> o) → void {
+  core::int y = o.{core::Iterable::fold}{<T extends core::Object? = dynamic>(T%, (T%, core::int) → T%) → T%}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y){(core::num) → core::int}){(core::int, (core::int, core::int) → core::int) → core::int};
+  core::int z = o.{core::Iterable::fold}{<T extends core::Object? = dynamic>(T%, (T%, core::int) → T%) → T%}<core::int>(0, (core::int x, core::int y) → core::int => x.{core::num::+}(y){(core::num) → core::int}){(core::int, (core::int, core::int) → core::int) → core::int};
+  y = z;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart
index 73bbfa1..48404eb 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.textual_outline.expect
index 7a24e2d..9964182 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.textual_outline_modelled.expect
index f6ecc9b..c3f4d33 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.expect
index 7241ba2..e4a0657 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,34 +36,24 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method m(dynamic x) → dynamic
     return x;
-  method g(core::int* x) → dynamic
+  method g(core::int x) → dynamic
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method m<T extends core::Object* = dynamic>(self::D::m::T* x) → self::D::m::T*
+  method m<T extends core::Object? = dynamic>(self::D::m::T% x) → self::D::m::T%
     return x;
-  method g<T extends core::Object* = dynamic>(self::D::g::T* x) → self::D::g::T*
+  method g<T extends core::Object? = dynamic>(self::D::g::T% x) → self::D::g::T%
     return x;
 }
 static method main() → dynamic {
-  core::int* y = (new self::D::•() as self::C*).{self::C::m}(42){(dynamic) →* dynamic} as{TypeError,ForDynamic} core::int*;
+  core::int y = (new self::D::•() as{ForNonNullableByDefault} self::C).{self::C::m}(42){(dynamic) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.modular.expect
index 7241ba2..e4a0657 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,34 +36,24 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method m(dynamic x) → dynamic
     return x;
-  method g(core::int* x) → dynamic
+  method g(core::int x) → dynamic
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method m<T extends core::Object* = dynamic>(self::D::m::T* x) → self::D::m::T*
+  method m<T extends core::Object? = dynamic>(self::D::m::T% x) → self::D::m::T%
     return x;
-  method g<T extends core::Object* = dynamic>(self::D::g::T* x) → self::D::g::T*
+  method g<T extends core::Object? = dynamic>(self::D::g::T% x) → self::D::g::T%
     return x;
 }
 static method main() → dynamic {
-  core::int* y = (new self::D::•() as self::C*).{self::C::m}(42){(dynamic) →* dynamic} as{TypeError,ForDynamic} core::int*;
+  core::int y = (new self::D::•() as{ForNonNullableByDefault} self::C).{self::C::m}(42){(dynamic) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.outline.expect
index 1f56a3f..b5123bf 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,29 +36,19 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method m(dynamic x) → dynamic
     ;
-  method g(core::int* x) → dynamic
+  method g(core::int x) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  method m<T extends core::Object* = dynamic>(self::D::m::T* x) → self::D::m::T*
+  method m<T extends core::Object? = dynamic>(self::D::m::T% x) → self::D::m::T%
     ;
-  method g<T extends core::Object* = dynamic>(self::D::g::T* x) → self::D::g::T*
+  method g<T extends core::Object? = dynamic>(self::D::g::T% x) → self::D::g::T%
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart
index c6130e2..03f1b63 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C<T> extends D<T> {
-  f<U>(x) {}
+  f<U>(x) => throw '';
 }
 
 class D<T> {
-  F<U> f<U>(U u) => null;
+  F<U> f<U>(U u) => throw '';
 }
 
 typedef void F<V>(V v);
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.textual_outline.expect
index d66ee02..d011015 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class C<T> extends D<T> {
-  f<U>(x) {}
+  f<U>(x) => throw '';
 }
 
 class D<T> {
-  F<U> f<U>(U u) => null;
+  F<U> f<U>(U u) => throw '';
 }
 
 typedef void F<V>(V v);
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.textual_outline_modelled.expect
index 3c49c2f..6a8757b 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class C<T> extends D<T> {
-  f<U>(x) {}
+  f<U>(x) => throw '';
 }
 
 class D<T> {
-  F<U> f<U>(U u) => null;
+  F<U> f<U>(U u) => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.expect
index 6d57e34..9a2c836 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.expect
@@ -1,29 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant V extends core::Object* = dynamic> = (V*) →* void;
-class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant V extends core::Object? = dynamic> = (V%) → void;
+class C<T extends core::Object? = dynamic> extends self::D<self::C::T%> {
+  synthetic constructor •() → self::C<self::C::T%>
     : super self::D::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → (self::C::f::U*) →* void {}
+  method f<U extends core::Object? = dynamic>(self::C::f::U% x) → (self::C::f::U%) → void
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::D::f::U* u) → (self::D::f::U*) →* void
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends core::Object? = dynamic>(self::D::f::U% u) → (self::D::f::U%) → void
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.modular.expect
index 6d57e34..9a2c836 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.modular.expect
@@ -1,29 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant V extends core::Object* = dynamic> = (V*) →* void;
-class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant V extends core::Object? = dynamic> = (V%) → void;
+class C<T extends core::Object? = dynamic> extends self::D<self::C::T%> {
+  synthetic constructor •() → self::C<self::C::T%>
     : super self::D::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → (self::C::f::U*) →* void {}
+  method f<U extends core::Object? = dynamic>(self::C::f::U% x) → (self::C::f::U%) → void
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::D::f::U* u) → (self::D::f::U*) →* void
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends core::Object? = dynamic>(self::D::f::U% u) → (self::D::f::U%) → void
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.outline.expect
index e555d5a..15d9665 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.outline.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant V extends core::Object* = dynamic> = (V*) →* void;
-class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant V extends core::Object? = dynamic> = (V%) → void;
+class C<T extends core::Object? = dynamic> extends self::D<self::C::T%> {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → (self::C::f::U*) →* void
+  method f<U extends core::Object? = dynamic>(self::C::f::U% x) → (self::C::f::U%) → void
     ;
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     ;
-  method f<U extends core::Object* = dynamic>(self::D::f::U* u) → (self::D::f::U*) →* void
+  method f<U extends core::Object? = dynamic>(self::D::f::U% u) → (self::D::f::U%) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.transformed.expect
index 6d57e34..9a2c836 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.transformed.expect
@@ -1,29 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant V extends core::Object* = dynamic> = (V*) →* void;
-class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<contravariant V extends core::Object? = dynamic> = (V%) → void;
+class C<T extends core::Object? = dynamic> extends self::D<self::C::T%> {
+  synthetic constructor •() → self::C<self::C::T%>
     : super self::D::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → (self::C::f::U*) →* void {}
+  method f<U extends core::Object? = dynamic>(self::C::f::U% x) → (self::C::f::U%) → void
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::D::f::U* u) → (self::D::f::U*) →* void
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends core::Object? = dynamic>(self::D::f::U% u) → (self::D::f::U%) → void
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart
index 2ba38e0..8ca88c6 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.textual_outline.expect
index 709c06d..7bcb050 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> extends D<T> {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.textual_outline_modelled.expect
index 2421964..6958c93 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class D<T> {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.expect
index 58ca700..b3a4c4c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef G<V extends core::Object* = dynamic> = () →* core::List<V*>*;
-class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef G<V extends core::Object? = dynamic> = () → core::List<V%>;
+class C<T extends core::Object? = dynamic> extends self::D<self::C::T%> {
+  synthetic constructor •() → self::C<self::C::T%>
     : super self::D::•()
     ;
-  method f<U extends core::Object* = dynamic>(() →* core::List<self::C::f::U*>* g) → void
+  method f<U extends core::Object? = dynamic>(() → core::List<self::C::f::U%> g) → void
     return null;
 }
-abstract class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+abstract class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract method f<U extends core::Object* = dynamic>(() →* core::List<self::D::f::U*>* g) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f<U extends core::Object? = dynamic>(() → core::List<self::D::f::U%> g) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.modular.expect
index 58ca700..b3a4c4c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.modular.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef G<V extends core::Object* = dynamic> = () →* core::List<V*>*;
-class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef G<V extends core::Object? = dynamic> = () → core::List<V%>;
+class C<T extends core::Object? = dynamic> extends self::D<self::C::T%> {
+  synthetic constructor •() → self::C<self::C::T%>
     : super self::D::•()
     ;
-  method f<U extends core::Object* = dynamic>(() →* core::List<self::C::f::U*>* g) → void
+  method f<U extends core::Object? = dynamic>(() → core::List<self::C::f::U%> g) → void
     return null;
 }
-abstract class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+abstract class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract method f<U extends core::Object* = dynamic>(() →* core::List<self::D::f::U*>* g) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f<U extends core::Object? = dynamic>(() → core::List<self::D::f::U%> g) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.outline.expect
index 49d55a4..e0c0d79 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.outline.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef G<V extends core::Object* = dynamic> = () →* core::List<V*>*;
-class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef G<V extends core::Object? = dynamic> = () → core::List<V%>;
+class C<T extends core::Object? = dynamic> extends self::D<self::C::T%> {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f<U extends core::Object* = dynamic>(() →* core::List<self::C::f::U*>* g) → void
+  method f<U extends core::Object? = dynamic>(() → core::List<self::C::f::U%> g) → void
     ;
 }
-abstract class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+abstract class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     ;
-  abstract method f<U extends core::Object* = dynamic>(() →* core::List<self::D::f::U*>* g) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f<U extends core::Object? = dynamic>(() → core::List<self::D::f::U%> g) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.transformed.expect
index 58ca700..b3a4c4c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.transformed.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef G<V extends core::Object* = dynamic> = () →* core::List<V*>*;
-class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef G<V extends core::Object? = dynamic> = () → core::List<V%>;
+class C<T extends core::Object? = dynamic> extends self::D<self::C::T%> {
+  synthetic constructor •() → self::C<self::C::T%>
     : super self::D::•()
     ;
-  method f<U extends core::Object* = dynamic>(() →* core::List<self::C::f::U*>* g) → void
+  method f<U extends core::Object? = dynamic>(() → core::List<self::C::f::U%> g) → void
     return null;
 }
-abstract class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+abstract class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract method f<U extends core::Object* = dynamic>(() →* core::List<self::D::f::U*>* g) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f<U extends core::Object? = dynamic>(() → core::List<self::D::f::U%> g) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart
index 42fabfa..a8a848f 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C<T> extends D<T> {
-  f<U>(x) {}
+  f<U>(x) => throw '';
 }
 
 class D<T> {
-  F<U> f<U>(U u) => null;
+  F<U> f<U>(U u) => throw '';
 }
 
 typedef V F<V>();
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.textual_outline.expect
index fe58fcb..183a5c1 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class C<T> extends D<T> {
-  f<U>(x) {}
+  f<U>(x) => throw '';
 }
 
 class D<T> {
-  F<U> f<U>(U u) => null;
+  F<U> f<U>(U u) => throw '';
 }
 
 typedef V F<V>();
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.textual_outline_modelled.expect
index 1669140..d4714d1 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class C<T> extends D<T> {
-  f<U>(x) {}
+  f<U>(x) => throw '';
 }
 
 class D<T> {
-  F<U> f<U>(U u) => null;
+  F<U> f<U>(U u) => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.expect
index 60d43bc..79957b0 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.expect
@@ -1,29 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<V extends core::Object* = dynamic> = () →* V*;
-class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<V extends core::Object? = dynamic> = () → V%;
+class C<T extends core::Object? = dynamic> extends self::D<self::C::T%> {
+  synthetic constructor •() → self::C<self::C::T%>
     : super self::D::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → () →* self::C::f::U* {}
+  method f<U extends core::Object? = dynamic>(self::C::f::U% x) → () → self::C::f::U%
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::D::f::U* u) → () →* self::D::f::U*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends core::Object? = dynamic>(self::D::f::U% u) → () → self::D::f::U%
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.modular.expect
index 60d43bc..79957b0 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.modular.expect
@@ -1,29 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<V extends core::Object* = dynamic> = () →* V*;
-class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<V extends core::Object? = dynamic> = () → V%;
+class C<T extends core::Object? = dynamic> extends self::D<self::C::T%> {
+  synthetic constructor •() → self::C<self::C::T%>
     : super self::D::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → () →* self::C::f::U* {}
+  method f<U extends core::Object? = dynamic>(self::C::f::U% x) → () → self::C::f::U%
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::D::f::U* u) → () →* self::D::f::U*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends core::Object? = dynamic>(self::D::f::U% u) → () → self::D::f::U%
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.outline.expect
index a085008..67aaabb 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.outline.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<V extends core::Object* = dynamic> = () →* V*;
-class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<V extends core::Object? = dynamic> = () → V%;
+class C<T extends core::Object? = dynamic> extends self::D<self::C::T%> {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → () →* self::C::f::U*
+  method f<U extends core::Object? = dynamic>(self::C::f::U% x) → () → self::C::f::U%
     ;
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     ;
-  method f<U extends core::Object* = dynamic>(self::D::f::U* u) → () →* self::D::f::U*
+  method f<U extends core::Object? = dynamic>(self::D::f::U% u) → () → self::D::f::U%
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.transformed.expect
index 60d43bc..79957b0 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.transformed.expect
@@ -1,29 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<V extends core::Object* = dynamic> = () →* V*;
-class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
-  synthetic constructor •() → self::C<self::C::T*>*
+typedef F<V extends core::Object? = dynamic> = () → V%;
+class C<T extends core::Object? = dynamic> extends self::D<self::C::T%> {
+  synthetic constructor •() → self::C<self::C::T%>
     : super self::D::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → () →* self::C::f::U* {}
+  method f<U extends core::Object? = dynamic>(self::C::f::U% x) → () → self::C::f::U%
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::D::f::U* u) → () →* self::D::f::U*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends core::Object? = dynamic>(self::D::f::U% u) → () → self::D::f::U%
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart
index 4787183..62d4090 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
index a033796..f285551 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
@@ -2,81 +2,81 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:26:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
 //                                                                      ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
 //       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
 //                                                                         ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:32:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
 //       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
 //                                                                         ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:31:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:33:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
 //                                                                      ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:32:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:34:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
 //                                                                      ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:45:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
 //                                                                 ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:48:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
 //   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
 //                                                                        ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:49:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
 //   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
 //                                                                        ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:48:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:50:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
 //                                                                 ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:49:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:51:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
 //                                                                 ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:73:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
-//  - 'Object' is from 'dart:core'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//       . /*@target=C.m*/ m);
-//                         ^
-//
 // pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:75:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //       . /*@target=C.m*/ m);
 //                         ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:82:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:77:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //       . /*@target=C.m*/ m);
 //                         ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:84:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:88:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
 //           . /*@target=C.m*/ m);
 //                             ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:91:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
 //           . /*@target=C.m*/ m);
 //                             ^
 //
@@ -114,10 +114,10 @@
   self::takeIIO(#C2);
   self::takeDDO(#C3);
   self::takeOOI(#C5 as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                         ^" in #C4 as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:32:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                         ^" in #C4 as{TypeError} (core::int*, core::double*) →* core::double*);
   self::takeOON(#C5 as{TypeError} (core::Object*, core::Object*) →* core::num*);
@@ -132,10 +132,10 @@
   self::takeIIO(#C7);
   self::takeDDO(#C8);
   self::takeOOI(#C10 as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:48:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                        ^" in #C9 as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:49:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                        ^" in #C9 as{TypeError} (core::int*, core::double*) →* core::double*);
   self::takeOON(#C10 as{TypeError} (core::Object*, core::Object*) →* core::num*);
@@ -152,10 +152,10 @@
   self::takeOON((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeOOO((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeOOI((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:88:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
           . /*@target=C.m*/ m);
                             ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:91:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
           . /*@target=C.m*/ m);
                             ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.modular.expect
index a033796..f285551 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.modular.expect
@@ -2,81 +2,81 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:26:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
 //                                                                      ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
 //       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
 //                                                                         ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:32:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
 //       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
 //                                                                         ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:31:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:33:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
 //                                                                      ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:32:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:34:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
 //                                                                      ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:45:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
 //                                                                 ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:48:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
 //   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
 //                                                                        ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:49:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
 //   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
 //                                                                        ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:48:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:50:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
 //                                                                 ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:49:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:51:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
 //                                                                 ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:73:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
-//  - 'Object' is from 'dart:core'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//       . /*@target=C.m*/ m);
-//                         ^
-//
 // pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:75:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //       . /*@target=C.m*/ m);
 //                         ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:82:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:77:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //       . /*@target=C.m*/ m);
 //                         ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:84:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:88:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
 //           . /*@target=C.m*/ m);
 //                             ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:91:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
 //           . /*@target=C.m*/ m);
 //                             ^
 //
@@ -114,10 +114,10 @@
   self::takeIIO(#C2);
   self::takeDDO(#C3);
   self::takeOOI(#C5 as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                         ^" in #C4 as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:32:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                         ^" in #C4 as{TypeError} (core::int*, core::double*) →* core::double*);
   self::takeOON(#C5 as{TypeError} (core::Object*, core::Object*) →* core::num*);
@@ -132,10 +132,10 @@
   self::takeIIO(#C7);
   self::takeDDO(#C8);
   self::takeOOI(#C10 as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:48:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                        ^" in #C9 as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:49:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                        ^" in #C9 as{TypeError} (core::int*, core::double*) →* core::double*);
   self::takeOON(#C10 as{TypeError} (core::Object*, core::Object*) →* core::num*);
@@ -152,10 +152,10 @@
   self::takeOON((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeOOO((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeOOI((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:88:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
           . /*@target=C.m*/ m);
                             ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:91:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
           . /*@target=C.m*/ m);
                             ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
index a033796..f285551 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
@@ -2,81 +2,81 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:26:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
 //                                                                      ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
 //       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
 //                                                                         ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:32:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
 //       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
 //                                                                         ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:31:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:33:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
 //                                                                      ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:32:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:34:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
 //                                                                      ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:45:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
 //                                                                 ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:48:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
 //   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
 //                                                                        ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:49:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
 //   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
 //                                                                        ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:48:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:50:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
 //                                                                 ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:49:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:51:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
 //                                                                 ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:73:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
-//  - 'Object' is from 'dart:core'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-//       . /*@target=C.m*/ m);
-//                         ^
-//
 // pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:75:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //       . /*@target=C.m*/ m);
 //                         ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:82:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:77:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
 //  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //       . /*@target=C.m*/ m);
 //                         ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:84:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:88:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
 //           . /*@target=C.m*/ m);
 //                             ^
 //
-// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:91:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
 //           . /*@target=C.m*/ m);
 //                             ^
 //
@@ -114,10 +114,10 @@
   self::takeIIO(#C2);
   self::takeDDO(#C3);
   self::takeOOI(#C5 as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                         ^" in #C4 as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:32:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                         ^" in #C4 as{TypeError} (core::int*, core::double*) →* core::double*);
   self::takeOON(#C5 as{TypeError} (core::Object*, core::Object*) →* core::num*);
@@ -132,10 +132,10 @@
   self::takeIIO(#C7);
   self::takeDDO(#C8);
   self::takeOOI(#C10 as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:48:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                        ^" in #C9 as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:49:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                        ^" in #C9 as{TypeError} (core::int*, core::double*) →* core::double*);
   self::takeOON(#C10 as{TypeError} (core::Object*, core::Object*) →* core::num*);
@@ -152,10 +152,10 @@
   self::takeOON((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeOOO((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeOOI((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
-  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:88:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
           . /*@target=C.m*/ m);
                             ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
-  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:91:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
           . /*@target=C.m*/ m);
                             ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart
new file mode 100644
index 0000000..cf4d948
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart
@@ -0,0 +1,105 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:math' as math;
+import 'dart:math' show min;
+
+class C {
+  T m<T extends num>(T x, T y) => throw '';
+}
+
+test() {
+  takeIII(math.max);
+  takeDDD(math.max);
+  takeNNN(math.max);
+  takeIDN(math.max);
+  takeDIN(math.max);
+  takeIIN(math.max);
+  takeDDN(math.max);
+  takeIIO(math.max);
+  takeDDO(math.max);
+
+  takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+  takeIDI(
+      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+  takeDID(
+      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+  takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+  takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+
+// Also test SimpleIdentifier
+  takeIII(min);
+  takeDDD(min);
+  takeNNN(min);
+  takeIDN(min);
+  takeDIN(min);
+  takeIIN(min);
+  takeDDN(min);
+  takeIIO(min);
+  takeDDO(min);
+
+  takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+  takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+  takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+  takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+  takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+
+// Also PropertyAccess
+  takeIII(new C(). /*@target=C.m*/ m);
+  takeDDD(new C(). /*@target=C.m*/ m);
+  takeNNN(new C(). /*@target=C.m*/ m);
+  takeIDN(new C(). /*@target=C.m*/ m);
+  takeDIN(new C(). /*@target=C.m*/ m);
+  takeIIN(new C(). /*@target=C.m*/ m);
+  takeDDN(new C(). /*@target=C.m*/ m);
+  takeIIO(new C(). /*@target=C.m*/ m);
+  takeDDO(new C(). /*@target=C.m*/ m);
+
+// Note: this is a warning because a downcast of a method tear-off could work
+// (derived method can be a subtype):
+//
+//     class D extends C {
+//       S m<S extends num>(Object x, Object y);
+//     }
+//
+// That's legal because we're loosening parameter types.
+//
+// We do issue the inference error though, similar to generic function calls.
+  takeOON(/*error:COULD_NOT_INFER,info:DOWN_CAST_COMPOSITE*/ new C()
+      . /*@target=C.m*/ m);
+  takeOOO(/*error:COULD_NOT_INFER,info:DOWN_CAST_COMPOSITE*/ new C()
+      . /*@target=C.m*/ m);
+
+// Note: this is a warning because a downcast of a method tear-off could work
+// in "normal" Dart, due to bivariance.
+//
+// We do issue the inference error though, similar to generic function calls.
+  takeOOI(/*error:COULD_NOT_INFER,info:DOWN_CAST_COMPOSITE*/ new C()
+      . /*@target=C.m*/ m);
+
+  takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ new C()
+      . /*@target=C.m*/ m);
+  takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ new C()
+      . /*@target=C.m*/ m);
+}
+
+void takeIII(int fn(int a, int b)) {}
+void takeDDD(double fn(double a, double b)) {}
+void takeIDI(int fn(double a, int b)) {}
+void takeDID(double fn(int a, double b)) {}
+void takeIDN(num fn(double a, int b)) {}
+void takeDIN(num fn(int a, double b)) {}
+void takeIIN(num fn(int a, int b)) {}
+void takeDDN(num fn(double a, double b)) {}
+void takeNNN(num fn(num a, num b)) {}
+void takeOON(num fn(Object a, Object b)) {}
+void takeOOO(num fn(Object a, Object b)) {}
+void takeOOI(int fn(Object a, Object b)) {}
+void takeIIO(Object fn(int a, int b)) {}
+void takeDDO(Object fn(double a, double b)) {}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.textual_outline.expect
new file mode 100644
index 0000000..df9caf1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.textual_outline.expect
@@ -0,0 +1,25 @@
+library test;
+
+import 'dart:math' as math;
+import 'dart:math' show min;
+
+class C {
+  T m<T extends num>(T x, T y) => throw '';
+}
+
+test() {}
+void takeIII(int fn(int a, int b)) {}
+void takeDDD(double fn(double a, double b)) {}
+void takeIDI(int fn(double a, int b)) {}
+void takeDID(double fn(int a, double b)) {}
+void takeIDN(num fn(double a, int b)) {}
+void takeDIN(num fn(int a, double b)) {}
+void takeIIN(num fn(int a, int b)) {}
+void takeDDN(num fn(double a, double b)) {}
+void takeNNN(num fn(num a, num b)) {}
+void takeOON(num fn(Object a, Object b)) {}
+void takeOOO(num fn(Object a, Object b)) {}
+void takeOOI(int fn(Object a, Object b)) {}
+void takeIIO(Object fn(int a, int b)) {}
+void takeDDO(Object fn(double a, double b)) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c62a9cd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.textual_outline_modelled.expect
@@ -0,0 +1,25 @@
+library test;
+
+import 'dart:math' as math;
+import 'dart:math' show min;
+
+class C {
+  T m<T extends num>(T x, T y) => throw '';
+}
+
+main() {}
+test() {}
+void takeDDD(double fn(double a, double b)) {}
+void takeDDN(num fn(double a, double b)) {}
+void takeDDO(Object fn(double a, double b)) {}
+void takeDID(double fn(int a, double b)) {}
+void takeDIN(num fn(int a, double b)) {}
+void takeIDI(int fn(double a, int b)) {}
+void takeIDN(num fn(double a, int b)) {}
+void takeIII(int fn(int a, int b)) {}
+void takeIIN(num fn(int a, int b)) {}
+void takeIIO(Object fn(int a, int b)) {}
+void takeNNN(num fn(num a, num b)) {}
+void takeOOI(int fn(Object a, Object b)) {}
+void takeOON(num fn(Object a, Object b)) {}
+void takeOOO(num fn(Object a, Object b)) {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.weak.expect
new file mode 100644
index 0000000..13d3bf3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.weak.expect
@@ -0,0 +1,251 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:26:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:26:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+//                                                                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+//                                                                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:31:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:31:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:32:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:32:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:45:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:45:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+//   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+//   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:48:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:48:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:49:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:49:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:73:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:73:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:75:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:75:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:82:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:82:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:85:25: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:87:25: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:math" as math;
+import "dart:math" show min;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method m<T extends core::num>(self::C::m::T x, self::C::m::T y) → self::C::m::T
+    return throw "";
+}
+static method test() → dynamic {
+  self::takeIII(#C2);
+  self::takeDDD(#C3);
+  self::takeNNN(#C4);
+  self::takeIDN(#C4);
+  self::takeDIN(#C4);
+  self::takeIIN(#C2);
+  self::takeDDN(#C3);
+  self::takeIIO(#C2);
+  self::takeDDO(#C3);
+  self::takeOOI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:26:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+                                                                     ^" in #C5 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::int);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+                                                                        ^" in #C4 as{TypeError,ForNonNullableByDefault} (core::double, core::int) → core::int);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+                                                                        ^" in #C4 as{TypeError,ForNonNullableByDefault} (core::int, core::double) → core::double);
+  self::takeOON(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:31:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+                                                                     ^" in #C5 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeOOO(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:32:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+                                                                     ^" in #C5 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeIII(#C7);
+  self::takeDDD(#C8);
+  self::takeNNN(#C9);
+  self::takeIDN(#C9);
+  self::takeDIN(#C9);
+  self::takeIIN(#C7);
+  self::takeDDN(#C8);
+  self::takeIIO(#C7);
+  self::takeDDO(#C8);
+  self::takeOOI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:45:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+                                                                ^" in #C10 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::int);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+                                                                       ^" in #C9 as{TypeError,ForNonNullableByDefault} (core::double, core::int) → core::int);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+                                                                       ^" in #C9 as{TypeError,ForNonNullableByDefault} (core::int, core::double) → core::double);
+  self::takeOON(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:48:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+                                                                ^" in #C10 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeOOO(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:49:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+                                                                ^" in #C10 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeIII(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::int>);
+  self::takeDDD(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::double>);
+  self::takeNNN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>);
+  self::takeIDN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>);
+  self::takeDIN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>);
+  self::takeIIN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::int>);
+  self::takeDDN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::double>);
+  self::takeIIO(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::int>);
+  self::takeDDO(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::double>);
+  self::takeOON(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:73:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::Object>) as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeOOO(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:75:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::Object>) as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeOOI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:82:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::Object>) as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::int);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:85:25: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>) as{TypeError,ForNonNullableByDefault} (core::double, core::int) → core::int);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:87:25: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>) as{TypeError,ForNonNullableByDefault} (core::int, core::double) → core::double);
+}
+static method takeIII((core::int, core::int) → core::int fn) → void {}
+static method takeDDD((core::double, core::double) → core::double fn) → void {}
+static method takeIDI((core::double, core::int) → core::int fn) → void {}
+static method takeDID((core::int, core::double) → core::double fn) → void {}
+static method takeIDN((core::double, core::int) → core::num fn) → void {}
+static method takeDIN((core::int, core::double) → core::num fn) → void {}
+static method takeIIN((core::int, core::int) → core::num fn) → void {}
+static method takeDDN((core::double, core::double) → core::num fn) → void {}
+static method takeNNN((core::num, core::num) → core::num fn) → void {}
+static method takeOON((core::Object, core::Object) → core::num fn) → void {}
+static method takeOOO((core::Object, core::Object) → core::num fn) → void {}
+static method takeOOI((core::Object, core::Object) → core::int fn) → void {}
+static method takeIIO((core::int, core::int) → core::Object fn) → void {}
+static method takeDDO((core::double, core::double) → core::Object fn) → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff math::max
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::double*>
+  #C4 = instantiation #C1 <core::num*>
+  #C5 = instantiation #C1 <core::Object*>
+  #C6 = static-tearoff math::min
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = instantiation #C6 <core::double*>
+  #C9 = instantiation #C6 <core::num*>
+  #C10 = instantiation #C6 <core::Object*>
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.weak.modular.expect
new file mode 100644
index 0000000..13d3bf3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.weak.modular.expect
@@ -0,0 +1,251 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:26:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:26:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+//                                                                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+//                                                                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:31:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:31:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:32:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:32:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:45:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:45:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+//   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+//   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:48:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:48:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:49:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:49:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:73:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:73:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:75:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:75:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:82:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:82:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:85:25: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:87:25: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:math" as math;
+import "dart:math" show min;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method m<T extends core::num>(self::C::m::T x, self::C::m::T y) → self::C::m::T
+    return throw "";
+}
+static method test() → dynamic {
+  self::takeIII(#C2);
+  self::takeDDD(#C3);
+  self::takeNNN(#C4);
+  self::takeIDN(#C4);
+  self::takeDIN(#C4);
+  self::takeIIN(#C2);
+  self::takeDDN(#C3);
+  self::takeIIO(#C2);
+  self::takeDDO(#C3);
+  self::takeOOI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:26:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+                                                                     ^" in #C5 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::int);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+                                                                        ^" in #C4 as{TypeError,ForNonNullableByDefault} (core::double, core::int) → core::int);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+                                                                        ^" in #C4 as{TypeError,ForNonNullableByDefault} (core::int, core::double) → core::double);
+  self::takeOON(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:31:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+                                                                     ^" in #C5 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeOOO(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:32:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+                                                                     ^" in #C5 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeIII(#C7);
+  self::takeDDD(#C8);
+  self::takeNNN(#C9);
+  self::takeIDN(#C9);
+  self::takeDIN(#C9);
+  self::takeIIN(#C7);
+  self::takeDDN(#C8);
+  self::takeIIO(#C7);
+  self::takeDDO(#C8);
+  self::takeOOI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:45:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+                                                                ^" in #C10 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::int);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+                                                                       ^" in #C9 as{TypeError,ForNonNullableByDefault} (core::double, core::int) → core::int);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+                                                                       ^" in #C9 as{TypeError,ForNonNullableByDefault} (core::int, core::double) → core::double);
+  self::takeOON(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:48:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+                                                                ^" in #C10 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeOOO(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:49:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+                                                                ^" in #C10 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeIII(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::int>);
+  self::takeDDD(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::double>);
+  self::takeNNN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>);
+  self::takeIDN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>);
+  self::takeDIN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>);
+  self::takeIIN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::int>);
+  self::takeDDN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::double>);
+  self::takeIIO(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::int>);
+  self::takeDDO(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::double>);
+  self::takeOON(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:73:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::Object>) as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeOOO(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:75:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::Object>) as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeOOI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:82:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::Object>) as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::int);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:85:25: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>) as{TypeError,ForNonNullableByDefault} (core::double, core::int) → core::int);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:87:25: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>) as{TypeError,ForNonNullableByDefault} (core::int, core::double) → core::double);
+}
+static method takeIII((core::int, core::int) → core::int fn) → void {}
+static method takeDDD((core::double, core::double) → core::double fn) → void {}
+static method takeIDI((core::double, core::int) → core::int fn) → void {}
+static method takeDID((core::int, core::double) → core::double fn) → void {}
+static method takeIDN((core::double, core::int) → core::num fn) → void {}
+static method takeDIN((core::int, core::double) → core::num fn) → void {}
+static method takeIIN((core::int, core::int) → core::num fn) → void {}
+static method takeDDN((core::double, core::double) → core::num fn) → void {}
+static method takeNNN((core::num, core::num) → core::num fn) → void {}
+static method takeOON((core::Object, core::Object) → core::num fn) → void {}
+static method takeOOO((core::Object, core::Object) → core::num fn) → void {}
+static method takeOOI((core::Object, core::Object) → core::int fn) → void {}
+static method takeIIO((core::int, core::int) → core::Object fn) → void {}
+static method takeDDO((core::double, core::double) → core::Object fn) → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff math::max
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::double*>
+  #C4 = instantiation #C1 <core::num*>
+  #C5 = instantiation #C1 <core::Object*>
+  #C6 = static-tearoff math::min
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = instantiation #C6 <core::double*>
+  #C9 = instantiation #C6 <core::num*>
+  #C10 = instantiation #C6 <core::Object*>
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.weak.outline.expect
new file mode 100644
index 0000000..34f3e72
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.weak.outline.expect
@@ -0,0 +1,45 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:math" as math;
+import "dart:math" show min;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    ;
+  method m<T extends core::num>(self::C::m::T x, self::C::m::T y) → self::C::m::T
+    ;
+}
+static method test() → dynamic
+  ;
+static method takeIII((core::int, core::int) → core::int fn) → void
+  ;
+static method takeDDD((core::double, core::double) → core::double fn) → void
+  ;
+static method takeIDI((core::double, core::int) → core::int fn) → void
+  ;
+static method takeDID((core::int, core::double) → core::double fn) → void
+  ;
+static method takeIDN((core::double, core::int) → core::num fn) → void
+  ;
+static method takeDIN((core::int, core::double) → core::num fn) → void
+  ;
+static method takeIIN((core::int, core::int) → core::num fn) → void
+  ;
+static method takeDDN((core::double, core::double) → core::num fn) → void
+  ;
+static method takeNNN((core::num, core::num) → core::num fn) → void
+  ;
+static method takeOON((core::Object, core::Object) → core::num fn) → void
+  ;
+static method takeOOO((core::Object, core::Object) → core::num fn) → void
+  ;
+static method takeOOI((core::Object, core::Object) → core::int fn) → void
+  ;
+static method takeIIO((core::int, core::int) → core::Object fn) → void
+  ;
+static method takeDDO((core::double, core::double) → core::Object fn) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.weak.transformed.expect
new file mode 100644
index 0000000..13d3bf3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart.weak.transformed.expect
@@ -0,0 +1,251 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:26:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:26:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+//                                                                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+//                                                                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:31:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:31:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:32:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:32:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:45:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:45:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+//   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+//   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:48:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:48:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:49:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:49:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:73:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:73:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:75:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:75:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:82:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:82:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+//  - 'Object' is from 'dart:core'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:85:25: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:87:25: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:math" as math;
+import "dart:math" show min;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method m<T extends core::num>(self::C::m::T x, self::C::m::T y) → self::C::m::T
+    return throw "";
+}
+static method test() → dynamic {
+  self::takeIII(#C2);
+  self::takeDDD(#C3);
+  self::takeNNN(#C4);
+  self::takeIDN(#C4);
+  self::takeDIN(#C4);
+  self::takeIIN(#C2);
+  self::takeDDN(#C3);
+  self::takeIIO(#C2);
+  self::takeDDO(#C3);
+  self::takeOOI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:26:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+                                                                     ^" in #C5 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::int);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+                                                                        ^" in #C4 as{TypeError,ForNonNullableByDefault} (core::double, core::int) → core::int);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+                                                                        ^" in #C4 as{TypeError,ForNonNullableByDefault} (core::int, core::double) → core::double);
+  self::takeOON(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:31:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+                                                                     ^" in #C5 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeOOO(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:32:70: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+                                                                     ^" in #C5 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeIII(#C7);
+  self::takeDDD(#C8);
+  self::takeNNN(#C9);
+  self::takeIDN(#C9);
+  self::takeDIN(#C9);
+  self::takeIIN(#C7);
+  self::takeDDN(#C8);
+  self::takeIIO(#C7);
+  self::takeDDO(#C8);
+  self::takeOOI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:45:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+                                                                ^" in #C10 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::int);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+                                                                       ^" in #C9 as{TypeError,ForNonNullableByDefault} (core::double, core::int) → core::int);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+                                                                       ^" in #C9 as{TypeError,ForNonNullableByDefault} (core::int, core::double) → core::double);
+  self::takeOON(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:48:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+                                                                ^" in #C10 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeOOO(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:49:65: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+  takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+                                                                ^" in #C10 as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeIII(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::int>);
+  self::takeDDD(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::double>);
+  self::takeNNN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>);
+  self::takeIDN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>);
+  self::takeDIN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>);
+  self::takeIIN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::int>);
+  self::takeDDN(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::double>);
+  self::takeIIO(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::int>);
+  self::takeDDO(new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::double>);
+  self::takeOON(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:73:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::Object>) as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeOOO(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:75:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'num Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::Object>) as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::num);
+  self::takeOOI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:82:25: Error: The argument type 'Object Function(Object, Object)' can't be assigned to the parameter type 'int Function(Object, Object)'.
+ - 'Object' is from 'dart:core'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::Object>) as{TypeError,ForNonNullableByDefault} (core::Object, core::Object) → core::int);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:85:25: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>) as{TypeError,ForNonNullableByDefault} (core::double, core::int) → core::int);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation2.dart:87:25: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+      . /*@target=C.m*/ m);
+                        ^" in (new self::C::•().{self::C::m}{<T extends core::num>(T, T) → T}<core::num>) as{TypeError,ForNonNullableByDefault} (core::int, core::double) → core::double);
+}
+static method takeIII((core::int, core::int) → core::int fn) → void {}
+static method takeDDD((core::double, core::double) → core::double fn) → void {}
+static method takeIDI((core::double, core::int) → core::int fn) → void {}
+static method takeDID((core::int, core::double) → core::double fn) → void {}
+static method takeIDN((core::double, core::int) → core::num fn) → void {}
+static method takeDIN((core::int, core::double) → core::num fn) → void {}
+static method takeIIN((core::int, core::int) → core::num fn) → void {}
+static method takeDDN((core::double, core::double) → core::num fn) → void {}
+static method takeNNN((core::num, core::num) → core::num fn) → void {}
+static method takeOON((core::Object, core::Object) → core::num fn) → void {}
+static method takeOOO((core::Object, core::Object) → core::num fn) → void {}
+static method takeOOI((core::Object, core::Object) → core::int fn) → void {}
+static method takeIIO((core::int, core::int) → core::Object fn) → void {}
+static method takeDDO((core::double, core::double) → core::Object fn) → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff math::max
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::double*>
+  #C4 = instantiation #C1 <core::num*>
+  #C5 = instantiation #C1 <core::Object*>
+  #C6 = static-tearoff math::min
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = instantiation #C6 <core::double*>
+  #C9 = instantiation #C6 <core::num*>
+  #C10 = instantiation #C6 <core::Object*>
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart
index f07480d..79ae9b53 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.textual_outline.expect
index 9d4eae2..6dbee2c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.textual_outline_modelled.expect
index 9d4eae2..6dbee2c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.expect
index 530ec6a..f0137b7 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(self::C::m::T% x) → self::C::m::T%
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method m<S extends core::Object* = dynamic>(self::D::m::S* x) → self::D::m::S*
+  method m<S extends core::Object? = dynamic>(self::D::m::S% x) → self::D::m::S%
     return x;
 }
 static method main() → dynamic {
-  core::int* y = new self::D::•().{self::D::m}<core::int*>(42){(core::int*) →* core::int*};
+  core::int y = new self::D::•().{self::D::m}<core::int>(42){(core::int) → core::int};
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.modular.expect
index 530ec6a..f0137b7 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.modular.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(self::C::m::T% x) → self::C::m::T%
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method m<S extends core::Object* = dynamic>(self::D::m::S* x) → self::D::m::S*
+  method m<S extends core::Object? = dynamic>(self::D::m::S% x) → self::D::m::S%
     return x;
 }
 static method main() → dynamic {
-  core::int* y = new self::D::•().{self::D::m}<core::int*>(42){(core::int*) →* core::int*};
+  core::int y = new self::D::•().{self::D::m}<core::int>(42){(core::int) → core::int};
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.outline.expect
index c579aa3..30924df 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(self::C::m::T% x) → self::C::m::T%
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  method m<S extends core::Object* = dynamic>(self::D::m::S* x) → self::D::m::S*
+  method m<S extends core::Object? = dynamic>(self::D::m::S% x) → self::D::m::S%
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.transformed.expect
index 530ec6a..f0137b7 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.transformed.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(self::C::m::T% x) → self::C::m::T%
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method m<S extends core::Object* = dynamic>(self::D::m::S* x) → self::D::m::S*
+  method m<S extends core::Object? = dynamic>(self::D::m::S% x) → self::D::m::S%
     return x;
 }
 static method main() → dynamic {
-  core::int* y = new self::D::•().{self::D::m}<core::int*>(42){(core::int*) →* core::int*};
+  core::int y = new self::D::•().{self::D::m}<core::int>(42){(core::int) → core::int};
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart
index e828e03..21f6d44 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.textual_outline.expect
index 4d02026..7454c6f 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:_foreign_helper' show JS;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.textual_outline_modelled.expect
index 7a52b63..482fa81 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:_foreign_helper' show JS;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.expect
index 4831a9f..b5eff67 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.expect
@@ -5,7 +5,7 @@
 // import 'dart:_foreign_helper' show JS; // error
 //        ^
 //
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -27,7 +27,7 @@
 import "dart:_foreign_helper" show JS;
 
 static method test() → dynamic {
-  core::String* x = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:12:14: Error: Method not found: 'JS'.
+  core::String x = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:12:14: Error: Method not found: 'JS'.
   String x = JS('int', '42'); // error
              ^^";
   invalid-type y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:34: Error: Method not found: 'JS'.
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.modular.expect
index 4831a9f..b5eff67 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.modular.expect
@@ -5,7 +5,7 @@
 // import 'dart:_foreign_helper' show JS; // error
 //        ^
 //
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -27,7 +27,7 @@
 import "dart:_foreign_helper" show JS;
 
 static method test() → dynamic {
-  core::String* x = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:12:14: Error: Method not found: 'JS'.
+  core::String x = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:12:14: Error: Method not found: 'JS'.
   String x = JS('int', '42'); // error
              ^^";
   invalid-type y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:34: Error: Method not found: 'JS'.
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.outline.expect
index e2d9cb9..aab17f7 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 // import 'dart:_foreign_helper' show JS; // error
 //        ^
 //
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.transformed.expect
index 23c34ad..dd30be9 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,7 +20,7 @@
 import "dart:_foreign_helper" show JS;
 
 static method test() → dynamic {
-  core::String* x = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:12:14: Error: Method not found: 'JS'.
+  core::String x = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:12:14: Error: Method not found: 'JS'.
   String x = JS('int', '42'); // error
              ^^";
   invalid-type y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:34: Error: Method not found: 'JS'.
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart
index 956f7f0..b84cf0b 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart
@@ -1,14 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-void f() {
-  List<String> y;
-  Iterable<String> x = y. /*@ typeArgs=String* */ /*@target=Iterable.map*/ map(
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
+void f(List<String> y) {
+  Iterable<String> x = y. /*@typeArgs=String*/ /*@target=Iterable.map*/ map(
+      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
               z) =>
           1.0);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.textual_outline.expect
index 20442db..e6acce6 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
-void f() {}
+void f(List<String> y) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.textual_outline_modelled.expect
index a609d1d..3788019 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
 main() {}
-void f() {}
+void f(List<String> y) {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.expect
index f3dc908..4ce7c8d 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.expect
@@ -1,18 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/generic_methods_inference_error.dart:12:11: Error: A value of type 'double' can't be returned from a function with return type 'String'.
 //           1.0);
 //           ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method f() → void {
-  core::List<core::String*>* y;
-  core::Iterable<core::String*>* x = y.{core::Iterable::map}<core::String*>((core::String* z) → core::String* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+static method f(core::List<core::String> y) → void {
+  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:12:11: Error: A value of type 'double' can't be returned from a function with return type 'String'.
           1.0);
-          ^" in 1.0 as{TypeError} core::String*){((core::String*) →* core::String*) →* core::Iterable<core::String*>*};
+          ^" in 1.0 as{TypeError,ForNonNullableByDefault} core::String){((core::String) → core::String) → core::Iterable<core::String>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.modular.expect
index f3dc908..4ce7c8d 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.modular.expect
@@ -1,18 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/generic_methods_inference_error.dart:12:11: Error: A value of type 'double' can't be returned from a function with return type 'String'.
 //           1.0);
 //           ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method f() → void {
-  core::List<core::String*>* y;
-  core::Iterable<core::String*>* x = y.{core::Iterable::map}<core::String*>((core::String* z) → core::String* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+static method f(core::List<core::String> y) → void {
+  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:12:11: Error: A value of type 'double' can't be returned from a function with return type 'String'.
           1.0);
-          ^" in 1.0 as{TypeError} core::String*){((core::String*) →* core::String*) →* core::Iterable<core::String*>*};
+          ^" in 1.0 as{TypeError,ForNonNullableByDefault} core::String){((core::String) → core::String) → core::Iterable<core::String>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.outline.expect
index 824697a..18dd20b 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.outline.expect
@@ -1,7 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method f() → void
+static method f(core::List<core::String> y) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.transformed.expect
index f3dc908..4ce7c8d 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.transformed.expect
@@ -1,18 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/generic_methods_inference_error.dart:12:11: Error: A value of type 'double' can't be returned from a function with return type 'String'.
 //           1.0);
 //           ^
 //
 import self as self;
 import "dart:core" as core;
 
-static method f() → void {
-  core::List<core::String*>* y;
-  core::Iterable<core::String*>* x = y.{core::Iterable::map}<core::String*>((core::String* z) → core::String* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+static method f(core::List<core::String> y) → void {
+  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:12:11: Error: A value of type 'double' can't be returned from a function with return type 'String'.
           1.0);
-          ^" in 1.0 as{TypeError} core::String*){((core::String*) →* core::String*) →* core::Iterable<core::String*>*};
+          ^" in 1.0 as{TypeError,ForNonNullableByDefault} core::String){((core::String) → core::String) → core::Iterable<core::String>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart
index 789febd..4f9eafa 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart
@@ -1,46 +1,46 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-Future<int> make(int x) => (new /*@ typeArgs=int* */ Future(
-    /*@ returnType=int* */ () => x));
+Future<int> make(int x) => (new /*@typeArgs=int*/ Future(
+    /*@returnType=int*/ () => x));
 
 test() {
   Iterable<Future<int>> list = <int>[1, 2, 3]
-      . /*@ typeArgs=Future<int*>* */ /*@target=Iterable.map*/ map(make);
-  Future<List<int>> results = Future. /*@ typeArgs=int* */ wait(list);
+      . /*@typeArgs=Future<int>*/ /*@target=Iterable.map*/ map(make);
+  Future<List<int>> results = Future. /*@typeArgs=int*/ wait(list);
   Future<String> results2 =
-      results. /*@ typeArgs=String* */ /*@target=Future.then*/ then(
-          /*@ returnType=FutureOr<String*>* */ (List<int> list) => list
-              . /*@ typeArgs=FutureOr<String*>* */ /*@target=Iterable.fold*/ fold(
+      results. /*@typeArgs=String*/ /*@target=Future.then*/ then(
+          /*@returnType=FutureOr<String>*/ (List<int> list) => list
+              . /*@typeArgs=FutureOr<String>*/ /*@target=Iterable.fold*/ fold(
                   '',
-                  /*@ returnType=FutureOr<String*>* */ (/*@ type=FutureOr<String*>* */ x,
-                          /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
+                  /*@returnType=FutureOr<String>*/ (/*@type=FutureOr<String>*/ x,
+                          /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
                       y. /*@target=int.toString*/ toString()));
 
   Future<String> results3 =
-      results. /*@ typeArgs=String* */ /*@target=Future.then*/ then(
-          /*@ returnType=FutureOr<String*>* */ (List<int> list) => list
-              . /*@ typeArgs=FutureOr<String*>* */ /*@target=Iterable.fold*/ fold(
+      results. /*@typeArgs=String*/ /*@target=Future.then*/ then(
+          /*@returnType=FutureOr<String>*/ (List<int> list) => list
+              . /*@typeArgs=FutureOr<String>*/ /*@target=Iterable.fold*/ fold(
                   '',
-                  /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
+                  /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
                               x,
-                          /*@ type=int* */ y) =>
+                          /*@type=int*/ y) =>
                       x /*@target=String.+*/ +
                       y. /*@target=int.toString*/ toString()));
 
   Future<String> results4 =
-      results. /*@ typeArgs=String* */ /*@target=Future.then*/ then(
-          /*@ returnType=String* */ (List<int> list) =>
+      results. /*@typeArgs=String*/ /*@target=Future.then*/ then(
+          /*@returnType=String*/ (List<int> list) =>
               list. /*@target=Iterable.fold*/ fold<String>(
                   '',
-                  /*@ returnType=String* */ (/*@ type=String* */ x,
-                          /*@ type=int* */ y) =>
+                  /*@returnType=String*/ (/*@type=String*/ x,
+                          /*@type=int*/ y) =>
                       x /*@target=String.+*/ +
                       y. /*@target=int.toString*/ toString()));
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.textual_outline.expect
index 99d9ed4..649c05e 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.textual_outline_modelled.expect
index 2756589..67fe832 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.expect
index 2f4c738..f0cbcc0 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.expect
@@ -1,15 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
+// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
 // Try correcting the operator to an existing operator, or defining a '+' operator.
-//                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-//                                                                                                                           ^
+//                           /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
+//                                                                                                                        ^
 //
-// 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)'.
-//                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
-//                                                                                                               ^
+// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
+//                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
+//                                                                                                            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -17,19 +17,19 @@
 
 import "dart:async";
 
-static method make(core::int* x) → asy::Future<core::int*>*
-  return asy::Future::•<core::int*>(() → core::int* => x);
+static method make(core::int x) → asy::Future<core::int>
+  return asy::Future::•<core::int>(() → core::int => x);
 static method test() → dynamic {
-  core::Iterable<asy::Future<core::int*>*>* list = <core::int*>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int*>*>(#C1){((core::int*) →* asy::Future<core::int*>*) →* core::Iterable<asy::Future<core::int*>*>*};
-  asy::Future<core::List<core::int*>*>* results = asy::Future::wait<core::int*>(list);
-  asy::Future<core::String*>* results2 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", (FutureOr<core::String*>* x, core::int* y) → FutureOr<core::String*>* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
+  core::Iterable<asy::Future<core::int>> list = <core::int>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int>>(#C1){((core::int) → asy::Future<core::int>) → core::Iterable<asy::Future<core::int>>};
+  asy::Future<core::List<core::int>> results = asy::Future::wait<core::int>(list);
+  asy::Future<core::String> results2 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → FutureOr<core::String> => list.{core::Iterable::fold}<FutureOr<core::String>>("", (FutureOr<core::String>x, core::int y) → FutureOr<core::String> => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
-                          /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-                                                                                                                          ^" in x{<unresolved>}.+(y.{core::int::toString}(){() →* core::String*}) as{TypeError,ForDynamic} FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
-  asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", 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)'.
-                  /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
-                                                                                                              ^" in ((core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}) as{TypeError} (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
-  asy::Future<core::String*>* results4 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → core::String* => list.{core::Iterable::fold}<core::String*>("", (core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}){(core::String*, (core::String*, core::int*) →* core::String*) →* core::String*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
+                          /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
+                                                                                                                       ^" in x{<unresolved>}.+(y.{core::int::toString}(){() → core::String}) as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::String>){(FutureOr<core::String>, (FutureOr<core::String>, core::int) → FutureOr<core::String>) → FutureOr<core::String>}){((core::List<core::int>) → FutureOr<core::String>, {onError: core::Function?}) → asy::Future<core::String>};
+  asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → FutureOr<core::String> => list.{core::Iterable::fold}<FutureOr<core::String>>("", invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
+                  /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
+                                                                                                           ^" in ((core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}(){() → core::String}){(core::String) → core::String}) as{TypeError,ForNonNullableByDefault} (FutureOr<core::String>, core::int) → FutureOr<core::String>){(FutureOr<core::String>, (FutureOr<core::String>, core::int) → FutureOr<core::String>) → FutureOr<core::String>}){((core::List<core::int>) → FutureOr<core::String>, {onError: core::Function?}) → asy::Future<core::String>};
+  asy::Future<core::String> results4 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → core::String => list.{core::Iterable::fold}<core::String>("", (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}(){() → core::String}){(core::String) → core::String}){(core::String, (core::String, core::int) → core::String) → core::String}){((core::List<core::int>) → FutureOr<core::String>, {onError: core::Function?}) → asy::Future<core::String>};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.modular.expect
index 2f4c738..f0cbcc0 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.modular.expect
@@ -1,15 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
+// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
 // Try correcting the operator to an existing operator, or defining a '+' operator.
-//                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-//                                                                                                                           ^
+//                           /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
+//                                                                                                                        ^
 //
-// 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)'.
-//                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
-//                                                                                                               ^
+// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
+//                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
+//                                                                                                            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -17,19 +17,19 @@
 
 import "dart:async";
 
-static method make(core::int* x) → asy::Future<core::int*>*
-  return asy::Future::•<core::int*>(() → core::int* => x);
+static method make(core::int x) → asy::Future<core::int>
+  return asy::Future::•<core::int>(() → core::int => x);
 static method test() → dynamic {
-  core::Iterable<asy::Future<core::int*>*>* list = <core::int*>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int*>*>(#C1){((core::int*) →* asy::Future<core::int*>*) →* core::Iterable<asy::Future<core::int*>*>*};
-  asy::Future<core::List<core::int*>*>* results = asy::Future::wait<core::int*>(list);
-  asy::Future<core::String*>* results2 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", (FutureOr<core::String*>* x, core::int* y) → FutureOr<core::String*>* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
+  core::Iterable<asy::Future<core::int>> list = <core::int>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int>>(#C1){((core::int) → asy::Future<core::int>) → core::Iterable<asy::Future<core::int>>};
+  asy::Future<core::List<core::int>> results = asy::Future::wait<core::int>(list);
+  asy::Future<core::String> results2 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → FutureOr<core::String> => list.{core::Iterable::fold}<FutureOr<core::String>>("", (FutureOr<core::String>x, core::int y) → FutureOr<core::String> => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
-                          /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-                                                                                                                          ^" in x{<unresolved>}.+(y.{core::int::toString}(){() →* core::String*}) as{TypeError,ForDynamic} FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
-  asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", 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)'.
-                  /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
-                                                                                                              ^" in ((core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}) as{TypeError} (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
-  asy::Future<core::String*>* results4 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → core::String* => list.{core::Iterable::fold}<core::String*>("", (core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}){(core::String*, (core::String*, core::int*) →* core::String*) →* core::String*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
+                          /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
+                                                                                                                       ^" in x{<unresolved>}.+(y.{core::int::toString}(){() → core::String}) as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::String>){(FutureOr<core::String>, (FutureOr<core::String>, core::int) → FutureOr<core::String>) → FutureOr<core::String>}){((core::List<core::int>) → FutureOr<core::String>, {onError: core::Function?}) → asy::Future<core::String>};
+  asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → FutureOr<core::String> => list.{core::Iterable::fold}<FutureOr<core::String>>("", invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
+                  /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
+                                                                                                           ^" in ((core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}(){() → core::String}){(core::String) → core::String}) as{TypeError,ForNonNullableByDefault} (FutureOr<core::String>, core::int) → FutureOr<core::String>){(FutureOr<core::String>, (FutureOr<core::String>, core::int) → FutureOr<core::String>) → FutureOr<core::String>}){((core::List<core::int>) → FutureOr<core::String>, {onError: core::Function?}) → asy::Future<core::String>};
+  asy::Future<core::String> results4 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → core::String => list.{core::Iterable::fold}<core::String>("", (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}(){() → core::String}){(core::String) → core::String}){(core::String, (core::String, core::int) → core::String) → core::String}){((core::List<core::int>) → FutureOr<core::String>, {onError: core::Function?}) → asy::Future<core::String>};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.outline.expect
index abf425d..524cc39 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-static method make(core::int* x) → asy::Future<core::int*>*
+static method make(core::int x) → asy::Future<core::int>
   ;
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.transformed.expect
index 5a62ebc..8e606ae 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.transformed.expect
@@ -1,15 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
+// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
 // Try correcting the operator to an existing operator, or defining a '+' operator.
-//                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-//                                                                                                                           ^
+//                           /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
+//                                                                                                                        ^
 //
-// 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)'.
-//                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
-//                                                                                                               ^
+// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
+//                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
+//                                                                                                            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -17,19 +17,19 @@
 
 import "dart:async";
 
-static method make(core::int* x) → asy::Future<core::int*>*
-  return asy::Future::•<core::int*>(() → core::int* => x);
+static method make(core::int x) → asy::Future<core::int>
+  return asy::Future::•<core::int>(() → core::int => x);
 static method test() → dynamic {
-  core::Iterable<asy::Future<core::int*>*>* list = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::map}<asy::Future<core::int*>*>(#C1){((core::int*) →* asy::Future<core::int*>*) →* core::Iterable<asy::Future<core::int*>*>*};
-  asy::Future<core::List<core::int*>*>* results = asy::Future::wait<core::int*>(list);
-  asy::Future<core::String*>* results2 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", (FutureOr<core::String*>* x, core::int* y) → FutureOr<core::String*>* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
+  core::Iterable<asy::Future<core::int>> list = core::_GrowableList::_literal3<core::int>(1, 2, 3).{core::Iterable::map}<asy::Future<core::int>>(#C1){((core::int) → asy::Future<core::int>) → core::Iterable<asy::Future<core::int>>};
+  asy::Future<core::List<core::int>> results = asy::Future::wait<core::int>(list);
+  asy::Future<core::String> results2 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → FutureOr<core::String> => list.{core::Iterable::fold}<FutureOr<core::String>>("", (FutureOr<core::String>x, core::int y) → FutureOr<core::String> => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
-                          /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-                                                                                                                          ^" in x{<unresolved>}.+(y.{core::int::toString}(){() →* core::String*})){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
-  asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", 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)'.
-                  /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
-                                                                                                              ^" in ((core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}) as{TypeError} (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
-  asy::Future<core::String*>* results4 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → core::String* => list.{core::Iterable::fold}<core::String*>("", (core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}){(core::String*, (core::String*, core::int*) →* core::String*) →* core::String*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
+                          /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
+                                                                                                                       ^" in x{<unresolved>}.+(y.{core::int::toString}(){() → core::String})){(FutureOr<core::String>, (FutureOr<core::String>, core::int) → FutureOr<core::String>) → FutureOr<core::String>}){((core::List<core::int>) → FutureOr<core::String>, {onError: core::Function?}) → asy::Future<core::String>};
+  asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → FutureOr<core::String> => list.{core::Iterable::fold}<FutureOr<core::String>>("", invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
+                  /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
+                                                                                                           ^" in ((core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}(){() → core::String}){(core::String) → core::String}) as{TypeError,ForNonNullableByDefault} (FutureOr<core::String>, core::int) → FutureOr<core::String>){(FutureOr<core::String>, (FutureOr<core::String>, core::int) → FutureOr<core::String>) → FutureOr<core::String>}){((core::List<core::int>) → FutureOr<core::String>, {onError: core::Function?}) → asy::Future<core::String>};
+  asy::Future<core::String> results4 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → core::String => list.{core::Iterable::fold}<core::String>("", (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}(){() → core::String}){(core::String) → core::String}){(core::String, (core::String, core::int) → core::String) → core::String}){((core::List<core::int>) → FutureOr<core::String>, {onError: core::Function?}) → asy::Future<core::String>};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart
index 0d2a532..89673c2 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:math' as math;
 
 class Trace {
-  List<Frame> frames = /*@ typeArgs=Frame* */ [];
+  List<Frame> frames = /*@typeArgs=Frame*/ [];
 }
 
 class Frame {
@@ -16,15 +16,15 @@
 }
 
 main() {
-  List<Trace> traces = /*@ typeArgs=Trace* */ [];
-  var /*@ type=int* */ longest =
-      traces. /*@ typeArgs=int* */ /*@target=Iterable.map*/ map(
-          /*@ returnType=int* */ (/*@ type=Trace* */ trace) {
+  List<Trace> traces = /*@typeArgs=Trace*/ [];
+  var /*@type=int*/ longest =
+      traces. /*@typeArgs=int*/ /*@target=Iterable.map*/ map(
+          /*@returnType=int*/ (/*@type=Trace*/ trace) {
     return trace. /*@target=Trace.frames*/ frames
-        . /*@ typeArgs=int* */ /*@target=Iterable.map*/ map(
-            /*@ returnType=int* */ (/*@ type=Frame* */ frame) => frame
+        . /*@typeArgs=int*/ /*@target=Iterable.map*/ map(
+            /*@returnType=int*/ (/*@type=Frame*/ frame) => frame
                 . /*@target=Frame.location*/ location
                 . /*@target=String.length*/ length)
-        . /*@ typeArgs=int* */ /*@target=Iterable.fold*/ fold(0, math.max);
-  }). /*@ typeArgs=int* */ /*@target=Iterable.fold*/ fold(0, math.max);
+        . /*@typeArgs=int*/ /*@target=Iterable.fold*/ fold(0, math.max);
+  }). /*@typeArgs=int*/ /*@target=Iterable.fold*/ fold(0, math.max);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.textual_outline.expect
index 79c2848..5998d2c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:math' as math;
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.textual_outline_modelled.expect
index 8401faf..2248ecd 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:math' as math;
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
index 5a1deb3..dc3bf41 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
@@ -1,46 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:math" as math;
 
 class Trace extends core::Object {
-  field core::List<self::Frame*>* frames = <self::Frame*>[];
-  synthetic constructor •() → self::Trace*
+  field core::List<self::Frame> frames = <self::Frame>[];
+  synthetic constructor •() → self::Trace
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Frame extends core::Object {
-  field core::String* location = "";
-  synthetic constructor •() → self::Frame*
+  field core::String location = "";
+  synthetic constructor •() → self::Frame
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::List<self::Trace*>* traces = <self::Trace*>[];
-  core::int* longest = traces.{core::Iterable::map}<core::int*>((self::Trace* trace) → core::int* {
-    return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
-  }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  core::List<self::Trace> traces = <self::Trace>[];
+  core::int longest = traces.{core::Iterable::map}<core::int>((self::Trace trace) → core::int {
+    return trace.{self::Trace::frames}{core::List<self::Frame>}.{core::Iterable::map}<core::int>((self::Frame frame) → core::int => frame.{self::Frame::location}{core::String}.{core::String::length}{core::int}){((self::Frame) → core::int) → core::Iterable<core::int>}.{core::Iterable::fold}<core::int>(0, #C2){(core::int, (core::int, core::int) → core::int) → core::int};
+  }){((self::Trace) → core::int) → core::Iterable<core::int>}.{core::Iterable::fold}<core::int>(0, #C2){(core::int, (core::int, core::int) → core::int) → core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.modular.expect
index 5a1deb3..dc3bf41 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.modular.expect
@@ -1,46 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:math" as math;
 
 class Trace extends core::Object {
-  field core::List<self::Frame*>* frames = <self::Frame*>[];
-  synthetic constructor •() → self::Trace*
+  field core::List<self::Frame> frames = <self::Frame>[];
+  synthetic constructor •() → self::Trace
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Frame extends core::Object {
-  field core::String* location = "";
-  synthetic constructor •() → self::Frame*
+  field core::String location = "";
+  synthetic constructor •() → self::Frame
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::List<self::Trace*>* traces = <self::Trace*>[];
-  core::int* longest = traces.{core::Iterable::map}<core::int*>((self::Trace* trace) → core::int* {
-    return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
-  }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  core::List<self::Trace> traces = <self::Trace>[];
+  core::int longest = traces.{core::Iterable::map}<core::int>((self::Trace trace) → core::int {
+    return trace.{self::Trace::frames}{core::List<self::Frame>}.{core::Iterable::map}<core::int>((self::Frame frame) → core::int => frame.{self::Frame::location}{core::String}.{core::String::length}{core::int}){((self::Frame) → core::int) → core::Iterable<core::int>}.{core::Iterable::fold}<core::int>(0, #C2){(core::int, (core::int, core::int) → core::int) → core::int};
+  }){((self::Trace) → core::int) → core::Iterable<core::int>}.{core::Iterable::fold}<core::int>(0, #C2){(core::int, (core::int, core::int) → core::int) → core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.outline.expect
index 3ab2c3c..2c0706c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:math" as math;
 
 class Trace extends core::Object {
-  field core::List<self::Frame*>* frames;
-  synthetic constructor •() → self::Trace*
+  field core::List<self::Frame> frames;
+  synthetic constructor •() → self::Trace
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Frame extends core::Object {
-  field core::String* location;
-  synthetic constructor •() → self::Frame*
+  field core::String location;
+  synthetic constructor •() → self::Frame
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
index 28f2a02..f962667 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
@@ -1,46 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:math" as math;
 
 class Trace extends core::Object {
-  field core::List<self::Frame*>* frames = core::_GrowableList::•<self::Frame*>(0);
-  synthetic constructor •() → self::Trace*
+  field core::List<self::Frame> frames = core::_GrowableList::•<self::Frame>(0);
+  synthetic constructor •() → self::Trace
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Frame extends core::Object {
-  field core::String* location = "";
-  synthetic constructor •() → self::Frame*
+  field core::String location = "";
+  synthetic constructor •() → self::Frame
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::List<self::Trace*>* traces = core::_GrowableList::•<self::Trace*>(0);
-  core::int* longest = traces.{core::Iterable::map}<core::int*>((self::Trace* trace) → core::int* {
-    return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
-  }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  core::List<self::Trace> traces = core::_GrowableList::•<self::Trace>(0);
+  core::int longest = traces.{core::Iterable::map}<core::int>((self::Trace trace) → core::int {
+    return trace.{self::Trace::frames}{core::List<self::Frame>}.{core::Iterable::map}<core::int>((self::Frame frame) → core::int => frame.{self::Frame::location}{core::String}.{core::String::length}{core::int}){((self::Frame) → core::int) → core::Iterable<core::int>}.{core::Iterable::fold}<core::int>(0, #C2){(core::int, (core::int, core::int) → core::int) → core::int};
+  }){((self::Trace) → core::int) → core::Iterable<core::int>}.{core::Iterable::fold}<core::int>(0, #C2){(core::int, (core::int, core::int) → core::int) → core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart
index 2d47432..36e7f6e 100644
--- a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart
@@ -1,17 +1,17 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 typedef Iterable<num> F(int x);
 typedef List<int> G(double x);
 
-T generic<T>(a(T _), b(T _)) => null;
+T generic<T>(a(T _), b(T _)) => throw '';
 
-main() {
-  var /*@ type=(num*) ->* List<int*>* */ v = /*@ typeArgs=(num*) ->* List<int*>* */ generic(
+test() {
+  var /*@type=(num) -> List<int>*/ v = /*@typeArgs=(num) -> List<int>*/ generic(
       /*@ returnType=Null */ (F f) => null,
       /*@ returnType=Null */ (G g) => null);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.textual_outline.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.textual_outline.expect
index bebea8a..c42a0f8 100644
--- a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
 typedef Iterable<num> F(int x);
 typedef List<int> G(double x);
-T generic<T>(a(T _), b(T _)) => null;
-main() {}
+T generic<T>(a(T _), b(T _)) => throw '';
+test() {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.textual_outline_modelled.expect
index b5ba1cc..d698710 100644
--- a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T generic<T>(a(T _), b(T _)) => null;
-main() {}
+T generic<T>(a(T _), b(T _)) => throw '';
+test() {}
 typedef Iterable<num> F(int x);
 typedef List<int> G(double x);
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.expect
index 868f419..62338f9 100644
--- a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = (core::int*) →* core::Iterable<core::num*>*;
-typedef G = (core::double*) →* core::List<core::int*>*;
-static method generic<T extends core::Object* = dynamic>((self::generic::T*) →* dynamic a, (self::generic::T*) →* dynamic b) → self::generic::T*
-  return null;
-static method main() → dynamic {
-  (core::num*) →* core::List<core::int*>* v = self::generic<(core::num*) →* core::List<core::int*>*>(((core::int*) →* core::Iterable<core::num*>* f) → Null => null, ((core::double*) →* core::List<core::int*>* g) → Null => null);
+typedef F = (core::int) → core::Iterable<core::num>;
+typedef G = (core::double) → core::List<core::int>;
+static method generic<T extends core::Object? = dynamic>((self::generic::T%) → dynamic a, (self::generic::T%) → dynamic b) → self::generic::T%
+  return throw "";
+static method test() → dynamic {
+  (core::num) → core::List<core::int> v = self::generic<(core::num) → core::List<core::int>>(((core::int) → core::Iterable<core::num> f) → Null => null, ((core::double) → core::List<core::int> g) → Null => null);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.modular.expect
index 868f419..62338f9 100644
--- a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = (core::int*) →* core::Iterable<core::num*>*;
-typedef G = (core::double*) →* core::List<core::int*>*;
-static method generic<T extends core::Object* = dynamic>((self::generic::T*) →* dynamic a, (self::generic::T*) →* dynamic b) → self::generic::T*
-  return null;
-static method main() → dynamic {
-  (core::num*) →* core::List<core::int*>* v = self::generic<(core::num*) →* core::List<core::int*>*>(((core::int*) →* core::Iterable<core::num*>* f) → Null => null, ((core::double*) →* core::List<core::int*>* g) → Null => null);
+typedef F = (core::int) → core::Iterable<core::num>;
+typedef G = (core::double) → core::List<core::int>;
+static method generic<T extends core::Object? = dynamic>((self::generic::T%) → dynamic a, (self::generic::T%) → dynamic b) → self::generic::T%
+  return throw "";
+static method test() → dynamic {
+  (core::num) → core::List<core::int> v = self::generic<(core::num) → core::List<core::int>>(((core::int) → core::Iterable<core::num> f) → Null => null, ((core::double) → core::List<core::int> g) → Null => null);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.outline.expect
index 2afc98d..3c48ccb 100644
--- a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = (core::int*) →* core::Iterable<core::num*>*;
-typedef G = (core::double*) →* core::List<core::int*>*;
-static method generic<T extends core::Object* = dynamic>((self::generic::T*) →* dynamic a, (self::generic::T*) →* dynamic b) → self::generic::T*
+typedef F = (core::int) → core::Iterable<core::num>;
+typedef G = (core::double) → core::List<core::int>;
+static method generic<T extends core::Object? = dynamic>((self::generic::T%) → dynamic a, (self::generic::T%) → dynamic b) → self::generic::T%
   ;
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.transformed.expect
index 868f419..62338f9 100644
--- a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = (core::int*) →* core::Iterable<core::num*>*;
-typedef G = (core::double*) →* core::List<core::int*>*;
-static method generic<T extends core::Object* = dynamic>((self::generic::T*) →* dynamic a, (self::generic::T*) →* dynamic b) → self::generic::T*
-  return null;
-static method main() → dynamic {
-  (core::num*) →* core::List<core::int*>* v = self::generic<(core::num*) →* core::List<core::int*>*>(((core::int*) →* core::Iterable<core::num*>* f) → Null => null, ((core::double*) →* core::List<core::int*>* g) → Null => null);
+typedef F = (core::int) → core::Iterable<core::num>;
+typedef G = (core::double) → core::List<core::int>;
+static method generic<T extends core::Object? = dynamic>((self::generic::T%) → dynamic a, (self::generic::T%) → dynamic b) → self::generic::T%
+  return throw "";
+static method test() → dynamic {
+  (core::num) → core::List<core::int> v = self::generic<(core::num) → core::List<core::int>>(((core::int) → core::Iterable<core::num> f) → Null => null, ((core::double) → core::List<core::int> g) → Null => null);
 }
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart
index ea24047..a287d09 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 abstract class C<E> {
-  void sort([int compare(E a, E b)]) {
-    /*@ typeArgs=C::E* */ sort2(this, compare ?? _compareAny);
+  void sort([int Function(E a, E b)? compare]) {
+    /*@typeArgs=C::E%*/ sort2(this, compare ?? _compareAny);
   }
 
   static int _compareAny(a, b) {
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.textual_outline.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.textual_outline.expect
index aaecf72..3b60698 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 abstract class C<E> {
-  void sort([int compare(E a, E b)]) {}
+  void sort([int Function(E a, E b)? compare]) {}
   static int _compareAny(a, b) {}
   static void sort2<E>(C<E> a, int compare(E a, E b)) {}
 }
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.textual_outline_modelled.expect
index f34440f..075e425 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 abstract class C<E> {
   static int _compareAny(a, b) {}
   static void sort2<E>(C<E> a, int compare(E a, E b)) {}
-  void sort([int compare(E a, E b)]) {}
+  void sort([int Function(E a, E b)? compare]) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.expect
index d6bd505..6d0492d 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class C<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::E*>*
+abstract class C<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::E%>
     : super core::Object::•()
     ;
-  method sort([(self::C::E*, self::C::E*) →* core::int* compare = #C1]) → void {
-    self::C::sort2<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = compare in #t1 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
+  method sort([(self::C::E%, self::C::E%) →? core::int compare = #C1]) → void {
+    self::C::sort2<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t1 = compare in #t1 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : #t1{(self::C::E%, self::C::E%) → core::int});
   }
-  static method _compareAny(dynamic a, dynamic b) → core::int* {
+  static method _compareAny(dynamic a, dynamic b) → core::int {
     throw "unimplemented";
   }
-  static method sort2<E extends core::Object* = dynamic>(self::C<self::C::sort2::E*>* a, (self::C::sort2::E*, self::C::sort2::E*) →* core::int* compare) → void {
+  static method sort2<E extends core::Object? = dynamic>(self::C<self::C::sort2::E%> a, (self::C::sort2::E%, self::C::sort2::E%) → core::int compare) → void {
     throw "unimplemented";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.modular.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.modular.expect
index d6bd505..6d0492d 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.modular.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class C<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::E*>*
+abstract class C<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::E%>
     : super core::Object::•()
     ;
-  method sort([(self::C::E*, self::C::E*) →* core::int* compare = #C1]) → void {
-    self::C::sort2<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = compare in #t1 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
+  method sort([(self::C::E%, self::C::E%) →? core::int compare = #C1]) → void {
+    self::C::sort2<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t1 = compare in #t1 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : #t1{(self::C::E%, self::C::E%) → core::int});
   }
-  static method _compareAny(dynamic a, dynamic b) → core::int* {
+  static method _compareAny(dynamic a, dynamic b) → core::int {
     throw "unimplemented";
   }
-  static method sort2<E extends core::Object* = dynamic>(self::C<self::C::sort2::E*>* a, (self::C::sort2::E*, self::C::sort2::E*) →* core::int* compare) → void {
+  static method sort2<E extends core::Object? = dynamic>(self::C<self::C::sort2::E%> a, (self::C::sort2::E%, self::C::sort2::E%) → core::int compare) → void {
     throw "unimplemented";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.outline.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.outline.expect
index d909d15..fbe67f7 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class C<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::E*>*
+abstract class C<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::E%>
     ;
-  method sort([(self::C::E*, self::C::E*) →* core::int* compare = null]) → void
+  method sort([(self::C::E%, self::C::E%) →? core::int compare = null]) → void
     ;
-  static method _compareAny(dynamic a, dynamic b) → core::int*
+  static method _compareAny(dynamic a, dynamic b) → core::int
     ;
-  static method sort2<E extends core::Object* = dynamic>(self::C<self::C::sort2::E*>* a, (self::C::sort2::E*, self::C::sort2::E*) →* core::int* compare) → void
+  static method sort2<E extends core::Object? = dynamic>(self::C<self::C::sort2::E%> a, (self::C::sort2::E%, self::C::sort2::E%) → core::int compare) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.transformed.expect
index d6bd505..6d0492d 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.transformed.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class C<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::E*>*
+abstract class C<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::E%>
     : super core::Object::•()
     ;
-  method sort([(self::C::E*, self::C::E*) →* core::int* compare = #C1]) → void {
-    self::C::sort2<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = compare in #t1 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
+  method sort([(self::C::E%, self::C::E%) →? core::int compare = #C1]) → void {
+    self::C::sort2<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t1 = compare in #t1 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : #t1{(self::C::E%, self::C::E%) → core::int});
   }
-  static method _compareAny(dynamic a, dynamic b) → core::int* {
+  static method _compareAny(dynamic a, dynamic b) → core::int {
     throw "unimplemented";
   }
-  static method sort2<E extends core::Object* = dynamic>(self::C<self::C::sort2::E*>* a, (self::C::sort2::E*, self::C::sort2::E*) →* core::int* compare) → void {
+  static method sort2<E extends core::Object? = dynamic>(self::C<self::C::sort2::E%> a, (self::C::sort2::E%, self::C::sort2::E%) → core::int compare) → void {
     throw "unimplemented";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart b/pkg/front_end/testcases/inference/inconsistent_overrides.dart
index a8d51ad..250171f 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart
@@ -1,27 +1,27 @@
 // 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=2.9
+
 library test;
 
 /*@testedFeatures=inference*/
 
 class A {
-  A f(A x, {A y}) {}
-  A g(A x, {A y}) {}
-  A h(A x, {A y}) {}
+  A f(A x, {A? y}) => throw '';
+  A g(A x, {A? y}) => throw '';
+  A h(A x, {A? y}) => throw '';
 }
 
 class B extends A implements I {
-  f(x, {y}) {}
-  g(x, {y}) {}
-  h(x, {y}) {}
+  f(x, {y}) => throw '';
+  g(x, {y}) => throw '';
+  h(x, {y}) => throw '';
 }
 
 class I {
-  I f(I x, {I y}) {}
-  A g(I x, {I y}) {}
-  A h(A x, {I y}) {}
+  I f(I x, {I? y}) => throw '';
+  A g(I x, {I? y}) => throw '';
+  A h(A x, {I? y}) => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.textual_outline.expect
index 4951b24..a4e284c 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.textual_outline.expect
@@ -1,22 +1,21 @@
-// @dart = 2.9
 library test;
 
 class A {
-  A f(A x, {A y}) {}
-  A g(A x, {A y}) {}
-  A h(A x, {A y}) {}
+  A f(A x, {A? y}) => throw '';
+  A g(A x, {A? y}) => throw '';
+  A h(A x, {A? y}) => throw '';
 }
 
 class B extends A implements I {
-  f(x, {y}) {}
-  g(x, {y}) {}
-  h(x, {y}) {}
+  f(x, {y}) => throw '';
+  g(x, {y}) => throw '';
+  h(x, {y}) => throw '';
 }
 
 class I {
-  I f(I x, {I y}) {}
-  A g(I x, {I y}) {}
-  A h(A x, {I y}) {}
+  I f(I x, {I? y}) => throw '';
+  A g(I x, {I? y}) => throw '';
+  A h(A x, {I? y}) => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.textual_outline_modelled.expect
index cebb95b..d59fef1 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.textual_outline_modelled.expect
@@ -1,22 +1,21 @@
-// @dart = 2.9
 library test;
 
 class A {
-  A f(A x, {A y}) {}
-  A g(A x, {A y}) {}
-  A h(A x, {A y}) {}
+  A f(A x, {A? y}) => throw '';
+  A g(A x, {A? y}) => throw '';
+  A h(A x, {A? y}) => throw '';
 }
 
 class B extends A implements I {
-  f(x, {y}) {}
-  g(x, {y}) {}
-  h(x, {y}) {}
+  f(x, {y}) => throw '';
+  g(x, {y}) => throw '';
+  h(x, {y}) => throw '';
 }
 
 class I {
-  A g(I x, {I y}) {}
-  A h(A x, {I y}) {}
-  I f(I x, {I y}) {}
+  A g(I x, {I? y}) => throw '';
+  A h(A x, {I? y}) => throw '';
+  I f(I x, {I? y}) => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.expect
index 2948381e..11fb585 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.expect
@@ -1,86 +1,75 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:3: Error: Can't infer types for 'f' as the overridden members don't have a combined signature.
 // Try adding explicit types.
-//   f(x, {y}) {}
+//   f(x, {y}) => throw '';
 //   ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
-//   A f(A x, {A y}) {}
+//   A f(A x, {A? y}) => throw '';
 //     ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
-//   I f(I x, {I y}) {}
+//   I f(I x, {I? y}) => throw '';
 //     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:3: Error: Can't infer types for 'g' as the overridden members don't have a combined signature.
 // Try adding explicit types.
-//   g(x, {y}) {}
+//   g(x, {y}) => throw '';
 //   ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the overridden members.
-//   A g(A x, {A y}) {}
+//   A g(A x, {A? y}) => throw '';
 //     ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the overridden members.
-//   A g(I x, {I y}) {}
+//   A g(I x, {I? y}) => throw '';
 //     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:3: Error: Can't infer types for 'h' as the overridden members don't have a combined signature.
 // Try adding explicit types.
-//   h(x, {y}) {}
+//   h(x, {y}) => throw '';
 //   ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the overridden members.
-//   A h(A x, {A y}) {}
+//   A h(A x, {A? y}) => throw '';
 //     ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the overridden members.
-//   A h(A x, {I y}) {}
+//   A h(A x, {I? y}) => throw '';
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method f(self::A* x, {self::A* y = #C1}) → self::A* {}
-  method g(self::A* x, {self::A* y = #C1}) → self::A* {}
-  method h(self::A* x, {self::A* y = #C1}) → self::A* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(self::A x, {self::A? y = #C1}) → self::A
+    return throw "";
+  method g(self::A x, {self::A? y = #C1}) → self::A
+    return throw "";
+  method h(self::A x, {self::A? y = #C1}) → self::A
+    return throw "";
 }
 class B extends self::A implements self::I {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method f(invalid-type x, {invalid-type y = #C1}) → invalid-type {}
-  method g(invalid-type x, {invalid-type y = #C1}) → invalid-type {}
-  method h(invalid-type x, {invalid-type y = #C1}) → invalid-type {}
+  method f(invalid-type x, {invalid-type y = #C1}) → invalid-type
+    return throw "";
+  method g(invalid-type x, {invalid-type y = #C1}) → invalid-type
+    return throw "";
+  method h(invalid-type x, {invalid-type y = #C1}) → invalid-type
+    return throw "";
 }
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  method f(self::I* x, {self::I* y = #C1}) → self::I* {}
-  method g(self::I* x, {self::I* y = #C1}) → self::A* {}
-  method h(self::A* x, {self::I* y = #C1}) → self::A* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(self::I x, {self::I? y = #C1}) → self::I
+    return throw "";
+  method g(self::I x, {self::I? y = #C1}) → self::A
+    return throw "";
+  method h(self::A x, {self::I? y = #C1}) → self::A
+    return throw "";
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.modular.expect
index 2948381e..11fb585 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.modular.expect
@@ -1,86 +1,75 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:3: Error: Can't infer types for 'f' as the overridden members don't have a combined signature.
 // Try adding explicit types.
-//   f(x, {y}) {}
+//   f(x, {y}) => throw '';
 //   ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
-//   A f(A x, {A y}) {}
+//   A f(A x, {A? y}) => throw '';
 //     ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
-//   I f(I x, {I y}) {}
+//   I f(I x, {I? y}) => throw '';
 //     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:3: Error: Can't infer types for 'g' as the overridden members don't have a combined signature.
 // Try adding explicit types.
-//   g(x, {y}) {}
+//   g(x, {y}) => throw '';
 //   ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the overridden members.
-//   A g(A x, {A y}) {}
+//   A g(A x, {A? y}) => throw '';
 //     ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the overridden members.
-//   A g(I x, {I y}) {}
+//   A g(I x, {I? y}) => throw '';
 //     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:3: Error: Can't infer types for 'h' as the overridden members don't have a combined signature.
 // Try adding explicit types.
-//   h(x, {y}) {}
+//   h(x, {y}) => throw '';
 //   ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the overridden members.
-//   A h(A x, {A y}) {}
+//   A h(A x, {A? y}) => throw '';
 //     ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the overridden members.
-//   A h(A x, {I y}) {}
+//   A h(A x, {I? y}) => throw '';
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method f(self::A* x, {self::A* y = #C1}) → self::A* {}
-  method g(self::A* x, {self::A* y = #C1}) → self::A* {}
-  method h(self::A* x, {self::A* y = #C1}) → self::A* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(self::A x, {self::A? y = #C1}) → self::A
+    return throw "";
+  method g(self::A x, {self::A? y = #C1}) → self::A
+    return throw "";
+  method h(self::A x, {self::A? y = #C1}) → self::A
+    return throw "";
 }
 class B extends self::A implements self::I {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method f(invalid-type x, {invalid-type y = #C1}) → invalid-type {}
-  method g(invalid-type x, {invalid-type y = #C1}) → invalid-type {}
-  method h(invalid-type x, {invalid-type y = #C1}) → invalid-type {}
+  method f(invalid-type x, {invalid-type y = #C1}) → invalid-type
+    return throw "";
+  method g(invalid-type x, {invalid-type y = #C1}) → invalid-type
+    return throw "";
+  method h(invalid-type x, {invalid-type y = #C1}) → invalid-type
+    return throw "";
 }
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  method f(self::I* x, {self::I* y = #C1}) → self::I* {}
-  method g(self::I* x, {self::I* y = #C1}) → self::A* {}
-  method h(self::A* x, {self::I* y = #C1}) → self::A* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(self::I x, {self::I? y = #C1}) → self::I
+    return throw "";
+  method g(self::I x, {self::I? y = #C1}) → self::A
+    return throw "";
+  method h(self::A x, {self::I? y = #C1}) → self::A
+    return throw "";
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.outline.expect
index 66062f6..fe3bf3f 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.outline.expect
@@ -1,65 +1,55 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:3: Error: Can't infer types for 'f' as the overridden members don't have a combined signature.
 // Try adding explicit types.
-//   f(x, {y}) {}
+//   f(x, {y}) => throw '';
 //   ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
-//   A f(A x, {A y}) {}
+//   A f(A x, {A? y}) => throw '';
 //     ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
-//   I f(I x, {I y}) {}
+//   I f(I x, {I? y}) => throw '';
 //     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:3: Error: Can't infer types for 'g' as the overridden members don't have a combined signature.
 // Try adding explicit types.
-//   g(x, {y}) {}
+//   g(x, {y}) => throw '';
 //   ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the overridden members.
-//   A g(A x, {A y}) {}
+//   A g(A x, {A? y}) => throw '';
 //     ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the overridden members.
-//   A g(I x, {I y}) {}
+//   A g(I x, {I? y}) => throw '';
 //     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:3: Error: Can't infer types for 'h' as the overridden members don't have a combined signature.
 // Try adding explicit types.
-//   h(x, {y}) {}
+//   h(x, {y}) => throw '';
 //   ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the overridden members.
-//   A h(A x, {A y}) {}
+//   A h(A x, {A? y}) => throw '';
 //     ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the overridden members.
-//   A h(A x, {I y}) {}
+//   A h(A x, {I? y}) => throw '';
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  method f(self::A* x, {self::A* y = null}) → self::A*
+  method f(self::A x, {self::A? y = null}) → self::A
     ;
-  method g(self::A* x, {self::A* y = null}) → self::A*
+  method g(self::A x, {self::A? y = null}) → self::A
     ;
-  method h(self::A* x, {self::A* y = null}) → self::A*
+  method h(self::A x, {self::A? y = null}) → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A implements self::I {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   method f(invalid-type x, {invalid-type y = null}) → invalid-type
     ;
@@ -69,24 +59,14 @@
     ;
 }
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  method f(self::I* x, {self::I* y = null}) → self::I*
+  method f(self::I x, {self::I? y = null}) → self::I
     ;
-  method g(self::I* x, {self::I* y = null}) → self::A*
+  method g(self::I x, {self::I? y = null}) → self::A
     ;
-  method h(self::A* x, {self::I* y = null}) → self::A*
+  method h(self::A x, {self::I? y = null}) → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.transformed.expect
index 2948381e..11fb585 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.transformed.expect
@@ -1,86 +1,75 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:3: Error: Can't infer types for 'f' as the overridden members don't have a combined signature.
 // Try adding explicit types.
-//   f(x, {y}) {}
+//   f(x, {y}) => throw '';
 //   ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
-//   A f(A x, {A y}) {}
+//   A f(A x, {A? y}) => throw '';
 //     ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
-//   I f(I x, {I y}) {}
+//   I f(I x, {I? y}) => throw '';
 //     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:3: Error: Can't infer types for 'g' as the overridden members don't have a combined signature.
 // Try adding explicit types.
-//   g(x, {y}) {}
+//   g(x, {y}) => throw '';
 //   ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the overridden members.
-//   A g(A x, {A y}) {}
+//   A g(A x, {A? y}) => throw '';
 //     ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the overridden members.
-//   A g(I x, {I y}) {}
+//   A g(I x, {I? y}) => throw '';
 //     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:3: Error: Can't infer types for 'h' as the overridden members don't have a combined signature.
 // Try adding explicit types.
-//   h(x, {y}) {}
+//   h(x, {y}) => throw '';
 //   ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the overridden members.
-//   A h(A x, {A y}) {}
+//   A h(A x, {A? y}) => throw '';
 //     ^
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the overridden members.
-//   A h(A x, {I y}) {}
+//   A h(A x, {I? y}) => throw '';
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method f(self::A* x, {self::A* y = #C1}) → self::A* {}
-  method g(self::A* x, {self::A* y = #C1}) → self::A* {}
-  method h(self::A* x, {self::A* y = #C1}) → self::A* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(self::A x, {self::A? y = #C1}) → self::A
+    return throw "";
+  method g(self::A x, {self::A? y = #C1}) → self::A
+    return throw "";
+  method h(self::A x, {self::A? y = #C1}) → self::A
+    return throw "";
 }
 class B extends self::A implements self::I {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method f(invalid-type x, {invalid-type y = #C1}) → invalid-type {}
-  method g(invalid-type x, {invalid-type y = #C1}) → invalid-type {}
-  method h(invalid-type x, {invalid-type y = #C1}) → invalid-type {}
+  method f(invalid-type x, {invalid-type y = #C1}) → invalid-type
+    return throw "";
+  method g(invalid-type x, {invalid-type y = #C1}) → invalid-type
+    return throw "";
+  method h(invalid-type x, {invalid-type y = #C1}) → invalid-type
+    return throw "";
 }
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  method f(self::I* x, {self::I* y = #C1}) → self::I* {}
-  method g(self::I* x, {self::I* y = #C1}) → self::A* {}
-  method h(self::A* x, {self::I* y = #C1}) → self::A* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(self::I x, {self::I? y = #C1}) → self::I
+    return throw "";
+  method g(self::I x, {self::I? y = #C1}) → self::A
+    return throw "";
+  method h(self::A x, {self::I? y = #C1}) → self::A
+    return throw "";
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart
index 013282d..76224c4 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.textual_outline.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.textual_outline.expect
index a3414de..2eac7bf 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.textual_outline_modelled.expect
index 9327a7a..04312eb 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I {
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.expect
index d7facc2..3c0dfbd 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   operator []=(dynamic index, dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
   operator []=(dynamic index, dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   operator []=(dynamic index, dynamic value) → void {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.modular.expect
index d7facc2..3c0dfbd 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.modular.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   operator []=(dynamic index, dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
   operator []=(dynamic index, dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   operator []=(dynamic index, dynamic value) → void {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.outline.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.outline.expect
index cd6595c..274ce5d 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.outline.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   operator []=(dynamic index, dynamic value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
   operator []=(dynamic index, dynamic value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   operator []=(dynamic index, dynamic value) → void
     ;
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.transformed.expect
index d7facc2..3c0dfbd 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.transformed.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   operator []=(dynamic index, dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
   operator []=(dynamic index, dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   operator []=(dynamic index, dynamic value) → void {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart
index ee83d01..8ca0f2e 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.textual_outline.expect
index 7cc3c0d..65369b6 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.textual_outline_modelled.expect
index 4868c82..7202539 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I {
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.expect
index 9cecf38..c562486 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator []=(core::int* index, dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(core::int index, dynamic value) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  operator []=(core::int* index, dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(core::int index, dynamic value) → void {}
 }
 class D extends self::C implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  operator []=(core::int* index, dynamic value) → void {}
+  operator []=(core::int index, dynamic value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.modular.expect
index 9cecf38..c562486 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.modular.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator []=(core::int* index, dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(core::int index, dynamic value) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  operator []=(core::int* index, dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(core::int index, dynamic value) → void {}
 }
 class D extends self::C implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  operator []=(core::int* index, dynamic value) → void {}
+  operator []=(core::int index, dynamic value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.outline.expect
index 13c3679..e46b914 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.outline.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  operator []=(core::int* index, dynamic value) → void
+  operator []=(core::int index, dynamic value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  operator []=(core::int* index, dynamic value) → void
+  operator []=(core::int index, dynamic value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  operator []=(core::int* index, dynamic value) → void
+  operator []=(core::int index, dynamic value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.transformed.expect
index 9cecf38..c562486 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.transformed.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator []=(core::int* index, dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(core::int index, dynamic value) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  operator []=(core::int* index, dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(core::int index, dynamic value) → void {}
 }
 class D extends self::C implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  operator []=(core::int* index, dynamic value) → void {}
+  operator []=(core::int index, dynamic value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart
index 7d4ade9..bd7233a 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.textual_outline.expect
index 847ad57..e8e8fb2 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A implements B {
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.textual_outline_modelled.expect
index 847ad57..e8e8fb2 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A implements B {
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.expect
index d6c7c50..9e277e0 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get x() → core::int*
-    return self::f() as{TypeError,ForDynamic} core::int*;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get x() → core::int
+    return self::f() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  set x(core::int value) → void {}
 }
 class B extends core::Object {
-  field core::int* x = 0;
-  synthetic constructor •() → self::B*
+  field core::int x = 0;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method f() → dynamic
   return null;
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.modular.expect
index d6c7c50..9e277e0 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.modular.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get x() → core::int*
-    return self::f() as{TypeError,ForDynamic} core::int*;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get x() → core::int
+    return self::f() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  set x(core::int value) → void {}
 }
 class B extends core::Object {
-  field core::int* x = 0;
-  synthetic constructor •() → self::B*
+  field core::int x = 0;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method f() → dynamic
   return null;
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.outline.expect
index 42f26a4..b62ea27 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.outline.expect
@@ -1,39 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
-  set x(core::int* value) → void
+  set x(core::int value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::B*
+  field core::int x;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method f() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.transformed.expect
index d6c7c50..9e277e0 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.transformed.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get x() → core::int*
-    return self::f() as{TypeError,ForDynamic} core::int*;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get x() → core::int
+    return self::f() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  set x(core::int value) → void {}
 }
 class B extends core::Object {
-  field core::int* x = 0;
-  synthetic constructor •() → self::B*
+  field core::int x = 0;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method f() → dynamic
   return null;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart
index c8f9c85..197c615 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart
@@ -1,40 +1,43 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
-  B operator -(int i) => null;
-  B operator *(B v) => null;
-  C operator &(A v) => null;
+  A operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
 }
 
 class C extends B {}
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class Test {
   B member;
+  B? member2;
+
+  Test(this.member, this.member2);
 
   void test() {
-    /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
+    /*@target=Test.member*/ member = /*@typeArgs=B*/ f();
+
+    /*@target=Test.member2*/ /*@target=Test.member2*/ member2
+         ??= /*@typeArgs=B?*/ f();
 
     /*@target=Test.member*/ /*@target=Test.member*/ member
-         ??= /*@ typeArgs=B* */ f();
+        /*@target=B.+*/ += /*@typeArgs=C*/ f();
 
     /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+        /*@target=B.**/ *= /*@typeArgs=B*/ f();
 
     /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
-
-    /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+        /*@target=B.&*/ &= /*@typeArgs=A*/ f();
 
     /*@target=B.-*/ -- /*@target=Test.member*/ /*@target=Test.member*/
         member;
@@ -42,30 +45,30 @@
     /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.-*/ --;
 
-    var /*@ type=B* */ v1 = /*@target=Test.member*/ member =
-        /*@ typeArgs=B* */ f();
+    var /*@type=B*/ v1 = /*@target=Test.member*/ member =
+        /*@typeArgs=B*/ f();
 
-    var /*@ type=B* */ v2 = /*@target=Test.member*/ /*@target=Test.member*/
-        member  ??= /*@ typeArgs=B* */ f();
+    var /*@type=B?*/ v2 = /*@target=Test.member2*/ /*@target=Test.member2*/
+        member2  ??= /*@typeArgs=B?*/ f();
 
-    var /*@ type=A* */ v3 = /*@target=Test.member*/ /*@target=Test.member*/
+    var /*@type=A*/ v3 = /*@target=Test.member*/ /*@target=Test.member*/
         member /*@target=B.+*/ +=
-            /*@ typeArgs=C* */ f();
+            /*@typeArgs=C*/ f();
 
-    var /*@ type=B* */ v4 = /*@target=Test.member*/ /*@target=Test.member*/
+    var /*@type=B*/ v4 = /*@target=Test.member*/ /*@target=Test.member*/
         member /*@target=B.**/ *=
-            /*@ typeArgs=B* */ f();
+            /*@typeArgs=B*/ f();
 
-    var /*@ type=C* */ v5 = /*@target=Test.member*/ /*@target=Test.member*/
+    var /*@type=C*/ v5 = /*@target=Test.member*/ /*@target=Test.member*/
         member /*@target=B.&*/ &=
-            /*@ typeArgs=A* */ f();
+            /*@typeArgs=A*/ f();
 
-    var /*@ type=B* */ v6 = /*@target=B.-*/ --
+    var /*@type=B*/ v6 = /*@target=B.-*/ --
         /*@target=Test.member*/ /*@target=Test.member*/ member;
 
-    var /*@ type=B* */ v7 =
-        /*@ type=B* */ /*@target=Test.member*/ /*@target=Test.member*/
-        /*@ type=B* */ member /*@target=B.-*/ --;
+    var /*@type=B*/ v7 =
+        /*@type=B*/ /*@target=Test.member*/ /*@target=Test.member*/
+        /*@type=B*/ member /*@target=B.-*/ --;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.textual_outline.expect
index fc944b3..d0dd27a 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.textual_outline.expect
@@ -1,21 +1,22 @@
-// @dart = 2.9
 library test;
 
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
-  B operator -(int i) => null;
-  B operator *(B v) => null;
-  C operator &(A v) => null;
+  A operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
 }
 
 class C extends B {}
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class Test {
   B member;
+  B? member2;
+  Test(this.member, this.member2);
   void test() {}
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.textual_outline_modelled.expect
index cb5ae88..25b8c25 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.textual_outline_modelled.expect
@@ -1,21 +1,22 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
-  B operator *(B v) => null;
-  B operator -(int i) => null;
-  C operator &(A v) => null;
+  A operator +(C v) => throw '';
+  B operator *(B v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
 }
 
 class C extends B {}
 
 class Test {
+  B? member2;
   B member;
+  Test(this.member, this.member2);
   void test() {}
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.expect
index 43a39ef..8b160fa 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.expect
@@ -1,72 +1,76 @@
-library test;
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart:34:25: Error: A value of type 'A' can't be assigned to a variable of type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+//         /*@target=B.+*/ += /*@typeArgs=C*/ f();
+//                         ^
+//
+// pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart:55:32: Error: A value of type 'A' can't be assigned to a variable of type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+//         member /*@target=B.+*/ +=
+//                                ^
+//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
-    return null;
-  operator -(core::int* i) → self::B*
-    return null;
-  operator *(self::B* v) → self::B*
-    return null;
-  operator &(self::A* v) → self::C*
-    return null;
+  operator +(self::C v) → self::A
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  field self::B* member = null;
-  synthetic constructor •() → self::Test*
-    : super core::Object::•()
+  field self::B member;
+  field self::B? member2;
+  constructor •(self::B member, self::B? member2) → self::Test
+    : self::Test::member = member, self::Test::member2 = member2, super core::Object::•()
     ;
   method test() → void {
-    this.{self::Test::member} = self::f<self::B*>();
-    this.{self::Test::member}{self::B*} == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    self::B* v1 = this.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = this.{self::Test::member}{self::B*} in #t1 == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
-    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
-    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
-    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    self::B* v7 = let final self::B* #t2 = this.{self::Test::member}{self::B*} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+    this.{self::Test::member} = self::f<self::B>();
+    this.{self::Test::member2}{self::B?} == null ?{self::B?} this.{self::Test::member2} = self::f<self::B?>() : null;
+    this.{self::Test::member} = invalid-expression "pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart:34:25: Error: A value of type 'A' can't be assigned to a variable of type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+ - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+        /*@target=B.+*/ += /*@typeArgs=C*/ f();
+                        ^" in this.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::A} as{TypeError,ForNonNullableByDefault} self::B;
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = this.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::B? #t1 = this.{self::Test::member2}{self::B?} in #t1 == null ?{self::B?} this.{self::Test::member2} = self::f<self::B?>() : #t1{self::B};
+    self::A v3 = this.{self::Test::member} = invalid-expression "pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart:55:32: Error: A value of type 'A' can't be assigned to a variable of type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+ - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+        member /*@target=B.+*/ +=
+                               ^" in this.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::A} as{TypeError,ForNonNullableByDefault} self::B;
+    self::B v4 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::B #t2 = this.{self::Test::member}{self::B} in let final self::B #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.modular.expect
index 43a39ef..8b160fa 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.modular.expect
@@ -1,72 +1,76 @@
-library test;
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart:34:25: Error: A value of type 'A' can't be assigned to a variable of type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+//         /*@target=B.+*/ += /*@typeArgs=C*/ f();
+//                         ^
+//
+// pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart:55:32: Error: A value of type 'A' can't be assigned to a variable of type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+//         member /*@target=B.+*/ +=
+//                                ^
+//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
-    return null;
-  operator -(core::int* i) → self::B*
-    return null;
-  operator *(self::B* v) → self::B*
-    return null;
-  operator &(self::A* v) → self::C*
-    return null;
+  operator +(self::C v) → self::A
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  field self::B* member = null;
-  synthetic constructor •() → self::Test*
-    : super core::Object::•()
+  field self::B member;
+  field self::B? member2;
+  constructor •(self::B member, self::B? member2) → self::Test
+    : self::Test::member = member, self::Test::member2 = member2, super core::Object::•()
     ;
   method test() → void {
-    this.{self::Test::member} = self::f<self::B*>();
-    this.{self::Test::member}{self::B*} == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    self::B* v1 = this.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = this.{self::Test::member}{self::B*} in #t1 == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
-    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
-    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
-    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    self::B* v7 = let final self::B* #t2 = this.{self::Test::member}{self::B*} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+    this.{self::Test::member} = self::f<self::B>();
+    this.{self::Test::member2}{self::B?} == null ?{self::B?} this.{self::Test::member2} = self::f<self::B?>() : null;
+    this.{self::Test::member} = invalid-expression "pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart:34:25: Error: A value of type 'A' can't be assigned to a variable of type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+ - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+        /*@target=B.+*/ += /*@typeArgs=C*/ f();
+                        ^" in this.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::A} as{TypeError,ForNonNullableByDefault} self::B;
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = this.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::B? #t1 = this.{self::Test::member2}{self::B?} in #t1 == null ?{self::B?} this.{self::Test::member2} = self::f<self::B?>() : #t1{self::B};
+    self::A v3 = this.{self::Test::member} = invalid-expression "pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart:55:32: Error: A value of type 'A' can't be assigned to a variable of type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+ - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+        member /*@target=B.+*/ +=
+                               ^" in this.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::A} as{TypeError,ForNonNullableByDefault} self::B;
+    self::B v4 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::B #t2 = this.{self::Test::member}{self::B} in let final self::B #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.outline.expect
index 30989d3..d728e67 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.outline.expect
@@ -1,55 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator +(self::C* v) → self::A*
+  operator +(self::C v) → self::A
     ;
-  operator -(core::int* i) → self::B*
+  operator -(core::int i) → self::B
     ;
-  operator *(self::B* v) → self::B*
+  operator *(self::B v) → self::B
     ;
-  operator &(self::A* v) → self::C*
+  operator &(self::A v) → self::C
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 class Test extends core::Object {
-  field self::B* member;
-  synthetic constructor •() → self::Test*
+  field self::B member;
+  field self::B? member2;
+  constructor •(self::B member, self::B? member2) → self::Test
     ;
   method test() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.transformed.expect
index 43a39ef..8b160fa 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.transformed.expect
@@ -1,72 +1,76 @@
-library test;
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart:34:25: Error: A value of type 'A' can't be assigned to a variable of type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+//         /*@target=B.+*/ += /*@typeArgs=C*/ f();
+//                         ^
+//
+// pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart:55:32: Error: A value of type 'A' can't be assigned to a variable of type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+//         member /*@target=B.+*/ +=
+//                                ^
+//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
-    return null;
-  operator -(core::int* i) → self::B*
-    return null;
-  operator *(self::B* v) → self::B*
-    return null;
-  operator &(self::A* v) → self::C*
-    return null;
+  operator +(self::C v) → self::A
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  field self::B* member = null;
-  synthetic constructor •() → self::Test*
-    : super core::Object::•()
+  field self::B member;
+  field self::B? member2;
+  constructor •(self::B member, self::B? member2) → self::Test
+    : self::Test::member = member, self::Test::member2 = member2, super core::Object::•()
     ;
   method test() → void {
-    this.{self::Test::member} = self::f<self::B*>();
-    this.{self::Test::member}{self::B*} == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    self::B* v1 = this.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = this.{self::Test::member}{self::B*} in #t1 == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
-    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
-    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
-    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    self::B* v7 = let final self::B* #t2 = this.{self::Test::member}{self::B*} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+    this.{self::Test::member} = self::f<self::B>();
+    this.{self::Test::member2}{self::B?} == null ?{self::B?} this.{self::Test::member2} = self::f<self::B?>() : null;
+    this.{self::Test::member} = invalid-expression "pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart:34:25: Error: A value of type 'A' can't be assigned to a variable of type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+ - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+        /*@target=B.+*/ += /*@typeArgs=C*/ f();
+                        ^" in this.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::A} as{TypeError,ForNonNullableByDefault} self::B;
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = this.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::B? #t1 = this.{self::Test::member2}{self::B?} in #t1 == null ?{self::B?} this.{self::Test::member2} = self::f<self::B?>() : #t1{self::B};
+    self::A v3 = this.{self::Test::member} = invalid-expression "pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart:55:32: Error: A value of type 'A' can't be assigned to a variable of type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+ - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart'.
+        member /*@target=B.+*/ +=
+                               ^" in this.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::A} as{TypeError,ForNonNullableByDefault} self::B;
+    self::B v4 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::B #t2 = this.{self::Test::member}{self::B} in let final self::B #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart
index 7892af4..96f2626 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -15,14 +17,13 @@
   void test() {
     var /*@ type=int* */ v1 = /*@target=Test1.t*/ t = getInt();
 
-    var /*@ type=int* */ v4 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
-         ??= getInt();
+    var /*@ type=int* */ v4 = /*@target=Test1.t*/ /*@target=Test1.t*/ t ??=
+        getInt();
 
-    var /*@ type=int* */ v7 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
-        /*@target=num.+*/ += getInt();
+    var /*@ type=int* */ v7 = /*@target=Test1.t*/ /*@target=Test1.t*/ t /*@target=num.+*/ +=
+        getInt();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++
-        /*@target=Test1.t*/ /*@target=Test1.t*/ t;
+    var /*@ type=int* */ v10 = /*@target=num.+*/ ++ /*@target=Test1.t*/ /*@target=Test1.t*/ t;
 
     var /*@ type=int* */ v11 =
         /*@ type=int* */ /*@target=Test1.t*/ /*@target=Test1.t*/
@@ -40,26 +41,25 @@
 
     var /*@ type=double* */ v3 = /*@target=Test2.t*/ t = getDouble();
 
-    var /*@ type=num* */ v4 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
-         ??= getInt();
+    var /*@ type=num* */ v4 = /*@target=Test2.t*/ /*@target=Test2.t*/ t ??=
+        getInt();
 
-    var /*@ type=num* */ v5 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
-         ??= getNum();
+    var /*@ type=num* */ v5 = /*@target=Test2.t*/ /*@target=Test2.t*/ t ??=
+        getNum();
 
-    var /*@ type=num* */ v6 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
-         ??= getDouble();
+    var /*@ type=num* */ v6 = /*@target=Test2.t*/ /*@target=Test2.t*/ t ??=
+        getDouble();
 
-    var /*@ type=num* */ v7 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
-        /*@target=num.+*/ += getInt();
+    var /*@ type=num* */ v7 = /*@target=Test2.t*/ /*@target=Test2.t*/ t /*@target=num.+*/ +=
+        getInt();
 
-    var /*@ type=num* */ v8 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
-        /*@target=num.+*/ += getNum();
+    var /*@ type=num* */ v8 = /*@target=Test2.t*/ /*@target=Test2.t*/ t /*@target=num.+*/ +=
+        getNum();
 
-    var /*@ type=num* */ v9 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
-        /*@target=num.+*/ += getDouble();
+    var /*@ type=num* */ v9 = /*@target=Test2.t*/ /*@target=Test2.t*/ t /*@target=num.+*/ +=
+        getDouble();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++
-        /*@target=Test2.t*/ /*@target=Test2.t*/ t;
+    var /*@ type=num* */ v10 = /*@target=num.+*/ ++ /*@target=Test2.t*/ /*@target=Test2.t*/ t;
 
     var /*@ type=num* */ v11 =
         /*@ type=num* */ /*@target=Test2.t*/ /*@target=Test2.t*/
@@ -73,20 +73,19 @@
   void test3() {
     var /*@ type=double* */ v3 = /*@target=Test3.t*/ t = getDouble();
 
-    var /*@ type=double* */ v6 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
-         ??= getDouble();
+    var /*@ type=double* */ v6 = /*@target=Test3.t*/ /*@target=Test3.t*/ t ??=
+        getDouble();
 
-    var /*@ type=double* */ v7 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
-        /*@target=double.+*/ += getInt();
+    var /*@ type=double* */ v7 = /*@target=Test3.t*/ /*@target=Test3.t*/ t /*@target=double.+*/ +=
+        getInt();
 
-    var /*@ type=double* */ v8 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
-        /*@target=double.+*/ += getNum();
+    var /*@ type=double* */ v8 = /*@target=Test3.t*/ /*@target=Test3.t*/ t /*@target=double.+*/ +=
+        getNum();
 
-    var /*@ type=double* */ v9 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
-        /*@target=double.+*/ += getDouble();
+    var /*@ type=double* */ v9 = /*@target=Test3.t*/ /*@target=Test3.t*/ t /*@target=double.+*/ +=
+        getDouble();
 
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++
-        /*@target=Test3.t*/ /*@target=Test3.t*/ t;
+    var /*@ type=double* */ v10 = /*@target=double.+*/ ++ /*@target=Test3.t*/ /*@target=Test3.t*/ t;
 
     var /*@ type=double* */ v11 =
         /*@ type=double* */ /*@target=Test3.t*/ /*@target=Test3.t*/
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart
new file mode 100644
index 0000000..a35b3f1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart
@@ -0,0 +1,102 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Test1 {
+  int t;
+  int? t2;
+
+  Test1(this.t, this.t2);
+
+  void test() {
+    var /*@type=int*/ v1 = /*@target=Test1.t*/ t = getInt();
+
+    var /*@type=int*/ v4 = /*@target=Test1.t2*/ /*@target=Test1.t2*/ t2 ??=
+        getInt();
+
+    var /*@type=int*/ v7 = /*@target=Test1.t*/ /*@target=Test1.t*/ t /*@target=num.+*/ +=
+        getInt();
+
+    var /*@type=int*/ v10 = /*@target=num.+*/ ++ /*@target=Test1.t*/ /*@target=Test1.t*/ t;
+
+    var /*@type=int*/ v11 =
+        /*@type=int*/ /*@target=Test1.t*/ /*@target=Test1.t*/
+        /*@type=int*/ t /*@target=num.+*/ ++;
+  }
+}
+
+class Test2 {
+  num t;
+  num? t2;
+
+  Test2(this.t, this.t2);
+
+  void test() {
+    var /*@type=int*/ v1 = /*@target=Test2.t*/ t = getInt();
+
+    var /*@type=num*/ v2 = /*@target=Test2.t*/ t = getNum();
+
+    var /*@type=double*/ v3 = /*@target=Test2.t*/ t = getDouble();
+
+    var /*@type=num*/ v4 = /*@target=Test2.t2*/ /*@target=Test2.t2*/ t2 ??=
+        getInt();
+
+    var /*@type=num*/ v5 = /*@target=Test2.t2*/ /*@target=Test2.t2*/ t2 ??=
+        getNum();
+
+    var /*@type=num*/ v6 = /*@target=Test2.t2*/ /*@target=Test2.t2*/ t2 ??=
+        getDouble();
+
+    var /*@type=num*/ v7 = /*@target=Test2.t*/ /*@target=Test2.t*/ t /*@target=num.+*/ +=
+        getInt();
+
+    var /*@type=num*/ v8 = /*@target=Test2.t*/ /*@target=Test2.t*/ t /*@target=num.+*/ +=
+        getNum();
+
+    var /*@type=double*/ v9 = /*@target=Test2.t*/ /*@target=Test2.t*/ t /*@target=num.+*/ +=
+        getDouble();
+
+    var /*@type=num*/ v10 = /*@target=num.+*/ ++ /*@target=Test2.t*/ /*@target=Test2.t*/ t;
+
+    var /*@type=num*/ v11 =
+        /*@target=Test2.t*/ /*@type=num*/ /*@target=Test2.t*/ /*@type=num*/ t /*@target=num.+*/ ++;
+  }
+}
+
+class Test3 {
+  double t;
+  double? t2;
+
+  Test3(this.t, this.t2);
+
+  void test3() {
+    var /*@type=double*/ v3 = /*@target=Test3.t*/ t = getDouble();
+
+    var /*@type=double*/ v6 = /*@target=Test3.t2*/ /*@target=Test3.t2*/ t2 ??=
+        getDouble();
+
+    var /*@type=double*/ v7 = /*@target=Test3.t*/ /*@target=Test3.t*/ t /*@target=double.+*/ +=
+        getInt();
+
+    var /*@type=double*/ v8 = /*@target=Test3.t*/ /*@target=Test3.t*/ t /*@target=double.+*/ +=
+        getNum();
+
+    var /*@type=double*/ v9 = /*@target=Test3.t*/ /*@target=Test3.t*/ t /*@target=double.+*/ +=
+        getDouble();
+
+    var /*@type=double*/ v10 = /*@target=double.+*/ ++ /*@target=Test3.t*/ /*@target=Test3.t*/ t;
+
+    var /*@type=double*/ v11 =
+        /*@type=double*/ /*@target=Test3.t*/ /*@target=Test3.t*/
+        /*@type=double*/ t /*@target=double.+*/ ++;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.textual_outline.expect
new file mode 100644
index 0000000..a225c9a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.textual_outline.expect
@@ -0,0 +1,28 @@
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Test1 {
+  int t;
+  int? t2;
+  Test1(this.t, this.t2);
+  void test() {}
+}
+
+class Test2 {
+  num t;
+  num? t2;
+  Test2(this.t, this.t2);
+  void test() {}
+}
+
+class Test3 {
+  double t;
+  double? t2;
+  Test3(this.t, this.t2);
+  void test3() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e16ac89
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.textual_outline_modelled.expect
@@ -0,0 +1,27 @@
+library test;
+
+class Test1 {
+  Test1(this.t, this.t2);
+  int? t2;
+  int t;
+  void test() {}
+}
+
+class Test2 {
+  Test2(this.t, this.t2);
+  num? t2;
+  num t;
+  void test() {}
+}
+
+class Test3 {
+  Test3(this.t, this.t2);
+  double? t2;
+  double t;
+  void test3() {}
+}
+
+double getDouble() => 0.0;
+int getInt() => 0;
+main() {}
+num getNum() => 0;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.weak.expect
new file mode 100644
index 0000000..4e47ead
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.weak.expect
@@ -0,0 +1,61 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int t;
+  field core::int? t2;
+  constructor •(core::int t, core::int? t2) → self::Test1
+    : self::Test1::t = t, self::Test1::t2 = t2, super core::Object::•()
+    ;
+  method test() → void {
+    core::int v1 = this.{self::Test1::t} = self::getInt();
+    core::int v4 = let final core::int? #t1 = this.{self::Test1::t2}{core::int?} in #t1 == null ?{core::int} this.{self::Test1::t2} = self::getInt() : #t1{core::int};
+    core::int v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final core::int #t2 = this.{self::Test1::t}{core::int} in let final core::int #t3 = this.{self::Test1::t} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+  }
+}
+class Test2 extends core::Object {
+  field core::num t;
+  field core::num? t2;
+  constructor •(core::num t, core::num? t2) → self::Test2
+    : self::Test2::t = t, self::Test2::t2 = t2, super core::Object::•()
+    ;
+  method test() → void {
+    core::int v1 = this.{self::Test2::t} = self::getInt();
+    core::num v2 = this.{self::Test2::t} = self::getNum();
+    core::double v3 = this.{self::Test2::t} = self::getDouble();
+    core::num v4 = let final core::num? #t4 = this.{self::Test2::t2}{core::num?} in #t4 == null ?{core::num} this.{self::Test2::t2} = self::getInt() : #t4{core::num};
+    core::num v5 = let final core::num? #t5 = this.{self::Test2::t2}{core::num?} in #t5 == null ?{core::num} this.{self::Test2::t2} = self::getNum() : #t5{core::num};
+    core::num v6 = let final core::num? #t6 = this.{self::Test2::t2}{core::num?} in #t6 == null ?{core::num} this.{self::Test2::t2} = self::getDouble() : #t6{core::num};
+    core::num v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final core::num #t7 = this.{self::Test2::t}{core::num} in let final core::num #t8 = this.{self::Test2::t} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+  }
+}
+class Test3 extends core::Object {
+  field core::double t;
+  field core::double? t2;
+  constructor •(core::double t, core::double? t2) → self::Test3
+    : self::Test3::t = t, self::Test3::t2 = t2, super core::Object::•()
+    ;
+  method test3() → void {
+    core::double v3 = this.{self::Test3::t} = self::getDouble();
+    core::double v6 = let final core::double? #t9 = this.{self::Test3::t2}{core::double?} in #t9 == null ?{core::double} this.{self::Test3::t2} = self::getDouble() : #t9{core::double};
+    core::double v7 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final core::double #t10 = this.{self::Test3::t}{core::double} in let final core::double #t11 = this.{self::Test3::t} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.weak.modular.expect
new file mode 100644
index 0000000..4e47ead
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int t;
+  field core::int? t2;
+  constructor •(core::int t, core::int? t2) → self::Test1
+    : self::Test1::t = t, self::Test1::t2 = t2, super core::Object::•()
+    ;
+  method test() → void {
+    core::int v1 = this.{self::Test1::t} = self::getInt();
+    core::int v4 = let final core::int? #t1 = this.{self::Test1::t2}{core::int?} in #t1 == null ?{core::int} this.{self::Test1::t2} = self::getInt() : #t1{core::int};
+    core::int v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final core::int #t2 = this.{self::Test1::t}{core::int} in let final core::int #t3 = this.{self::Test1::t} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+  }
+}
+class Test2 extends core::Object {
+  field core::num t;
+  field core::num? t2;
+  constructor •(core::num t, core::num? t2) → self::Test2
+    : self::Test2::t = t, self::Test2::t2 = t2, super core::Object::•()
+    ;
+  method test() → void {
+    core::int v1 = this.{self::Test2::t} = self::getInt();
+    core::num v2 = this.{self::Test2::t} = self::getNum();
+    core::double v3 = this.{self::Test2::t} = self::getDouble();
+    core::num v4 = let final core::num? #t4 = this.{self::Test2::t2}{core::num?} in #t4 == null ?{core::num} this.{self::Test2::t2} = self::getInt() : #t4{core::num};
+    core::num v5 = let final core::num? #t5 = this.{self::Test2::t2}{core::num?} in #t5 == null ?{core::num} this.{self::Test2::t2} = self::getNum() : #t5{core::num};
+    core::num v6 = let final core::num? #t6 = this.{self::Test2::t2}{core::num?} in #t6 == null ?{core::num} this.{self::Test2::t2} = self::getDouble() : #t6{core::num};
+    core::num v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final core::num #t7 = this.{self::Test2::t}{core::num} in let final core::num #t8 = this.{self::Test2::t} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+  }
+}
+class Test3 extends core::Object {
+  field core::double t;
+  field core::double? t2;
+  constructor •(core::double t, core::double? t2) → self::Test3
+    : self::Test3::t = t, self::Test3::t2 = t2, super core::Object::•()
+    ;
+  method test3() → void {
+    core::double v3 = this.{self::Test3::t} = self::getDouble();
+    core::double v6 = let final core::double? #t9 = this.{self::Test3::t2}{core::double?} in #t9 == null ?{core::double} this.{self::Test3::t2} = self::getDouble() : #t9{core::double};
+    core::double v7 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final core::double #t10 = this.{self::Test3::t}{core::double} in let final core::double #t11 = this.{self::Test3::t} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.weak.outline.expect
new file mode 100644
index 0000000..81126d4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int t;
+  field core::int? t2;
+  constructor •(core::int t, core::int? t2) → self::Test1
+    ;
+  method test() → void
+    ;
+}
+class Test2 extends core::Object {
+  field core::num t;
+  field core::num? t2;
+  constructor •(core::num t, core::num? t2) → self::Test2
+    ;
+  method test() → void
+    ;
+}
+class Test3 extends core::Object {
+  field core::double t;
+  field core::double? t2;
+  constructor •(core::double t, core::double? t2) → self::Test3
+    ;
+  method test3() → void
+    ;
+}
+static method getInt() → core::int
+  ;
+static method getNum() → core::num
+  ;
+static method getDouble() → core::double
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.weak.transformed.expect
new file mode 100644
index 0000000..4e47ead
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards2.dart.weak.transformed.expect
@@ -0,0 +1,61 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int t;
+  field core::int? t2;
+  constructor •(core::int t, core::int? t2) → self::Test1
+    : self::Test1::t = t, self::Test1::t2 = t2, super core::Object::•()
+    ;
+  method test() → void {
+    core::int v1 = this.{self::Test1::t} = self::getInt();
+    core::int v4 = let final core::int? #t1 = this.{self::Test1::t2}{core::int?} in #t1 == null ?{core::int} this.{self::Test1::t2} = self::getInt() : #t1{core::int};
+    core::int v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final core::int #t2 = this.{self::Test1::t}{core::int} in let final core::int #t3 = this.{self::Test1::t} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+  }
+}
+class Test2 extends core::Object {
+  field core::num t;
+  field core::num? t2;
+  constructor •(core::num t, core::num? t2) → self::Test2
+    : self::Test2::t = t, self::Test2::t2 = t2, super core::Object::•()
+    ;
+  method test() → void {
+    core::int v1 = this.{self::Test2::t} = self::getInt();
+    core::num v2 = this.{self::Test2::t} = self::getNum();
+    core::double v3 = this.{self::Test2::t} = self::getDouble();
+    core::num v4 = let final core::num? #t4 = this.{self::Test2::t2}{core::num?} in #t4 == null ?{core::num} this.{self::Test2::t2} = self::getInt() : #t4{core::num};
+    core::num v5 = let final core::num? #t5 = this.{self::Test2::t2}{core::num?} in #t5 == null ?{core::num} this.{self::Test2::t2} = self::getNum() : #t5{core::num};
+    core::num v6 = let final core::num? #t6 = this.{self::Test2::t2}{core::num?} in #t6 == null ?{core::num} this.{self::Test2::t2} = self::getDouble() : #t6{core::num};
+    core::num v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final core::num #t7 = this.{self::Test2::t}{core::num} in let final core::num #t8 = this.{self::Test2::t} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+  }
+}
+class Test3 extends core::Object {
+  field core::double t;
+  field core::double? t2;
+  constructor •(core::double t, core::double? t2) → self::Test3
+    : self::Test3::t = t, self::Test3::t2 = t2, super core::Object::•()
+    ;
+  method test3() → void {
+    core::double v3 = this.{self::Test3::t} = self::getDouble();
+    core::double v6 = let final core::double? #t9 = this.{self::Test3::t2}{core::double?} in #t9 == null ?{core::double} this.{self::Test3::t2} = self::getDouble() : #t9{core::double};
+    core::double v7 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final core::double #t10 = this.{self::Test3::t}{core::double} in let final core::double #t11 = this.{self::Test3::t} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart
index f72d8ca..38d2ead 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,72 +10,78 @@
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
-  B operator -(int i) => null;
-  B operator *(B v) => null;
-  C operator &(A v) => null;
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
 }
 
 class C extends B {}
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class Test {
-  B operator [](Index i) => null;
+  B operator [](Index i) => throw '';
   void operator []=(Index i, B v) {}
 
   void test() {
-    Test t = /*@ typeArgs=Test* */ f();
+    Test t = /*@typeArgs=Test*/ f();
+    Test2 t2 = /*@typeArgs=Test2*/ f();
 
     t /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
+        /*@typeArgs=Index*/ f()] = /*@typeArgs=B*/ f();
 
-    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
+    t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ [/*@typeArgs=Index*/ f()]
         
-        ??= /*@ typeArgs=B* */ f();
+        ??= /*@typeArgs=B?*/ f();
 
-    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@typeArgs=Index*/ f()]
+        /*@target=B.+*/ += /*@typeArgs=C*/ f();
 
-    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@typeArgs=Index*/ f()]
+        /*@target=B.**/ *= /*@typeArgs=B*/ f();
 
-    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@typeArgs=Index*/ f()]
+        /*@target=B.&*/ &= /*@typeArgs=A*/ f();
 
-    t /*@target=Test.[]*/ [/*@ typeArgs=Index* */ f()];
+    t /*@target=Test.[]*/ [/*@typeArgs=Index*/ f()];
 
     /*@target=B.-*/ --t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()];
+        /*@typeArgs=Index*/ f()];
 
     t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] /*@target=B.-*/ --;
+        /*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
 
-    var /*@ type=B* */ v1 = t /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
+    var /*@type=B*/ v1 = t /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] = /*@typeArgs=B*/ f();
 
-    var /*@ type=B* */ v2 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
+    var /*@type=B?*/ v2 = t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ [
+            /*@typeArgs=Index*/ f()]
         
-        ??= /*@ typeArgs=B* */ f();
+        ??= /*@typeArgs=B?*/ f();
 
-    var /*@ type=B* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    var /*@type=B*/ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index*/ f()]
+        /*@target=B.**/ *= /*@typeArgs=B*/ f();
 
-    var /*@ type=C* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    var /*@type=C*/ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index*/ f()]
+        /*@target=B.&*/ &= /*@typeArgs=A*/ f();
 
-    var /*@ type=B* */ v6 = t /*@target=Test.[]*/ [/*@ typeArgs=Index* */ f()];
+    var /*@type=B*/ v6 = t /*@target=Test.[]*/ [/*@typeArgs=Index*/ f()];
 
-    var /*@ type=B* */ v7 =
+    var /*@type=B*/ v7 =
         /*@target=B.-*/ --t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()];
+            /*@typeArgs=Index*/ f()];
 
-    var /*@ type=B* */ v8 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] /*@target=B.-*/ --;
+    var /*@type=B*/ v8 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
   }
 }
 
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.textual_outline.expect
index 5ad8b13..976eb43 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Index {}
@@ -6,20 +5,25 @@
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
-  B operator -(int i) => null;
-  B operator *(B v) => null;
-  C operator &(A v) => null;
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
 }
 
 class C extends B {}
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class Test {
-  B operator [](Index i) => null;
+  B operator [](Index i) => throw '';
   void operator []=(Index i, B v) {}
   void test() {}
 }
 
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.textual_outline_modelled.expect
index d66beca..b9e3599 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.textual_outline_modelled.expect
@@ -1,15 +1,14 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
-  B operator *(B v) => null;
-  B operator -(int i) => null;
-  C operator &(A v) => null;
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
 }
 
 class C extends B {}
@@ -17,9 +16,14 @@
 class Index {}
 
 class Test {
-  B operator [](Index i) => null;
+  B operator [](Index i) => throw '';
   void operator []=(Index i, B v) {}
   void test() {}
 }
 
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.expect
index 446a6ee..158db2e 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.expect
@@ -1,91 +1,70 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Index extends core::Object {
-  synthetic constructor •() → self::Index*
+  synthetic constructor •() → self::Index
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
-    return null;
-  operator -(core::int* i) → self::B*
-    return null;
-  operator *(self::B* v) → self::B*
-    return null;
-  operator &(self::A* v) → self::C*
-    return null;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  synthetic constructor •() → self::Test*
+  synthetic constructor •() → self::Test
     : super core::Object::•()
     ;
-  operator [](self::Index* i) → self::B*
-    return null;
-  operator []=(self::Index* i, self::B* v) → void {}
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
   method test() → void {
-    self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
-    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
-    t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index*, self::B*) →* void} in #t11;
-    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
-    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
-    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20){(self::Index*) →* self::B*} in #t21 == null ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22){(self::Index*, self::B*) →* void} in #t22 : #t21;
-    self::B* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
-    self::C* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::C* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index*, self::B*) →* void} in #t30;
-    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
-    self::B* v7 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::B* #t34 = #t32.{self::Test::[]}(#t33){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index*, self::B*) →* void} in #t34;
-    self::B* v8 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37){(self::Index*) →* self::B*} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t38;
+    self::Test t = self::f<self::Test>();
+    self::Test2 t2 = self::f<self::Test2>();
+    t.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
+    let final self::Test2 #t1 = t2 in let final self::Index #t2 = self::f<self::Index>() in #t1.{self::Test2::[]}(#t2){(self::Index) → self::B?} == null ?{self::B?} #t1.{self::Test2::[]=}(#t2, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
+    let final self::Test #t3 = t in let final self::Index #t4 = self::f<self::Index>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
+    let final self::Test #t5 = t in let final self::Index #t6 = self::f<self::Index>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
+    let final self::Test #t7 = t in let final self::Index #t8 = self::f<self::Index>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
+    t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
+    let final self::Test #t9 = t in let final self::Index #t10 = self::f<self::Index>() in let final self::B #t11 = #t9.{self::Test::[]}(#t10){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index, self::B) → void} in #t11;
+    let final self::Test #t13 = t in let final self::Index #t14 = self::f<self::Index>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
+    self::B v1 = let final self::Test #t15 = t in let final self::Index #t16 = self::f<self::Index>() in let final self::B #t17 = self::f<self::B>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index, self::B) → void} in #t17;
+    self::B? v2 = let final self::Test2 #t19 = t2 in let final self::Index #t20 = self::f<self::Index>() in let final self::B? #t21 = #t19.{self::Test2::[]}(#t20){(self::Index) → self::B?} in #t21 == null ?{self::B?} let final self::B? #t22 = self::f<self::B?>() in let final void #t23 = #t19.{self::Test2::[]=}(#t20, #t22){(self::Index, self::B?) → void} in #t22 : #t21{self::B};
+    self::B v4 = let final self::Test #t24 = t in let final self::Index #t25 = self::f<self::Index>() in let final self::B #t26 = #t24.{self::Test::[]}(#t25){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index, self::B) → void} in #t26;
+    self::C v5 = let final self::Test #t28 = t in let final self::Index #t29 = self::f<self::Index>() in let final self::C #t30 = #t28.{self::Test::[]}(#t29){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index, self::B) → void} in #t30;
+    self::B v6 = t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
+    self::B v7 = let final self::Test #t32 = t in let final self::Index #t33 = self::f<self::Index>() in let final self::B #t34 = #t32.{self::Test::[]}(#t33){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index, self::B) → void} in #t34;
+    self::B v8 = let final self::Test #t36 = t in let final self::Index #t37 = self::f<self::Index>() in let final self::B #t38 = #t36.{self::Test::[]}(#t37){(self::Index) → self::B} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t38;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.modular.expect
index 446a6ee..158db2e 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.modular.expect
@@ -1,91 +1,70 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Index extends core::Object {
-  synthetic constructor •() → self::Index*
+  synthetic constructor •() → self::Index
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
-    return null;
-  operator -(core::int* i) → self::B*
-    return null;
-  operator *(self::B* v) → self::B*
-    return null;
-  operator &(self::A* v) → self::C*
-    return null;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  synthetic constructor •() → self::Test*
+  synthetic constructor •() → self::Test
     : super core::Object::•()
     ;
-  operator [](self::Index* i) → self::B*
-    return null;
-  operator []=(self::Index* i, self::B* v) → void {}
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
   method test() → void {
-    self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
-    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
-    t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index*, self::B*) →* void} in #t11;
-    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
-    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
-    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20){(self::Index*) →* self::B*} in #t21 == null ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22){(self::Index*, self::B*) →* void} in #t22 : #t21;
-    self::B* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
-    self::C* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::C* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index*, self::B*) →* void} in #t30;
-    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
-    self::B* v7 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::B* #t34 = #t32.{self::Test::[]}(#t33){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index*, self::B*) →* void} in #t34;
-    self::B* v8 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37){(self::Index*) →* self::B*} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t38;
+    self::Test t = self::f<self::Test>();
+    self::Test2 t2 = self::f<self::Test2>();
+    t.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
+    let final self::Test2 #t1 = t2 in let final self::Index #t2 = self::f<self::Index>() in #t1.{self::Test2::[]}(#t2){(self::Index) → self::B?} == null ?{self::B?} #t1.{self::Test2::[]=}(#t2, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
+    let final self::Test #t3 = t in let final self::Index #t4 = self::f<self::Index>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
+    let final self::Test #t5 = t in let final self::Index #t6 = self::f<self::Index>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
+    let final self::Test #t7 = t in let final self::Index #t8 = self::f<self::Index>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
+    t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
+    let final self::Test #t9 = t in let final self::Index #t10 = self::f<self::Index>() in let final self::B #t11 = #t9.{self::Test::[]}(#t10){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index, self::B) → void} in #t11;
+    let final self::Test #t13 = t in let final self::Index #t14 = self::f<self::Index>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
+    self::B v1 = let final self::Test #t15 = t in let final self::Index #t16 = self::f<self::Index>() in let final self::B #t17 = self::f<self::B>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index, self::B) → void} in #t17;
+    self::B? v2 = let final self::Test2 #t19 = t2 in let final self::Index #t20 = self::f<self::Index>() in let final self::B? #t21 = #t19.{self::Test2::[]}(#t20){(self::Index) → self::B?} in #t21 == null ?{self::B?} let final self::B? #t22 = self::f<self::B?>() in let final void #t23 = #t19.{self::Test2::[]=}(#t20, #t22){(self::Index, self::B?) → void} in #t22 : #t21{self::B};
+    self::B v4 = let final self::Test #t24 = t in let final self::Index #t25 = self::f<self::Index>() in let final self::B #t26 = #t24.{self::Test::[]}(#t25){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index, self::B) → void} in #t26;
+    self::C v5 = let final self::Test #t28 = t in let final self::Index #t29 = self::f<self::Index>() in let final self::C #t30 = #t28.{self::Test::[]}(#t29){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index, self::B) → void} in #t30;
+    self::B v6 = t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
+    self::B v7 = let final self::Test #t32 = t in let final self::Index #t33 = self::f<self::Index>() in let final self::B #t34 = #t32.{self::Test::[]}(#t33){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index, self::B) → void} in #t34;
+    self::B v8 = let final self::Test #t36 = t in let final self::Index #t37 = self::f<self::Index>() in let final self::B #t38 = #t36.{self::Test::[]}(#t37){(self::Index) → self::B} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t38;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.outline.expect
index 01bd466..fd96765 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.outline.expect
@@ -1,72 +1,50 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Index extends core::Object {
-  synthetic constructor •() → self::Index*
+  synthetic constructor •() → self::Index
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator +(self::C* v) → self::A*
+  operator +(self::C v) → self::B
     ;
-  operator -(core::int* i) → self::B*
+  operator -(core::int i) → self::B
     ;
-  operator *(self::B* v) → self::B*
+  operator *(self::B v) → self::B
     ;
-  operator &(self::A* v) → self::C*
+  operator &(self::A v) → self::C
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 class Test extends core::Object {
-  synthetic constructor •() → self::Test*
+  synthetic constructor •() → self::Test
     ;
-  operator [](self::Index* i) → self::B*
+  operator [](self::Index i) → self::B
     ;
-  operator []=(self::Index* i, self::B* v) → void
+  operator []=(self::Index i, self::B v) → void
     ;
   method test() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    ;
+  operator [](self::Index i) → self::B?
+    ;
+  operator []=(self::Index i, self::B? v) → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.transformed.expect
index 446a6ee..158db2e 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.transformed.expect
@@ -1,91 +1,70 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Index extends core::Object {
-  synthetic constructor •() → self::Index*
+  synthetic constructor •() → self::Index
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
-    return null;
-  operator -(core::int* i) → self::B*
-    return null;
-  operator *(self::B* v) → self::B*
-    return null;
-  operator &(self::A* v) → self::C*
-    return null;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  synthetic constructor •() → self::Test*
+  synthetic constructor •() → self::Test
     : super core::Object::•()
     ;
-  operator [](self::Index* i) → self::B*
-    return null;
-  operator []=(self::Index* i, self::B* v) → void {}
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
   method test() → void {
-    self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
-    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
-    t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index*, self::B*) →* void} in #t11;
-    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
-    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
-    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20){(self::Index*) →* self::B*} in #t21 == null ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22){(self::Index*, self::B*) →* void} in #t22 : #t21;
-    self::B* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
-    self::C* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::C* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index*, self::B*) →* void} in #t30;
-    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
-    self::B* v7 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::B* #t34 = #t32.{self::Test::[]}(#t33){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index*, self::B*) →* void} in #t34;
-    self::B* v8 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37){(self::Index*) →* self::B*} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t38;
+    self::Test t = self::f<self::Test>();
+    self::Test2 t2 = self::f<self::Test2>();
+    t.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
+    let final self::Test2 #t1 = t2 in let final self::Index #t2 = self::f<self::Index>() in #t1.{self::Test2::[]}(#t2){(self::Index) → self::B?} == null ?{self::B?} #t1.{self::Test2::[]=}(#t2, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
+    let final self::Test #t3 = t in let final self::Index #t4 = self::f<self::Index>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
+    let final self::Test #t5 = t in let final self::Index #t6 = self::f<self::Index>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
+    let final self::Test #t7 = t in let final self::Index #t8 = self::f<self::Index>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
+    t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
+    let final self::Test #t9 = t in let final self::Index #t10 = self::f<self::Index>() in let final self::B #t11 = #t9.{self::Test::[]}(#t10){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index, self::B) → void} in #t11;
+    let final self::Test #t13 = t in let final self::Index #t14 = self::f<self::Index>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
+    self::B v1 = let final self::Test #t15 = t in let final self::Index #t16 = self::f<self::Index>() in let final self::B #t17 = self::f<self::B>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index, self::B) → void} in #t17;
+    self::B? v2 = let final self::Test2 #t19 = t2 in let final self::Index #t20 = self::f<self::Index>() in let final self::B? #t21 = #t19.{self::Test2::[]}(#t20){(self::Index) → self::B?} in #t21 == null ?{self::B?} let final self::B? #t22 = self::f<self::B?>() in let final void #t23 = #t19.{self::Test2::[]=}(#t20, #t22){(self::Index, self::B?) → void} in #t22 : #t21{self::B};
+    self::B v4 = let final self::Test #t24 = t in let final self::Index #t25 = self::f<self::Index>() in let final self::B #t26 = #t24.{self::Test::[]}(#t25){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index, self::B) → void} in #t26;
+    self::C v5 = let final self::Test #t28 = t in let final self::Index #t29 = self::f<self::Index>() in let final self::C #t30 = #t28.{self::Test::[]}(#t29){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index, self::B) → void} in #t30;
+    self::B v6 = t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
+    self::B v7 = let final self::Test #t32 = t in let final self::Index #t33 = self::f<self::Index>() in let final self::B #t34 = #t32.{self::Test::[]}(#t33){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index, self::B) → void} in #t34;
+    self::B v8 = let final self::Test #t36 = t in let final self::Index #t37 = self::f<self::Index>() in let final self::B #t38 = #t36.{self::Test::[]}(#t37){(self::Index) → self::B} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t38;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart
index f9e36a6..b9a5601 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -31,20 +33,16 @@
         /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()] 
-        ??= /*@ typeArgs=B* */ f();
+        /*@ typeArgs=Index* */ f()] ??= /*@ typeArgs=B* */ f();
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+        /*@ typeArgs=Index* */ f()] /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+        /*@ typeArgs=Index* */ f()] /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+        /*@ typeArgs=Index* */ f()] /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
     /*@target=B.-*/ --super /*@target=Base.[]*/ /*@target=Base.[]=*/
         [/*@ typeArgs=Index* */ f()];
@@ -56,27 +54,21 @@
         /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
 
     var /*@ type=B* */ v2 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()] 
-        ??= /*@ typeArgs=B* */ f();
+        /*@ typeArgs=Index* */ f()] ??= /*@ typeArgs=B* */ f();
 
     var /*@ type=A* */ v3 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+        /*@ typeArgs=Index* */ f()] /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
     var /*@ type=B* */ v4 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+        /*@ typeArgs=Index* */ f()] /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
     var /*@ type=C* */ v5 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+        /*@ typeArgs=Index* */ f()] /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
-    var /*@ type=B* */ v6 = /*@target=B.-*/ --super
-        /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+    var /*@ type=B* */ v6 = /*@target=B.-*/ --super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
         /*@ typeArgs=Index* */ f()];
 
-    var /*@ type=B* */ v7 = super
-        /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+    var /*@ type=B* */ v7 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
         /*@ typeArgs=Index* */ f()] /*@target=B.-*/ --;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart
new file mode 100644
index 0000000..931eca5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class Index {}
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Base {
+  B operator [](Index i) => throw '';
+  void operator []=(Index i, B v) {}
+}
+
+class Test extends Base {
+  void test() {
+    super /*@target=Base.[]=*/ [/*@typeArgs=Index*/ f()] = /*@typeArgs=B*/ f();
+
+    super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    /*@target=B.-*/ --super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        [/*@typeArgs=Index*/ f()];
+
+    super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        [/*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
+
+    var /*@type=B*/ v1 = super /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] = /*@typeArgs=B*/ f();
+
+    var /*@type=B*/ v3 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    var /*@type=B*/ v4 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    var /*@type=C*/ v5 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    var /*@type=B*/ v6 = /*@target=B.-*/ --super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()];
+
+    var /*@type=B*/ v7 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
+  }
+}
+
+class Base2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+}
+
+class Test2 extends Base2 {
+  void test() {
+    super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ [
+        /*@typeArgs=Index*/ f()] ??= /*@typeArgs=B?*/ f();
+
+    var /*@type=B?*/ v2 = super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ [
+        /*@typeArgs=Index*/ f()] ??= /*@typeArgs=B?*/ f();
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.textual_outline.expect
new file mode 100644
index 0000000..5b1cc8c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.textual_outline.expect
@@ -0,0 +1,36 @@
+library test;
+
+class Index {}
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Base {
+  B operator [](Index i) => throw '';
+  void operator []=(Index i, B v) {}
+}
+
+class Test extends Base {
+  void test() {}
+}
+
+class Base2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+}
+
+class Test2 extends Base2 {
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1a3ca27
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.textual_outline_modelled.expect
@@ -0,0 +1,36 @@
+library test;
+
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class Base {
+  B operator [](Index i) => throw '';
+  void operator []=(Index i, B v) {}
+}
+
+class Base2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+}
+
+class C extends B {}
+
+class Index {}
+
+class Test extends Base {
+  void test() {}
+}
+
+class Test2 extends Base2 {
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.weak.expect
new file mode 100644
index 0000000..fb9581e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.weak.expect
@@ -0,0 +1,79 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::[]=}(self::f<self::Index>(), self::f<self::B>());
+    let final self::Index #t1 = self::f<self::Index>() in super.{self::Base::[]=}(#t1, super.{self::Base::[]}(#t1).{self::B::+}(self::f<self::C>()){(self::C) → self::B});
+    let final self::Index #t2 = self::f<self::Index>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::*}(self::f<self::B>()){(self::B) → self::B});
+    let final self::Index #t3 = self::f<self::Index>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::&}(self::f<self::A>()){(self::A) → self::C});
+    let final self::Index #t4 = self::f<self::Index>() in let final self::B #t5 = super.{self::Base::[]}(#t4).{self::B::-}(1){(core::int) → self::B} in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
+    let final self::Index #t7 = self::f<self::Index>() in super.{self::Base::[]=}(#t7, super.{self::Base::[]}(#t7).{self::B::-}(1){(core::int) → self::B});
+    self::B v1 = let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = self::f<self::B>() in let final void #t10 = super.{self::Base::[]=}(#t8, #t9) in #t9;
+    self::B v3 = let final self::Index #t11 = self::f<self::Index>() in let final self::B #t12 = super.{self::Base::[]}(#t11).{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t13 = super.{self::Base::[]=}(#t11, #t12) in #t12;
+    self::B v4 = let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = super.{self::Base::[]}(#t14).{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t16 = super.{self::Base::[]=}(#t14, #t15) in #t15;
+    self::C v5 = let final self::Index #t17 = self::f<self::Index>() in let final self::C #t18 = super.{self::Base::[]}(#t17).{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t19 = super.{self::Base::[]=}(#t17, #t18) in #t18;
+    self::B v6 = let final self::Index #t20 = self::f<self::Index>() in let final self::B #t21 = super.{self::Base::[]}(#t20).{self::B::-}(1){(core::int) → self::B} in let final void #t22 = super.{self::Base::[]=}(#t20, #t21) in #t21;
+    self::B v7 = let final self::Index #t23 = self::f<self::Index>() in let final self::B #t24 = super.{self::Base::[]}(#t23) in let final void #t25 = super.{self::Base::[]=}(#t23, #t24.{self::B::-}(1){(core::int) → self::B}) in #t24;
+  }
+}
+class Base2 extends core::Object {
+  synthetic constructor •() → self::Base2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+}
+class Test2 extends self::Base2 {
+  synthetic constructor •() → self::Test2
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    let final self::Index #t26 = self::f<self::Index>() in super.{self::Base2::[]}(#t26) == null ?{self::B?} super.{self::Base2::[]=}(#t26, self::f<self::B?>()) : null;
+    self::B? v2 = let final self::Index #t27 = self::f<self::Index>() in let final self::B? #t28 = super.{self::Base2::[]}(#t27) in #t28 == null ?{self::B?} let final self::B? #t29 = self::f<self::B?>() in let final void #t30 = super.{self::Base2::[]=}(#t27, #t29) in #t29 : #t28{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.weak.modular.expect
new file mode 100644
index 0000000..fb9581e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::[]=}(self::f<self::Index>(), self::f<self::B>());
+    let final self::Index #t1 = self::f<self::Index>() in super.{self::Base::[]=}(#t1, super.{self::Base::[]}(#t1).{self::B::+}(self::f<self::C>()){(self::C) → self::B});
+    let final self::Index #t2 = self::f<self::Index>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::*}(self::f<self::B>()){(self::B) → self::B});
+    let final self::Index #t3 = self::f<self::Index>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::&}(self::f<self::A>()){(self::A) → self::C});
+    let final self::Index #t4 = self::f<self::Index>() in let final self::B #t5 = super.{self::Base::[]}(#t4).{self::B::-}(1){(core::int) → self::B} in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
+    let final self::Index #t7 = self::f<self::Index>() in super.{self::Base::[]=}(#t7, super.{self::Base::[]}(#t7).{self::B::-}(1){(core::int) → self::B});
+    self::B v1 = let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = self::f<self::B>() in let final void #t10 = super.{self::Base::[]=}(#t8, #t9) in #t9;
+    self::B v3 = let final self::Index #t11 = self::f<self::Index>() in let final self::B #t12 = super.{self::Base::[]}(#t11).{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t13 = super.{self::Base::[]=}(#t11, #t12) in #t12;
+    self::B v4 = let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = super.{self::Base::[]}(#t14).{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t16 = super.{self::Base::[]=}(#t14, #t15) in #t15;
+    self::C v5 = let final self::Index #t17 = self::f<self::Index>() in let final self::C #t18 = super.{self::Base::[]}(#t17).{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t19 = super.{self::Base::[]=}(#t17, #t18) in #t18;
+    self::B v6 = let final self::Index #t20 = self::f<self::Index>() in let final self::B #t21 = super.{self::Base::[]}(#t20).{self::B::-}(1){(core::int) → self::B} in let final void #t22 = super.{self::Base::[]=}(#t20, #t21) in #t21;
+    self::B v7 = let final self::Index #t23 = self::f<self::Index>() in let final self::B #t24 = super.{self::Base::[]}(#t23) in let final void #t25 = super.{self::Base::[]=}(#t23, #t24.{self::B::-}(1){(core::int) → self::B}) in #t24;
+  }
+}
+class Base2 extends core::Object {
+  synthetic constructor •() → self::Base2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+}
+class Test2 extends self::Base2 {
+  synthetic constructor •() → self::Test2
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    let final self::Index #t26 = self::f<self::Index>() in super.{self::Base2::[]}(#t26) == null ?{self::B?} super.{self::Base2::[]=}(#t26, self::f<self::B?>()) : null;
+    self::B? v2 = let final self::Index #t27 = self::f<self::Index>() in let final self::B? #t28 = super.{self::Base2::[]}(#t27) in #t28 == null ?{self::B?} let final self::B? #t29 = self::f<self::B?>() in let final void #t30 = super.{self::Base2::[]=}(#t27, #t29) in #t29 : #t28{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.weak.outline.expect
new file mode 100644
index 0000000..090bb5b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.weak.outline.expect
@@ -0,0 +1,60 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+class Base extends core::Object {
+  synthetic constructor •() → self::Base
+    ;
+  operator [](self::Index i) → self::B
+    ;
+  operator []=(self::Index i, self::B v) → void
+    ;
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test
+    ;
+  method test() → void
+    ;
+}
+class Base2 extends core::Object {
+  synthetic constructor •() → self::Base2
+    ;
+  operator [](self::Index i) → self::B?
+    ;
+  operator []=(self::Index i, self::B? v) → void
+    ;
+}
+class Test2 extends self::Base2 {
+  synthetic constructor •() → self::Test2
+    ;
+  method test() → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.weak.transformed.expect
new file mode 100644
index 0000000..fb9581e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super2.dart.weak.transformed.expect
@@ -0,0 +1,79 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::[]=}(self::f<self::Index>(), self::f<self::B>());
+    let final self::Index #t1 = self::f<self::Index>() in super.{self::Base::[]=}(#t1, super.{self::Base::[]}(#t1).{self::B::+}(self::f<self::C>()){(self::C) → self::B});
+    let final self::Index #t2 = self::f<self::Index>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::*}(self::f<self::B>()){(self::B) → self::B});
+    let final self::Index #t3 = self::f<self::Index>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::&}(self::f<self::A>()){(self::A) → self::C});
+    let final self::Index #t4 = self::f<self::Index>() in let final self::B #t5 = super.{self::Base::[]}(#t4).{self::B::-}(1){(core::int) → self::B} in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
+    let final self::Index #t7 = self::f<self::Index>() in super.{self::Base::[]=}(#t7, super.{self::Base::[]}(#t7).{self::B::-}(1){(core::int) → self::B});
+    self::B v1 = let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = self::f<self::B>() in let final void #t10 = super.{self::Base::[]=}(#t8, #t9) in #t9;
+    self::B v3 = let final self::Index #t11 = self::f<self::Index>() in let final self::B #t12 = super.{self::Base::[]}(#t11).{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t13 = super.{self::Base::[]=}(#t11, #t12) in #t12;
+    self::B v4 = let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = super.{self::Base::[]}(#t14).{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t16 = super.{self::Base::[]=}(#t14, #t15) in #t15;
+    self::C v5 = let final self::Index #t17 = self::f<self::Index>() in let final self::C #t18 = super.{self::Base::[]}(#t17).{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t19 = super.{self::Base::[]=}(#t17, #t18) in #t18;
+    self::B v6 = let final self::Index #t20 = self::f<self::Index>() in let final self::B #t21 = super.{self::Base::[]}(#t20).{self::B::-}(1){(core::int) → self::B} in let final void #t22 = super.{self::Base::[]=}(#t20, #t21) in #t21;
+    self::B v7 = let final self::Index #t23 = self::f<self::Index>() in let final self::B #t24 = super.{self::Base::[]}(#t23) in let final void #t25 = super.{self::Base::[]=}(#t23, #t24.{self::B::-}(1){(core::int) → self::B}) in #t24;
+  }
+}
+class Base2 extends core::Object {
+  synthetic constructor •() → self::Base2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+}
+class Test2 extends self::Base2 {
+  synthetic constructor •() → self::Test2
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    let final self::Index #t26 = self::f<self::Index>() in super.{self::Base2::[]}(#t26) == null ?{self::B?} super.{self::Base2::[]=}(#t26, self::f<self::B?>()) : null;
+    self::B? v2 = let final self::Index #t27 = self::f<self::Index>() in let final self::B? #t28 = super.{self::Base2::[]}(#t27) in #t28 == null ?{self::B?} let final self::B? #t29 = self::f<self::B?>() in let final void #t30 = super.{self::Base2::[]=}(#t27, #t29) in #t29 : #t28{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart
index d42816b..4eddff3 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart
new file mode 100644
index 0000000..6c16f90
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart
@@ -0,0 +1,84 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class Index {}
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Test {
+  B operator [](Index i) => throw '';
+  void operator []=(Index i, B v) {}
+
+  void test() {
+    this /*@target=Test.[]=*/ [/*@typeArgs=Index*/ f()] = /*@typeArgs=B*/ f();
+
+    this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index*/ f()] /*@target=B.+*/
+        += /*@typeArgs=C*/ f();
+
+    this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index*/ f()] /*@target=B.**/
+        *= /*@typeArgs=B*/ f();
+
+    this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index*/ f()] /*@target=B.&*/
+        &= /*@typeArgs=A*/ f();
+
+    /*@target=B.-*/ --this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()];
+
+    this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
+
+    var /*@type=B*/ v1 = this /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] = /*@typeArgs=B*/ f();
+
+    var /*@type=B*/ v4 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index*/ f()] /*@target=B.+*/
+        += /*@typeArgs=C*/ f();
+
+    var /*@type=B*/ v3 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index*/ f()] /*@target=B.**/
+        *= /*@typeArgs=B*/ f();
+
+    var /*@type=C*/ v5 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index*/ f()] /*@target=B.&*/
+        &= /*@typeArgs=A*/ f();
+
+    var /*@type=B*/ v6 = /*@target=B.-*/ --this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()];
+
+    var /*@type=B*/ v7 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
+  }
+}
+
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+
+  void test() {
+    this /*@target=Test2.[]*/ /*@target=Test2.[]=*/ [
+        /*@typeArgs=Index*/ f()] ??= /*@typeArgs=B?*/ f();
+
+    var /*@type=B?*/ v2 = this /*@target=Test2.[]*/ /*@target=Test2.[]=*/ [
+        /*@typeArgs=Index*/ f()] ??= /*@typeArgs=B?*/ f();
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.textual_outline.expect
new file mode 100644
index 0000000..52bbd2c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.textual_outline.expect
@@ -0,0 +1,30 @@
+library test;
+
+class Index {}
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Test {
+  B operator [](Index i) => throw '';
+  void operator []=(Index i, B v) {}
+  void test() {}
+}
+
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3c0c624
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.textual_outline_modelled.expect
@@ -0,0 +1,30 @@
+library test;
+
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+class Index {}
+
+class Test {
+  B operator [](Index i) => throw '';
+  void operator []=(Index i, B v) {}
+  void test() {}
+}
+
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.weak.expect
new file mode 100644
index 0000000..a623636
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.weak.expect
@@ -0,0 +1,69 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
+  method test() → void {
+    this.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
+    let final self::Index #t1 = self::f<self::Index>() in this.{self::Test::[]=}(#t1, this.{self::Test::[]}(#t1){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
+    let final self::Index #t2 = self::f<self::Index>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
+    let final self::Index #t3 = self::f<self::Index>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
+    let final self::Index #t4 = self::f<self::Index>() in let final self::B #t5 = this.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t6 = this.{self::Test::[]=}(#t4, #t5){(self::Index, self::B) → void} in #t5;
+    let final self::Index #t7 = self::f<self::Index>() in this.{self::Test::[]=}(#t7, this.{self::Test::[]}(#t7){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
+    self::B v1 = let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = self::f<self::B>() in let final void #t10 = this.{self::Test::[]=}(#t8, #t9){(self::Index, self::B) → void} in #t9;
+    self::B v4 = let final self::Index #t11 = self::f<self::Index>() in let final self::B #t12 = this.{self::Test::[]}(#t11){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t13 = this.{self::Test::[]=}(#t11, #t12){(self::Index, self::B) → void} in #t12;
+    self::B v3 = let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = this.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t16 = this.{self::Test::[]=}(#t14, #t15){(self::Index, self::B) → void} in #t15;
+    self::C v5 = let final self::Index #t17 = self::f<self::Index>() in let final self::C #t18 = this.{self::Test::[]}(#t17){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t19 = this.{self::Test::[]=}(#t17, #t18){(self::Index, self::B) → void} in #t18;
+    self::B v6 = let final self::Index #t20 = self::f<self::Index>() in let final self::B #t21 = this.{self::Test::[]}(#t20){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t22 = this.{self::Test::[]=}(#t20, #t21){(self::Index, self::B) → void} in #t21;
+    self::B v7 = let final self::Index #t23 = self::f<self::Index>() in let final self::B #t24 = this.{self::Test::[]}(#t23){(self::Index) → self::B} in let final void #t25 = this.{self::Test::[]=}(#t23, #t24.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t24;
+  }
+}
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+  method test() → void {
+    let final self::Index #t26 = self::f<self::Index>() in this.{self::Test2::[]}(#t26){(self::Index) → self::B?} == null ?{self::B?} this.{self::Test2::[]=}(#t26, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
+    self::B? v2 = let final self::Index #t27 = self::f<self::Index>() in let final self::B? #t28 = this.{self::Test2::[]}(#t27){(self::Index) → self::B?} in #t28 == null ?{self::B?} let final self::B? #t29 = self::f<self::B?>() in let final void #t30 = this.{self::Test2::[]=}(#t27, #t29){(self::Index, self::B?) → void} in #t29 : #t28{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.weak.modular.expect
new file mode 100644
index 0000000..a623636
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
+  method test() → void {
+    this.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
+    let final self::Index #t1 = self::f<self::Index>() in this.{self::Test::[]=}(#t1, this.{self::Test::[]}(#t1){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
+    let final self::Index #t2 = self::f<self::Index>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
+    let final self::Index #t3 = self::f<self::Index>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
+    let final self::Index #t4 = self::f<self::Index>() in let final self::B #t5 = this.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t6 = this.{self::Test::[]=}(#t4, #t5){(self::Index, self::B) → void} in #t5;
+    let final self::Index #t7 = self::f<self::Index>() in this.{self::Test::[]=}(#t7, this.{self::Test::[]}(#t7){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
+    self::B v1 = let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = self::f<self::B>() in let final void #t10 = this.{self::Test::[]=}(#t8, #t9){(self::Index, self::B) → void} in #t9;
+    self::B v4 = let final self::Index #t11 = self::f<self::Index>() in let final self::B #t12 = this.{self::Test::[]}(#t11){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t13 = this.{self::Test::[]=}(#t11, #t12){(self::Index, self::B) → void} in #t12;
+    self::B v3 = let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = this.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t16 = this.{self::Test::[]=}(#t14, #t15){(self::Index, self::B) → void} in #t15;
+    self::C v5 = let final self::Index #t17 = self::f<self::Index>() in let final self::C #t18 = this.{self::Test::[]}(#t17){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t19 = this.{self::Test::[]=}(#t17, #t18){(self::Index, self::B) → void} in #t18;
+    self::B v6 = let final self::Index #t20 = self::f<self::Index>() in let final self::B #t21 = this.{self::Test::[]}(#t20){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t22 = this.{self::Test::[]=}(#t20, #t21){(self::Index, self::B) → void} in #t21;
+    self::B v7 = let final self::Index #t23 = self::f<self::Index>() in let final self::B #t24 = this.{self::Test::[]}(#t23){(self::Index) → self::B} in let final void #t25 = this.{self::Test::[]=}(#t23, #t24.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t24;
+  }
+}
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+  method test() → void {
+    let final self::Index #t26 = self::f<self::Index>() in this.{self::Test2::[]}(#t26){(self::Index) → self::B?} == null ?{self::B?} this.{self::Test2::[]=}(#t26, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
+    self::B? v2 = let final self::Index #t27 = self::f<self::Index>() in let final self::B? #t28 = this.{self::Test2::[]}(#t27){(self::Index) → self::B?} in #t28 == null ?{self::B?} let final self::B? #t29 = self::f<self::B?>() in let final void #t30 = this.{self::Test2::[]=}(#t27, #t29){(self::Index, self::B?) → void} in #t29 : #t28{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.weak.outline.expect
new file mode 100644
index 0000000..03e4c14
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.weak.outline.expect
@@ -0,0 +1,52 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test
+    ;
+  operator [](self::Index i) → self::B
+    ;
+  operator []=(self::Index i, self::B v) → void
+    ;
+  method test() → void
+    ;
+}
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    ;
+  operator [](self::Index i) → self::B?
+    ;
+  operator []=(self::Index i, self::B? v) → void
+    ;
+  method test() → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.weak.transformed.expect
new file mode 100644
index 0000000..a623636
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this2.dart.weak.transformed.expect
@@ -0,0 +1,69 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
+  method test() → void {
+    this.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
+    let final self::Index #t1 = self::f<self::Index>() in this.{self::Test::[]=}(#t1, this.{self::Test::[]}(#t1){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
+    let final self::Index #t2 = self::f<self::Index>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
+    let final self::Index #t3 = self::f<self::Index>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
+    let final self::Index #t4 = self::f<self::Index>() in let final self::B #t5 = this.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t6 = this.{self::Test::[]=}(#t4, #t5){(self::Index, self::B) → void} in #t5;
+    let final self::Index #t7 = self::f<self::Index>() in this.{self::Test::[]=}(#t7, this.{self::Test::[]}(#t7){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
+    self::B v1 = let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = self::f<self::B>() in let final void #t10 = this.{self::Test::[]=}(#t8, #t9){(self::Index, self::B) → void} in #t9;
+    self::B v4 = let final self::Index #t11 = self::f<self::Index>() in let final self::B #t12 = this.{self::Test::[]}(#t11){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t13 = this.{self::Test::[]=}(#t11, #t12){(self::Index, self::B) → void} in #t12;
+    self::B v3 = let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = this.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t16 = this.{self::Test::[]=}(#t14, #t15){(self::Index, self::B) → void} in #t15;
+    self::C v5 = let final self::Index #t17 = self::f<self::Index>() in let final self::C #t18 = this.{self::Test::[]}(#t17){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t19 = this.{self::Test::[]=}(#t17, #t18){(self::Index, self::B) → void} in #t18;
+    self::B v6 = let final self::Index #t20 = self::f<self::Index>() in let final self::B #t21 = this.{self::Test::[]}(#t20){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t22 = this.{self::Test::[]=}(#t20, #t21){(self::Index, self::B) → void} in #t21;
+    self::B v7 = let final self::Index #t23 = self::f<self::Index>() in let final self::B #t24 = this.{self::Test::[]}(#t23){(self::Index) → self::B} in let final void #t25 = this.{self::Test::[]=}(#t23, #t24.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t24;
+  }
+}
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+  method test() → void {
+    let final self::Index #t26 = self::f<self::Index>() in this.{self::Test2::[]}(#t26){(self::Index) → self::B?} == null ?{self::B?} this.{self::Test2::[]=}(#t26, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
+    self::B? v2 = let final self::Index #t27 = self::f<self::Index>() in let final self::B? #t28 = this.{self::Test2::[]}(#t27){(self::Index) → self::B?} in #t28 == null ?{self::B?} let final self::B? #t29 = self::f<self::B?>() in let final void #t30 = this.{self::Test2::[]=}(#t27, #t29){(self::Index, self::B?) → void} in #t29 : #t28{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart b/pkg/front_end/testcases/inference/infer_assign_to_local.dart
index 56ebaa0..e72891d 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local2.dart b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart
new file mode 100644
index 0000000..3cca74e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart
@@ -0,0 +1,51 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+void test(B local, B? local2, B? local3) {
+  local = /*@typeArgs=B*/ f();
+
+  local2 ??= /*@typeArgs=B?*/ f();
+
+  local /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+  local /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+  local /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+  /*@target=B.-*/ --local;
+
+  local /*@target=B.-*/ --;
+
+  var /*@type=B*/ v1 = local = /*@typeArgs=B*/ f();
+
+  var /*@type=B?*/ v2 = local3 ??= /*@typeArgs=B?*/ f();
+
+  var /*@type=B*/ v3 = local /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+  var /*@type=B*/ v4 = local /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+  var /*@type=C*/ v5 = local /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+  var /*@type=B*/ v6 = /*@target=B.-*/ --local;
+
+  var /*@type=B*/ v7 = /*@type=B*/ local /*@type=B*/ /*@target=B.-*/ --;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.textual_outline.expect
new file mode 100644
index 0000000..76cd500
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+void test(B local, B? local2, B? local3) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..54c75c7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.textual_outline_modelled.expect
@@ -0,0 +1,17 @@
+library test;
+
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+main() {}
+void test(B local, B? local2, B? local3) {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.weak.expect
new file mode 100644
index 0000000..e817caa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.weak.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test(self::B local, self::B? local2, self::B? local3) → void {
+  local = self::f<self::B>();
+  local2 == null ?{self::B?} local2 = self::f<self::B?>() : null;
+  local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  local = local.{self::B::-}(1){(core::int) → self::B};
+  local = local.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = local = self::f<self::B>();
+  self::B? v2 = let final self::B? #t1 = local3 in #t1 == null ?{self::B?} local3 = self::f<self::B?>() : #t1{self::B};
+  self::B v3 = local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = local = local.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t2 = local in let final self::B #t3 = local = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.weak.modular.expect
new file mode 100644
index 0000000..e817caa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test(self::B local, self::B? local2, self::B? local3) → void {
+  local = self::f<self::B>();
+  local2 == null ?{self::B?} local2 = self::f<self::B?>() : null;
+  local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  local = local.{self::B::-}(1){(core::int) → self::B};
+  local = local.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = local = self::f<self::B>();
+  self::B? v2 = let final self::B? #t1 = local3 in #t1 == null ?{self::B?} local3 = self::f<self::B?>() : #t1{self::B};
+  self::B v3 = local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = local = local.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t2 = local in let final self::B #t3 = local = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.weak.outline.expect
new file mode 100644
index 0000000..ee73ba5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.weak.outline.expect
@@ -0,0 +1,30 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method test(self::B local, self::B? local2, self::B? local3) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.weak.transformed.expect
new file mode 100644
index 0000000..e817caa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local2.dart.weak.transformed.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test(self::B local, self::B? local2, self::B? local3) → void {
+  local = self::f<self::B>();
+  local2 == null ?{self::B?} local2 = self::f<self::B?>() : null;
+  local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  local = local.{self::B::-}(1){(core::int) → self::B};
+  local = local.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = local = self::f<self::B>();
+  self::B? v2 = let final self::B? #t1 = local3 in #t1 == null ?{self::B?} local3 = self::f<self::B?>() : #t1{self::B};
+  self::B v3 = local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = local = local.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t2 = local in let final self::B #t3 = local = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart
index 282340c..0c7bdba 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,59 +9,59 @@
 num getNum() => 0;
 double getDouble() => 0.0;
 
-void test1(int t) {
-  var /*@ type=int* */ v1 = t = getInt();
+void test1(int t, int? t2) {
+  var /*@type=int*/ v1 = t = getInt();
 
-  var /*@ type=int* */ v4 = t  ??= getInt();
+  var /*@type=int*/ v4 = t2  ??= getInt();
 
-  var /*@ type=int* */ v7 = t /*@target=num.+*/ += getInt();
+  var /*@type=int*/ v7 = t /*@target=num.+*/ += getInt();
 
-  var /*@ type=int* */ v10 = /*@target=num.+*/ ++t;
+  var /*@type=int*/ v10 = /*@target=num.+*/ ++t;
 
-  var /*@ type=int* */ v11 = /*@ type=int* */ t
-      /*@ type=int* */ /*@target=num.+*/ ++;
+  var /*@type=int*/ v11 = /*@type=int*/ t
+      /*@type=int*/ /*@target=num.+*/ ++;
 }
 
-void test2(num t) {
-  var /*@ type=int* */ v1 = t = getInt();
+void test2(num t, num? t2, num? t3, num? t4) {
+  var /*@type=int*/ v1 = t = getInt();
 
-  var /*@ type=num* */ v2 = t = getNum();
+  var /*@type=num*/ v2 = t = getNum();
 
-  var /*@ type=double* */ v3 = t = getDouble();
+  var /*@type=double*/ v3 = t = getDouble();
 
-  var /*@ type=num* */ v4 = t  ??= getInt();
+  var /*@type=num*/ v4 = t2  ??= getInt();
 
-  var /*@ type=num* */ v5 = t  ??= getNum();
+  var /*@type=num*/ v5 = t3  ??= getNum();
 
-  var /*@ type=num* */ v6 = t  ??= getDouble();
+  var /*@type=num*/ v6 = t4  ??= getDouble();
 
-  var /*@ type=num* */ v7 = t /*@target=num.+*/ += getInt();
+  var /*@type=num*/ v7 = t /*@target=num.+*/ += getInt();
 
-  var /*@ type=num* */ v8 = t /*@target=num.+*/ += getNum();
+  var /*@type=num*/ v8 = t /*@target=num.+*/ += getNum();
 
-  var /*@ type=num* */ v9 = t /*@target=num.+*/ += getDouble();
+  var /*@type=double*/ v9 = t /*@target=num.+*/ += getDouble();
 
-  var /*@ type=num* */ v10 = /*@target=num.+*/ ++t;
+  var /*@type=num*/ v10 = /*@target=num.+*/ ++t;
 
-  var /*@ type=num* */ v11 = /*@ type=num* */ t
-      /*@ type=num* */ /*@target=num.+*/ ++;
+  var /*@type=num*/ v11 = /*@type=num*/ t
+      /*@type=num*/ /*@target=num.+*/ ++;
 }
 
-void test3(double t) {
-  var /*@ type=double* */ v3 = t = getDouble();
+void test3(double t, double? t2) {
+  var /*@type=double*/ v3 = t = getDouble();
 
-  var /*@ type=double* */ v6 = t  ??= getDouble();
+  var /*@type=double*/ v6 = t2  ??= getDouble();
 
-  var /*@ type=double* */ v7 = t /*@target=double.+*/ += getInt();
+  var /*@type=double*/ v7 = t /*@target=double.+*/ += getInt();
 
-  var /*@ type=double* */ v8 = t /*@target=double.+*/ += getNum();
+  var /*@type=double*/ v8 = t /*@target=double.+*/ += getNum();
 
-  var /*@ type=double* */ v9 = t /*@target=double.+*/ += getDouble();
+  var /*@type=double*/ v9 = t /*@target=double.+*/ += getDouble();
 
-  var /*@ type=double* */ v10 = /*@target=double.+*/ ++t;
+  var /*@type=double*/ v10 = /*@target=double.+*/ ++t;
 
-  var /*@ type=double* */ v11 = /*@ type=double* */ t
-      /*@ type=double* */ /*@target=double.+*/ ++;
+  var /*@type=double*/ v11 = /*@type=double*/ t
+      /*@type=double*/ /*@target=double.+*/ ++;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.textual_outline.expect
index adecc78..9202a99 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 int getInt() => 0;
 num getNum() => 0;
 double getDouble() => 0.0;
-void test1(int t) {}
-void test2(num t) {}
-void test3(double t) {}
+void test1(int t, int? t2) {}
+void test2(num t, num? t2, num? t3, num? t4) {}
+void test3(double t, double? t2) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.textual_outline_modelled.expect
index 0907a6c..d299937 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 double getDouble() => 0.0;
 int getInt() => 0;
 main() {}
 num getNum() => 0;
-void test1(int t) {}
-void test2(num t) {}
-void test3(double t) {}
+void test1(int t, int? t2) {}
+void test2(num t, num? t2, num? t3, num? t4) {}
+void test3(double t, double? t2) {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.expect
index eda9415..62846c1 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.expect
@@ -1,40 +1,40 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method getInt() → core::int*
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
-static method test1(core::int* t) → void {
-  core::int* v1 = t = self::getInt();
-  core::int* v4 = let final core::int* #t1 = t in #t1 == null ?{core::int*} t = self::getInt() : #t1;
-  core::int* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
-  core::int* v10 = t = t.{core::num::+}(1){(core::num*) →* core::int*};
-  core::int* v11 = let final core::int* #t2 = t in let final core::int* #t3 = t = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+static method test1(core::int t, core::int? t2) → void {
+  core::int v1 = t = self::getInt();
+  core::int v4 = let final core::int? #t1 = t2 in #t1 == null ?{core::int} t2 = self::getInt() : #t1{core::int};
+  core::int v7 = t = t.{core::num::+}(self::getInt()){(core::num) → core::int};
+  core::int v10 = t = t.{core::num::+}(1){(core::num) → core::int};
+  core::int v11 = let final core::int #t2 = t in let final core::int #t3 = t = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
 }
-static method test2(core::num* t) → void {
-  core::int* v1 = t = self::getInt();
-  core::num* v2 = t = self::getNum();
-  core::double* v3 = t = self::getDouble();
-  core::num* v4 = let final core::num* #t4 = t in #t4 == null ?{core::num*} t = self::getInt() : #t4;
-  core::num* v5 = let final core::num* #t5 = t in #t5 == null ?{core::num*} t = self::getNum() : #t5;
-  core::num* v6 = let final core::num* #t6 = t in #t6 == null ?{core::num*} t = self::getDouble() : #t6;
-  core::num* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
-  core::num* v8 = t = t.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
-  core::num* v9 = t = t.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
-  core::num* v10 = t = t.{core::num::+}(1){(core::num*) →* core::num*};
-  core::num* v11 = let final core::num* #t7 = t in let final core::num* #t8 = t = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+static method test2(core::num t, core::num? t2, core::num? t3, core::num? t4) → void {
+  core::int v1 = t = self::getInt();
+  core::num v2 = t = self::getNum();
+  core::double v3 = t = self::getDouble();
+  core::num v4 = let final core::num? #t4 = t2 in #t4 == null ?{core::num} t2 = self::getInt() : #t4{core::num};
+  core::num v5 = let final core::num? #t5 = t3 in #t5 == null ?{core::num} t3 = self::getNum() : #t5{core::num};
+  core::num v6 = let final core::num? #t6 = t4 in #t6 == null ?{core::num} t4 = self::getDouble() : #t6{core::num};
+  core::num v7 = t = t.{core::num::+}(self::getInt()){(core::num) → core::num};
+  core::num v8 = t = t.{core::num::+}(self::getNum()){(core::num) → core::num};
+  core::double v9 = t = t.{core::num::+}(self::getDouble()){(core::num) → core::double};
+  core::num v10 = t = t.{core::num::+}(1){(core::num) → core::num};
+  core::num v11 = let final core::num #t7 = t in let final core::num #t8 = t = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
 }
-static method test3(core::double* t) → void {
-  core::double* v3 = t = self::getDouble();
-  core::double* v6 = let final core::double* #t9 = t in #t9 == null ?{core::double*} t = self::getDouble() : #t9;
-  core::double* v7 = t = t.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
-  core::double* v8 = t = t.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
-  core::double* v9 = t = t.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
-  core::double* v10 = t = t.{core::double::+}(1){(core::num*) →* core::double*};
-  core::double* v11 = let final core::double* #t10 = t in let final core::double* #t11 = t = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+static method test3(core::double t, core::double? t2) → void {
+  core::double v3 = t = self::getDouble();
+  core::double v6 = let final core::double? #t9 = t2 in #t9 == null ?{core::double} t2 = self::getDouble() : #t9{core::double};
+  core::double v7 = t = t.{core::double::+}(self::getInt()){(core::num) → core::double};
+  core::double v8 = t = t.{core::double::+}(self::getNum()){(core::num) → core::double};
+  core::double v9 = t = t.{core::double::+}(self::getDouble()){(core::num) → core::double};
+  core::double v10 = t = t.{core::double::+}(1){(core::num) → core::double};
+  core::double v11 = let final core::double #t10 = t in let final core::double #t11 = t = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.modular.expect
index eda9415..62846c1 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.modular.expect
@@ -1,40 +1,40 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method getInt() → core::int*
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
-static method test1(core::int* t) → void {
-  core::int* v1 = t = self::getInt();
-  core::int* v4 = let final core::int* #t1 = t in #t1 == null ?{core::int*} t = self::getInt() : #t1;
-  core::int* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
-  core::int* v10 = t = t.{core::num::+}(1){(core::num*) →* core::int*};
-  core::int* v11 = let final core::int* #t2 = t in let final core::int* #t3 = t = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+static method test1(core::int t, core::int? t2) → void {
+  core::int v1 = t = self::getInt();
+  core::int v4 = let final core::int? #t1 = t2 in #t1 == null ?{core::int} t2 = self::getInt() : #t1{core::int};
+  core::int v7 = t = t.{core::num::+}(self::getInt()){(core::num) → core::int};
+  core::int v10 = t = t.{core::num::+}(1){(core::num) → core::int};
+  core::int v11 = let final core::int #t2 = t in let final core::int #t3 = t = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
 }
-static method test2(core::num* t) → void {
-  core::int* v1 = t = self::getInt();
-  core::num* v2 = t = self::getNum();
-  core::double* v3 = t = self::getDouble();
-  core::num* v4 = let final core::num* #t4 = t in #t4 == null ?{core::num*} t = self::getInt() : #t4;
-  core::num* v5 = let final core::num* #t5 = t in #t5 == null ?{core::num*} t = self::getNum() : #t5;
-  core::num* v6 = let final core::num* #t6 = t in #t6 == null ?{core::num*} t = self::getDouble() : #t6;
-  core::num* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
-  core::num* v8 = t = t.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
-  core::num* v9 = t = t.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
-  core::num* v10 = t = t.{core::num::+}(1){(core::num*) →* core::num*};
-  core::num* v11 = let final core::num* #t7 = t in let final core::num* #t8 = t = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+static method test2(core::num t, core::num? t2, core::num? t3, core::num? t4) → void {
+  core::int v1 = t = self::getInt();
+  core::num v2 = t = self::getNum();
+  core::double v3 = t = self::getDouble();
+  core::num v4 = let final core::num? #t4 = t2 in #t4 == null ?{core::num} t2 = self::getInt() : #t4{core::num};
+  core::num v5 = let final core::num? #t5 = t3 in #t5 == null ?{core::num} t3 = self::getNum() : #t5{core::num};
+  core::num v6 = let final core::num? #t6 = t4 in #t6 == null ?{core::num} t4 = self::getDouble() : #t6{core::num};
+  core::num v7 = t = t.{core::num::+}(self::getInt()){(core::num) → core::num};
+  core::num v8 = t = t.{core::num::+}(self::getNum()){(core::num) → core::num};
+  core::double v9 = t = t.{core::num::+}(self::getDouble()){(core::num) → core::double};
+  core::num v10 = t = t.{core::num::+}(1){(core::num) → core::num};
+  core::num v11 = let final core::num #t7 = t in let final core::num #t8 = t = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
 }
-static method test3(core::double* t) → void {
-  core::double* v3 = t = self::getDouble();
-  core::double* v6 = let final core::double* #t9 = t in #t9 == null ?{core::double*} t = self::getDouble() : #t9;
-  core::double* v7 = t = t.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
-  core::double* v8 = t = t.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
-  core::double* v9 = t = t.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
-  core::double* v10 = t = t.{core::double::+}(1){(core::num*) →* core::double*};
-  core::double* v11 = let final core::double* #t10 = t in let final core::double* #t11 = t = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+static method test3(core::double t, core::double? t2) → void {
+  core::double v3 = t = self::getDouble();
+  core::double v6 = let final core::double? #t9 = t2 in #t9 == null ?{core::double} t2 = self::getDouble() : #t9{core::double};
+  core::double v7 = t = t.{core::double::+}(self::getInt()){(core::num) → core::double};
+  core::double v8 = t = t.{core::double::+}(self::getNum()){(core::num) → core::double};
+  core::double v9 = t = t.{core::double::+}(self::getDouble()){(core::num) → core::double};
+  core::double v10 = t = t.{core::double::+}(1){(core::num) → core::double};
+  core::double v11 = let final core::double #t10 = t in let final core::double #t11 = t = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.outline.expect
index d53fd7b..332425c 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.outline.expect
@@ -1,18 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method getInt() → core::int*
+static method getInt() → core::int
   ;
-static method getNum() → core::num*
+static method getNum() → core::num
   ;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   ;
-static method test1(core::int* t) → void
+static method test1(core::int t, core::int? t2) → void
   ;
-static method test2(core::num* t) → void
+static method test2(core::num t, core::num? t2, core::num? t3, core::num? t4) → void
   ;
-static method test3(core::double* t) → void
+static method test3(core::double t, core::double? t2) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.transformed.expect
index eda9415..62846c1 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.transformed.expect
@@ -1,40 +1,40 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method getInt() → core::int*
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
-static method test1(core::int* t) → void {
-  core::int* v1 = t = self::getInt();
-  core::int* v4 = let final core::int* #t1 = t in #t1 == null ?{core::int*} t = self::getInt() : #t1;
-  core::int* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
-  core::int* v10 = t = t.{core::num::+}(1){(core::num*) →* core::int*};
-  core::int* v11 = let final core::int* #t2 = t in let final core::int* #t3 = t = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+static method test1(core::int t, core::int? t2) → void {
+  core::int v1 = t = self::getInt();
+  core::int v4 = let final core::int? #t1 = t2 in #t1 == null ?{core::int} t2 = self::getInt() : #t1{core::int};
+  core::int v7 = t = t.{core::num::+}(self::getInt()){(core::num) → core::int};
+  core::int v10 = t = t.{core::num::+}(1){(core::num) → core::int};
+  core::int v11 = let final core::int #t2 = t in let final core::int #t3 = t = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
 }
-static method test2(core::num* t) → void {
-  core::int* v1 = t = self::getInt();
-  core::num* v2 = t = self::getNum();
-  core::double* v3 = t = self::getDouble();
-  core::num* v4 = let final core::num* #t4 = t in #t4 == null ?{core::num*} t = self::getInt() : #t4;
-  core::num* v5 = let final core::num* #t5 = t in #t5 == null ?{core::num*} t = self::getNum() : #t5;
-  core::num* v6 = let final core::num* #t6 = t in #t6 == null ?{core::num*} t = self::getDouble() : #t6;
-  core::num* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
-  core::num* v8 = t = t.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
-  core::num* v9 = t = t.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
-  core::num* v10 = t = t.{core::num::+}(1){(core::num*) →* core::num*};
-  core::num* v11 = let final core::num* #t7 = t in let final core::num* #t8 = t = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+static method test2(core::num t, core::num? t2, core::num? t3, core::num? t4) → void {
+  core::int v1 = t = self::getInt();
+  core::num v2 = t = self::getNum();
+  core::double v3 = t = self::getDouble();
+  core::num v4 = let final core::num? #t4 = t2 in #t4 == null ?{core::num} t2 = self::getInt() : #t4{core::num};
+  core::num v5 = let final core::num? #t5 = t3 in #t5 == null ?{core::num} t3 = self::getNum() : #t5{core::num};
+  core::num v6 = let final core::num? #t6 = t4 in #t6 == null ?{core::num} t4 = self::getDouble() : #t6{core::num};
+  core::num v7 = t = t.{core::num::+}(self::getInt()){(core::num) → core::num};
+  core::num v8 = t = t.{core::num::+}(self::getNum()){(core::num) → core::num};
+  core::double v9 = t = t.{core::num::+}(self::getDouble()){(core::num) → core::double};
+  core::num v10 = t = t.{core::num::+}(1){(core::num) → core::num};
+  core::num v11 = let final core::num #t7 = t in let final core::num #t8 = t = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
 }
-static method test3(core::double* t) → void {
-  core::double* v3 = t = self::getDouble();
-  core::double* v6 = let final core::double* #t9 = t in #t9 == null ?{core::double*} t = self::getDouble() : #t9;
-  core::double* v7 = t = t.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
-  core::double* v8 = t = t.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
-  core::double* v9 = t = t.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
-  core::double* v10 = t = t.{core::double::+}(1){(core::num*) →* core::double*};
-  core::double* v11 = let final core::double* #t10 = t in let final core::double* #t11 = t = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+static method test3(core::double t, core::double? t2) → void {
+  core::double v3 = t = self::getDouble();
+  core::double v6 = let final core::double? #t9 = t2 in #t9 == null ?{core::double} t2 = self::getDouble() : #t9{core::double};
+  core::double v7 = t = t.{core::double::+}(self::getInt()){(core::num) → core::double};
+  core::double v8 = t = t.{core::double::+}(self::getNum()){(core::num) → core::double};
+  core::double v9 = t = t.{core::double::+}(self::getDouble()){(core::num) → core::double};
+  core::double v10 = t = t.{core::double::+}(1){(core::num) → core::double};
+  core::double v11 = let final core::double #t10 = t in let final core::double #t11 = t = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart
index 24d478e..658940d 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -23,36 +25,28 @@
 
   static void test(Test t) {
     t. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
-    /*@ type=Test* */ /*@target=Test.member*/ t. /*@target=Test.member*/ member
-         ??= /*@ typeArgs=B* */ f();
-    /*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
-    /*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
-    /*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    /*@ type=Test* */ /*@target=Test.member*/ t
+        . /*@target=Test.member*/ member ??= /*@ typeArgs=B* */ f();
+    /*@ type=Test* */ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    /*@ type=Test* */ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    /*@ type=Test* */ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
     /*@target=B.-*/ -- /*@ type=Test* */ t
         . /*@target=Test.member*/ /*@target=Test.member*/ member;
-    /*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.-*/ --;
+    /*@ type=Test* */ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.-*/ --;
     var /*@ type=B* */ v1 =
         t. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
-    var /*@ type=B* */ v2 =
-        /*@ type=Test* */ /*@target=Test.member*/ t
-                . /*@target=Test.member*/ member
-             ??= /*@ typeArgs=B* */ f();
-    var /*@ type=A* */ v3 =
-        /*@ type=Test* */ t
-                . /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.+*/ += /*@ typeArgs=C* */ f();
-    var /*@ type=B* */ v4 =
-        /*@ type=Test* */ t
-                . /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.**/ *= /*@ typeArgs=B* */ f();
-    var /*@ type=C* */ v5 =
-        /*@ type=Test* */ t
-                . /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    var /*@ type=B* */ v2 = /*@ type=Test* */ /*@target=Test.member*/ t
+        . /*@target=Test.member*/ member ??= /*@ typeArgs=B* */ f();
+    var /*@ type=A* */ v3 = /*@ type=Test* */ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    var /*@ type=B* */ v4 = /*@ type=Test* */ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    var /*@ type=C* */ v5 = /*@ type=Test* */ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
     var /*@ type=B* */ v6 = /*@target=B.-*/ -- /*@ type=Test* */ t
         . /*@target=Test.member*/ /*@target=Test.member*/ member;
     var /*@ type=B* */ v7 = /*@ type=Test* */ t
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart
new file mode 100644
index 0000000..b67eeb3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart
@@ -0,0 +1,59 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Test {
+  B member;
+  B? member2;
+
+  Test(this.member);
+
+  static void test(Test t) {
+    t. /*@target=Test.member*/ member = /*@typeArgs=B*/ f();
+    /*@type=Test*/ /*@target=Test.member2*/ t
+        . /*@target=Test.member2*/ member2 ??= /*@typeArgs=B?*/ f();
+    /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.+*/ += /*@typeArgs=C*/ f();
+    /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.**/ *= /*@typeArgs=B*/ f();
+    /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+    /*@target=B.-*/ -- /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member;
+    /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.-*/ --;
+    var /*@type=B*/ v1 =
+        t. /*@target=Test.member*/ member = /*@typeArgs=B*/ f();
+    var /*@type=B?*/ v2 = /*@type=Test*/ /*@target=Test.member2*/ t
+        . /*@target=Test.member2*/ member2 ??= /*@typeArgs=B?*/ f();
+    var /*@type=B*/ v3 = /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.+*/ += /*@typeArgs=C*/ f();
+    var /*@type=B*/ v4 = /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.**/ *= /*@typeArgs=B*/ f();
+    var /*@type=C*/ v5 = /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+    var /*@type=B*/ v6 = /*@target=B.-*/ -- /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member;
+    var /*@type=B*/ v7 = /*@type=Test*/ t
+        . /*@type=B*/ /*@target=Test.member*/ /*@target=Test.member*/
+        /*@type=B*/ member /*@target=B.-*/ --;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.textual_outline.expect
new file mode 100644
index 0000000..27a8ed0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.textual_outline.expect
@@ -0,0 +1,23 @@
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Test {
+  B member;
+  B? member2;
+  Test(this.member);
+  static void test(Test t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..85405b3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.textual_outline_modelled.expect
@@ -0,0 +1,23 @@
+library test;
+
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+class Test {
+  B? member2;
+  B member;
+  Test(this.member);
+  static void test(Test t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.weak.expect
new file mode 100644
index 0000000..ff4363d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.weak.expect
@@ -0,0 +1,53 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B member;
+  field self::B? member2 = null;
+  constructor •(self::B member) → self::Test
+    : self::Test::member = member, super core::Object::•()
+    ;
+  static method test(self::Test t) → void {
+    t.{self::Test::member} = self::f<self::B>();
+    let final self::Test #t1 = t in #t1.{self::Test::member2}{self::B?} == null ?{self::B?} #t1.{self::Test::member2} = self::f<self::B?>() : null;
+    let final self::Test #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    let final self::Test #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    let final self::Test #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    let final self::Test #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    let final self::Test #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = t.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::Test #t7 = t in let final self::B? #t8 = #t7.{self::Test::member2}{self::B?} in #t8 == null ?{self::B?} #t7.{self::Test::member2} = self::f<self::B?>() : #t8{self::B};
+    self::B v3 = let final self::Test #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = let final self::Test #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = let final self::Test #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = let final self::Test #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::Test #t13 = t in let final self::B #t14 = #t13.{self::Test::member}{self::B} in let final self::B #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1){(core::int) → self::B} in #t14;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.weak.modular.expect
new file mode 100644
index 0000000..ff4363d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B member;
+  field self::B? member2 = null;
+  constructor •(self::B member) → self::Test
+    : self::Test::member = member, super core::Object::•()
+    ;
+  static method test(self::Test t) → void {
+    t.{self::Test::member} = self::f<self::B>();
+    let final self::Test #t1 = t in #t1.{self::Test::member2}{self::B?} == null ?{self::B?} #t1.{self::Test::member2} = self::f<self::B?>() : null;
+    let final self::Test #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    let final self::Test #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    let final self::Test #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    let final self::Test #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    let final self::Test #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = t.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::Test #t7 = t in let final self::B? #t8 = #t7.{self::Test::member2}{self::B?} in #t8 == null ?{self::B?} #t7.{self::Test::member2} = self::f<self::B?>() : #t8{self::B};
+    self::B v3 = let final self::Test #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = let final self::Test #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = let final self::Test #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = let final self::Test #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::Test #t13 = t in let final self::B #t14 = #t13.{self::Test::member}{self::B} in let final self::B #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1){(core::int) → self::B} in #t14;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.weak.outline.expect
new file mode 100644
index 0000000..a6db03f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+class Test extends core::Object {
+  field self::B member;
+  field self::B? member2;
+  constructor •(self::B member) → self::Test
+    ;
+  static method test(self::Test t) → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.weak.transformed.expect
new file mode 100644
index 0000000..ff4363d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full2.dart.weak.transformed.expect
@@ -0,0 +1,53 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B member;
+  field self::B? member2 = null;
+  constructor •(self::B member) → self::Test
+    : self::Test::member = member, super core::Object::•()
+    ;
+  static method test(self::Test t) → void {
+    t.{self::Test::member} = self::f<self::B>();
+    let final self::Test #t1 = t in #t1.{self::Test::member2}{self::B?} == null ?{self::B?} #t1.{self::Test::member2} = self::f<self::B?>() : null;
+    let final self::Test #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    let final self::Test #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    let final self::Test #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    let final self::Test #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    let final self::Test #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = t.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::Test #t7 = t in let final self::B? #t8 = #t7.{self::Test::member2}{self::B?} in #t8 == null ?{self::B?} #t7.{self::Test::member2} = self::f<self::B?>() : #t8{self::B};
+    self::B v3 = let final self::Test #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = let final self::Test #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = let final self::Test #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = let final self::Test #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::Test #t13 = t in let final self::B #t14 = #t13.{self::Test::member}{self::B} in let final self::B #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1){(core::int) → self::B} in #t14;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart
index f810644..06ee1f8 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart
@@ -1,14 +1,16 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
+  B operator +(C v) => null;
   B operator -(int i) => null;
   B operator *(B v) => null;
   C operator &(A v) => null;
@@ -21,65 +23,45 @@
 class Test {
   B member;
 
+  Test(this.member);
+
   static void test(Test t) {
-    /*@ type=Test* */  t?. /*@target=Test.member*/
+    /*@ type=Test* */ t?. /*@target=Test.member*/
         member = /*@ typeArgs=B* */ f();
 
-     t
-            ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-         ??= /*@ typeArgs=B* */ f();
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member ??= /*@ typeArgs=B* */ f();
 
-     t
-            ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
-     t
-            ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
-     t
-            ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
-    /*@target=B.-*/ --  t
+    /*@target=B.-*/ --t
         ?. /*@target=Test.member*/ /*@target=Test.member*/ member;
 
-     t
-            ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.-*/ --;
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.-*/ --;
 
-    var /*@ type=B* */ v1 =
-        /*@ type=Test* */  t?. /*@target=Test.member*/
-            member = /*@ typeArgs=B* */ f();
+    var /*@ type=B* */ v1 = /*@ type=Test* */ t?. /*@target=Test.member*/
+        member = /*@ typeArgs=B* */ f();
 
-    var /*@ type=B* */ v2 =
-         t
-                ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-             ??= /*@ typeArgs=B* */ f();
+    var /*@ type=B* */ v2 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member ??= /*@ typeArgs=B* */ f();
 
-    var /*@ type=A* */ v3 =
-         t
-                ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    var /*@type=B**/ v3 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
-    var /*@ type=B* */ v4 =
-         t
-                ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    var /*@ type=B* */ v4 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
-    var /*@ type=C* */ v5 =
-         t
-                ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    var /*@ type=C* */ v5 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
-    var /*@ type=B* */ v6 =
-        /*@target=B.-*/ --  t
-            ?. /*@target=Test.member*/ /*@target=Test.member*/ member;
+    var /*@ type=B* */ v6 = /*@target=B.-*/ --t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member;
 
-    var /*@ type=B* */ v7 =
-         t
-            ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.-*/ --;
+    var /*@ type=B* */ v7 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.-*/ --;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.textual_outline.expect
index 0330c3e..9775a41 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.textual_outline.expect
@@ -4,7 +4,7 @@
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
+  B operator +(C v) => null;
   B operator -(int i) => null;
   B operator *(B v) => null;
   C operator &(A v) => null;
@@ -16,6 +16,7 @@
 
 class Test {
   B member;
+  Test(this.member);
   static void test(Test t) {}
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.textual_outline_modelled.expect
index 1583cfc..76958b1 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.textual_outline_modelled.expect
@@ -6,8 +6,8 @@
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
   B operator *(B v) => null;
+  B operator +(C v) => null;
   B operator -(int i) => null;
   C operator &(A v) => null;
 }
@@ -16,6 +16,7 @@
 
 class Test {
   B member;
+  Test(this.member);
   static void test(Test t) {}
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.expect
index 681f9aa..c367692 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::B*
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
+  operator +(self::C* v) → self::B*
     return null;
   operator -(core::int* i) → self::B*
     return null;
@@ -36,21 +36,21 @@
     ;
 }
 class Test extends core::Object {
-  field self::B* member = null;
-  synthetic constructor •() → self::Test*
-    : super core::Object::•()
+  field self::B* member;
+  constructor •(self::B* member) → self::Test*
+    : self::Test::member = member, super core::Object::•()
     ;
   static method test(self::Test* t) → void {
     let final self::Test* #t1 = t in #t1 == null ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
     let final self::Test* #t2 = t in #t2 == null ?{self::B*} null : #t2.{self::Test::member}{self::B*} == null ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
-    let final self::Test* #t3 = t in #t3 == null ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t3 = t in #t3 == null ?{self::B*} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::B*};
     let final self::Test* #t4 = t in #t4 == null ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
     let final self::Test* #t5 = t in #t5 == null ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
     let final self::Test* #t6 = t in #t6 == null ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
     let final self::Test* #t9 = t in #t9 == null ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = let final self::Test* #t10 = t in #t10 == null ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
     self::B* v2 = let final self::Test* #t11 = t in #t11 == null ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member}{self::B*} in #t12 == null ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
-    self::A* v3 = let final self::Test* #t13 = t in #t13 == null ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B* v3 = let final self::Test* #t13 = t in #t13 == null ?{self::B*} null : let final self::B* #t14 = #t13.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::B*} in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
     self::B* v4 = let final self::Test* #t16 = t in #t16 == null ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
     self::C* v5 = let final self::Test* #t19 = t in #t19 == null ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
     self::B* v6 = let final self::Test* #t22 = t in #t22 == null ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.modular.expect
index 681f9aa..c367692 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.modular.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::B*
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
+  operator +(self::C* v) → self::B*
     return null;
   operator -(core::int* i) → self::B*
     return null;
@@ -36,21 +36,21 @@
     ;
 }
 class Test extends core::Object {
-  field self::B* member = null;
-  synthetic constructor •() → self::Test*
-    : super core::Object::•()
+  field self::B* member;
+  constructor •(self::B* member) → self::Test*
+    : self::Test::member = member, super core::Object::•()
     ;
   static method test(self::Test* t) → void {
     let final self::Test* #t1 = t in #t1 == null ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
     let final self::Test* #t2 = t in #t2 == null ?{self::B*} null : #t2.{self::Test::member}{self::B*} == null ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
-    let final self::Test* #t3 = t in #t3 == null ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t3 = t in #t3 == null ?{self::B*} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::B*};
     let final self::Test* #t4 = t in #t4 == null ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
     let final self::Test* #t5 = t in #t5 == null ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
     let final self::Test* #t6 = t in #t6 == null ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
     let final self::Test* #t9 = t in #t9 == null ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = let final self::Test* #t10 = t in #t10 == null ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
     self::B* v2 = let final self::Test* #t11 = t in #t11 == null ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member}{self::B*} in #t12 == null ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
-    self::A* v3 = let final self::Test* #t13 = t in #t13 == null ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B* v3 = let final self::Test* #t13 = t in #t13 == null ?{self::B*} null : let final self::B* #t14 = #t13.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::B*} in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
     self::B* v4 = let final self::Test* #t16 = t in #t16 == null ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
     self::C* v5 = let final self::Test* #t19 = t in #t19 == null ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
     self::B* v6 = let final self::Test* #t22 = t in #t22 == null ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.outline.expect
index 7206086..a1a95ac 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.outline.expect
@@ -19,7 +19,7 @@
 class B extends self::A {
   synthetic constructor •() → self::B*
     ;
-  operator +(self::C* v) → self::A*
+  operator +(self::C* v) → self::B*
     ;
   operator -(core::int* i) → self::B*
     ;
@@ -34,7 +34,7 @@
 }
 class Test extends core::Object {
   field self::B* member;
-  synthetic constructor •() → self::Test*
+  constructor •(self::B* member) → self::Test*
     ;
   static method test(self::Test* t) → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.transformed.expect
index 681f9aa..c367692 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::B*
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
+  operator +(self::C* v) → self::B*
     return null;
   operator -(core::int* i) → self::B*
     return null;
@@ -36,21 +36,21 @@
     ;
 }
 class Test extends core::Object {
-  field self::B* member = null;
-  synthetic constructor •() → self::Test*
-    : super core::Object::•()
+  field self::B* member;
+  constructor •(self::B* member) → self::Test*
+    : self::Test::member = member, super core::Object::•()
     ;
   static method test(self::Test* t) → void {
     let final self::Test* #t1 = t in #t1 == null ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
     let final self::Test* #t2 = t in #t2 == null ?{self::B*} null : #t2.{self::Test::member}{self::B*} == null ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
-    let final self::Test* #t3 = t in #t3 == null ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t3 = t in #t3 == null ?{self::B*} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::B*};
     let final self::Test* #t4 = t in #t4 == null ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
     let final self::Test* #t5 = t in #t5 == null ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
     let final self::Test* #t6 = t in #t6 == null ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
     let final self::Test* #t9 = t in #t9 == null ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = let final self::Test* #t10 = t in #t10 == null ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
     self::B* v2 = let final self::Test* #t11 = t in #t11 == null ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member}{self::B*} in #t12 == null ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
-    self::A* v3 = let final self::Test* #t13 = t in #t13 == null ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B* v3 = let final self::Test* #t13 = t in #t13 == null ?{self::B*} null : let final self::B* #t14 = #t13.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::B*} in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
     self::B* v4 = let final self::Test* #t16 = t in #t16 == null ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
     self::C* v5 = let final self::Test* #t19 = t in #t19 == null ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
     self::B* v6 = let final self::Test* #t22 = t in #t22 == null ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart
new file mode 100644
index 0000000..3062276
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart
@@ -0,0 +1,65 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Test {
+  B member;
+
+  static void test(Test? t) {
+    /*@type=Test?*/ /*@promotedType=Test*/ t?. /*@target=Test.member*/
+        member = /*@typeArgs=B*/ f();
+
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member ??= /*@typeArgs=B*/ f();
+
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    /*@target=B.-*/ --t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member;
+
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.-*/ --;
+
+    var /*@type=B?*/ v1 =
+        /*@type=Test?*/ /*@promotedType=Test*/ t?. /*@target=Test.member*/
+            member = /*@typeArgs=B*/ f();
+
+    var /*@type=B?*/ v2 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member ??= /*@typeArgs=B*/ f();
+
+    var /*@type=B?*/ v3 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    var /*@type=B?*/ v4 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    var /*@type=C?*/ v5 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    var /*@type=B?*/ v6 = /*@target=B.-*/ --t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member;
+
+    var /*@type=B?*/ v7 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.-*/ --;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.textual_outline.expect
new file mode 100644
index 0000000..29d6a51
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.textual_outline.expect
@@ -0,0 +1,21 @@
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Test {
+  B member;
+  static void test(Test? t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3990a80
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.textual_outline_modelled.expect
@@ -0,0 +1,21 @@
+library test;
+
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+class Test {
+  B member;
+  static void test(Test? t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.weak.expect
new file mode 100644
index 0000000..86c15c5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.weak.expect
@@ -0,0 +1,60 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart:22:5: Error: Field 'member' should be initialized because its type 'B' doesn't allow null.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart'.
+//   B member;
+//     ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B member = null;
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  static method test(self::Test? t) → void {
+    let final self::Test? #t1 = t in #t1 == null ?{self::B?} null : #t1{self::Test}.{self::Test::member} = self::f<self::B>();
+    let final self::Test? #t2 = t in #t2 == null ?{self::B?} null : #t2.{self::Test::member}{self::B} == null ?{self::B} #t2.{self::Test::member} = self::f<self::B>() : null;
+    let final self::Test? #t3 = t in #t3 == null ?{self::B?} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    let final self::Test? #t4 = t in #t4 == null ?{self::B?} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    let final self::Test? #t5 = t in #t5 == null ?{self::C?} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    let final self::Test? #t6 = t in #t6 == null ?{self::B?} null : let final self::B #t7 = #t6.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
+    let final self::Test? #t9 = t in #t9 == null ?{self::B?} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B? v1 = let final self::Test? #t10 = t in #t10 == null ?{self::B?} null : #t10{self::Test}.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::Test? #t11 = t in #t11 == null ?{self::B?} null : let final self::B #t12 = #t11.{self::Test::member}{self::B} in #t12 == null ?{self::B} #t11.{self::Test::member} = self::f<self::B>() : #t12;
+    self::B? v3 = let final self::Test? #t13 = t in #t13 == null ?{self::B?} null : let final self::B #t14 = #t13.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B? v4 = let final self::Test? #t16 = t in #t16 == null ?{self::B?} null : let final self::B #t17 = #t16.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
+    self::C? v5 = let final self::Test? #t19 = t in #t19 == null ?{self::C?} null : let final self::C #t20 = #t19.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
+    self::B? v6 = let final self::Test? #t22 = t in #t22 == null ?{self::B?} null : let final self::B #t23 = #t22.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
+    self::B? v7 = let final self::Test? #t25 = t in #t25 == null ?{self::B?} null : let final self::B #t26 = #t25.{self::Test::member}{self::B} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1){(core::int) → self::B} in #t26;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.weak.modular.expect
new file mode 100644
index 0000000..86c15c5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart:22:5: Error: Field 'member' should be initialized because its type 'B' doesn't allow null.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart'.
+//   B member;
+//     ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B member = null;
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  static method test(self::Test? t) → void {
+    let final self::Test? #t1 = t in #t1 == null ?{self::B?} null : #t1{self::Test}.{self::Test::member} = self::f<self::B>();
+    let final self::Test? #t2 = t in #t2 == null ?{self::B?} null : #t2.{self::Test::member}{self::B} == null ?{self::B} #t2.{self::Test::member} = self::f<self::B>() : null;
+    let final self::Test? #t3 = t in #t3 == null ?{self::B?} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    let final self::Test? #t4 = t in #t4 == null ?{self::B?} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    let final self::Test? #t5 = t in #t5 == null ?{self::C?} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    let final self::Test? #t6 = t in #t6 == null ?{self::B?} null : let final self::B #t7 = #t6.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
+    let final self::Test? #t9 = t in #t9 == null ?{self::B?} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B? v1 = let final self::Test? #t10 = t in #t10 == null ?{self::B?} null : #t10{self::Test}.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::Test? #t11 = t in #t11 == null ?{self::B?} null : let final self::B #t12 = #t11.{self::Test::member}{self::B} in #t12 == null ?{self::B} #t11.{self::Test::member} = self::f<self::B>() : #t12;
+    self::B? v3 = let final self::Test? #t13 = t in #t13 == null ?{self::B?} null : let final self::B #t14 = #t13.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B? v4 = let final self::Test? #t16 = t in #t16 == null ?{self::B?} null : let final self::B #t17 = #t16.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
+    self::C? v5 = let final self::Test? #t19 = t in #t19 == null ?{self::C?} null : let final self::C #t20 = #t19.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
+    self::B? v6 = let final self::Test? #t22 = t in #t22 == null ?{self::B?} null : let final self::B #t23 = #t22.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
+    self::B? v7 = let final self::Test? #t25 = t in #t25 == null ?{self::B?} null : let final self::B #t26 = #t25.{self::Test::member}{self::B} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1){(core::int) → self::B} in #t26;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.weak.outline.expect
new file mode 100644
index 0000000..f666f02
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.weak.outline.expect
@@ -0,0 +1,35 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+class Test extends core::Object {
+  field self::B member;
+  synthetic constructor •() → self::Test
+    ;
+  static method test(self::Test? t) → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.weak.transformed.expect
new file mode 100644
index 0000000..86c15c5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart.weak.transformed.expect
@@ -0,0 +1,60 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart:22:5: Error: Field 'member' should be initialized because its type 'B' doesn't allow null.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_assign_to_property_null_aware2.dart'.
+//   B member;
+//     ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B member = null;
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  static method test(self::Test? t) → void {
+    let final self::Test? #t1 = t in #t1 == null ?{self::B?} null : #t1{self::Test}.{self::Test::member} = self::f<self::B>();
+    let final self::Test? #t2 = t in #t2 == null ?{self::B?} null : #t2.{self::Test::member}{self::B} == null ?{self::B} #t2.{self::Test::member} = self::f<self::B>() : null;
+    let final self::Test? #t3 = t in #t3 == null ?{self::B?} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    let final self::Test? #t4 = t in #t4 == null ?{self::B?} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    let final self::Test? #t5 = t in #t5 == null ?{self::C?} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    let final self::Test? #t6 = t in #t6 == null ?{self::B?} null : let final self::B #t7 = #t6.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
+    let final self::Test? #t9 = t in #t9 == null ?{self::B?} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B? v1 = let final self::Test? #t10 = t in #t10 == null ?{self::B?} null : #t10{self::Test}.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::Test? #t11 = t in #t11 == null ?{self::B?} null : let final self::B #t12 = #t11.{self::Test::member}{self::B} in #t12 == null ?{self::B} #t11.{self::Test::member} = self::f<self::B>() : #t12;
+    self::B? v3 = let final self::Test? #t13 = t in #t13 == null ?{self::B?} null : let final self::B #t14 = #t13.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B? v4 = let final self::Test? #t16 = t in #t16 == null ?{self::B?} null : let final self::B #t17 = #t16.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
+    self::C? v5 = let final self::Test? #t19 = t in #t19 == null ?{self::C?} null : let final self::C #t20 = #t19.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
+    self::B? v6 = let final self::Test? #t22 = t in #t22 == null ?{self::B?} null : let final self::B #t23 = #t22.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
+    self::B? v7 = let final self::Test? #t25 = t in #t25 == null ?{self::B?} null : let final self::B #t26 = #t25.{self::Test::member}{self::B} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1){(core::int) → self::B} in #t26;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart
index 82e2b7c..83cd8e5 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,26 +10,27 @@
 double getDouble() => 0.0;
 
 class Test1 {
-  int prop;
+  int prop = 1;
+  int? prop2;
 
-  static void test(Test1 t) {
-    var /*@ type=int* */ v1 = /*@ type=Test1* */  t
+  static void test(Test1? t) {
+    var /*@type=int?*/ v1 = /*@type=Test1?*/  /*@promotedType=Test1*/t
         ?. /*@target=Test1.prop*/ prop = getInt();
 
-    var /*@ type=int* */ v4 =
+    var /*@type=int?*/ v4 =
          t
-                ?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
+                ?. /*@target=Test1.prop2*/ /*@target=Test1.prop2*/ prop2
              ??= getInt();
 
-    var /*@ type=int* */ v7 =
+    var /*@type=int?*/ v7 =
          t
                 ?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
             /*@target=num.+*/ += getInt();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++  t
+    var /*@type=int?*/ v10 = /*@target=num.+*/ ++  t
         ?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop;
 
-    var /*@ type=int* */ v11 =
+    var /*@type=int?*/ v11 =
          t
             ?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
         /*@target=num.+*/ ++;
@@ -37,51 +38,52 @@
 }
 
 class Test2 {
-  num prop;
+  num prop = 0;
+  num? prop2;
 
-  static void test(Test2 t) {
-    var /*@ type=int* */ v1 = /*@ type=Test2* */  t
+  static void test(Test2? t) {
+    var /*@type=int?*/ v1 = /*@type=Test2?*/  /*@promotedType=Test2*/t
         ?. /*@target=Test2.prop*/ prop = getInt();
 
-    var /*@ type=num* */ v2 = /*@ type=Test2* */  t
+    var /*@type=num?*/ v2 = /*@type=Test2?*/  /*@promotedType=Test2*/t
         ?. /*@target=Test2.prop*/ prop = getNum();
 
-    var /*@ type=double* */ v3 = /*@ type=Test2* */  t
+    var /*@type=double?*/ v3 = /*@type=Test2?*/  /*@promotedType=Test2*/t
         ?. /*@target=Test2.prop*/ prop = getDouble();
 
-    var /*@ type=num* */ v4 =
+    var /*@type=num?*/ v4 =
          t
-                ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
+                ?. /*@target=Test2.prop2*/ /*@target=Test2.prop2*/ prop2
              ??= getInt();
 
-    var /*@ type=num* */ v5 =
+    var /*@type=num?*/ v5 =
          t
                 ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
              ??= getNum();
 
-    var /*@ type=num* */ v6 =  t
+    var /*@type=num?*/ v6 =  t
             ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
          ??= getDouble();
 
-    var /*@ type=num* */ v7 =
+    var /*@type=num?*/ v7 =
          t
                 ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
             /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 =
+    var /*@type=num?*/ v8 =
          t
                 ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
             /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v9 =
+    var /*@type=double?*/ v9 =
          t
                 ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
             /*@target=num.+*/ += getDouble();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++  t
+    var /*@type=num?*/ v10 = /*@target=num.+*/ ++  t
         ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop;
 
-    var /*@ type=num* */ v11 =
+    var /*@type=num?*/ v11 =
          t
             ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
         /*@target=num.+*/ ++;
@@ -89,38 +91,39 @@
 }
 
 class Test3 {
-  double prop;
+  double prop = 0;
+  double? prop2;
 
-  static void test3(Test3 t) {
-    var /*@ type=double* */ v3 =
-        /*@ type=Test3* */  t
+  static void test3(Test3? t) {
+    var /*@type=double?*/ v3 =
+        /*@type=Test3?*/  /*@promotedType=Test3*/t
             ?. /*@target=Test3.prop*/ prop = getDouble();
 
-    var /*@ type=double* */ v6 =
+    var /*@type=double?*/ v6 =
          t?.
-                /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
+                /*@target=Test3.prop2*/ /*@target=Test3.prop2*/ prop2
              ??= getDouble();
 
-    var /*@ type=double* */ v7 =
+    var /*@type=double?*/ v7 =
          t
                 ?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
             /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 =
+    var /*@type=double?*/ v8 =
          t
                 ?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
             /*@target=double.+*/ += getNum();
 
-    var /*@ type=double* */ v9 =
+    var /*@type=double?*/ v9 =
          t?.
                 /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
             /*@target=double.+*/ += getDouble();
 
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++
+    var /*@type=double?*/ v10 = /*@target=double.+*/ ++
          t
             ?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop;
 
-    var /*@ type=double* */ v11 =
+    var /*@type=double?*/ v11 =
          t
             ?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
         /*@target=double.+*/ ++;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.textual_outline.expect
index d232d96..d54238d 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 int getInt() => 0;
@@ -6,18 +5,21 @@
 double getDouble() => 0.0;
 
 class Test1 {
-  int prop;
-  static void test(Test1 t) {}
+  int prop = 1;
+  int? prop2;
+  static void test(Test1? t) {}
 }
 
 class Test2 {
-  num prop;
-  static void test(Test2 t) {}
+  num prop = 0;
+  num? prop2;
+  static void test(Test2? t) {}
 }
 
 class Test3 {
-  double prop;
-  static void test3(Test3 t) {}
+  double prop = 0;
+  double? prop2;
+  static void test3(Test3? t) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.textual_outline_modelled.expect
index 5ff5dff..00e72ab 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.textual_outline_modelled.expect
@@ -1,19 +1,21 @@
-// @dart = 2.9
 library test;
 
 class Test1 {
-  int prop;
-  static void test(Test1 t) {}
+  int? prop2;
+  int prop = 1;
+  static void test(Test1? t) {}
 }
 
 class Test2 {
-  num prop;
-  static void test(Test2 t) {}
+  num? prop2;
+  num prop = 0;
+  static void test(Test2? t) {}
 }
 
 class Test3 {
-  double prop;
-  static void test3(Test3 t) {}
+  double? prop2;
+  double prop = 0;
+  static void test3(Test3? t) {}
 }
 
 double getDouble() => 0.0;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.expect
index defcb5a..e4986a3 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.expect
@@ -1,88 +1,61 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Test1 extends core::Object {
-  field core::int* prop = null;
-  synthetic constructor •() → self::Test1*
+  field core::int prop = 1;
+  field core::int? prop2 = null;
+  synthetic constructor •() → self::Test1
     : super core::Object::•()
     ;
-  static method test(self::Test1* t) → void {
-    core::int* v1 = let final self::Test1* #t1 = t in #t1 == null ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
-    core::int* v4 = let final self::Test1* #t2 = t in #t2 == null ?{core::int*} null : let final core::int* #t3 = #t2.{self::Test1::prop}{core::int*} in #t3 == null ?{core::int*} #t2.{self::Test1::prop} = self::getInt() : #t3;
-    core::int* v7 = let final self::Test1* #t4 = t in #t4 == null ?{core::int*} null : let final core::int* #t5 = #t4.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
-    core::int* v10 = let final self::Test1* #t7 = t in #t7 == null ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
-    core::int* v11 = let final self::Test1* #t10 = t in #t10 == null ?{core::int*} null : let final core::int* #t11 = #t10.{self::Test1::prop}{core::int*} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1){(core::num*) →* core::int*} in #t11;
+  static method test(self::Test1? t) → void {
+    core::int? v1 = let final self::Test1? #t1 = t in #t1 == null ?{core::int?} null : #t1{self::Test1}.{self::Test1::prop} = self::getInt();
+    core::int? v4 = let final self::Test1? #t2 = t in #t2 == null ?{core::int?} null : let final core::int? #t3 = #t2.{self::Test1::prop2}{core::int?} in #t3 == null ?{core::int} #t2.{self::Test1::prop2} = self::getInt() : #t3{core::int};
+    core::int? v7 = let final self::Test1? #t4 = t in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Test1::prop}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
+    core::int? v10 = let final self::Test1? #t7 = t in #t7 == null ?{core::int?} null : let final core::int #t8 = #t7.{self::Test1::prop}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
+    core::int? v11 = let final self::Test1? #t10 = t in #t10 == null ?{core::int?} null : let final core::int #t11 = #t10.{self::Test1::prop}{core::int} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1){(core::num) → core::int} in #t11;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test2 extends core::Object {
-  field core::num* prop = null;
-  synthetic constructor •() → self::Test2*
+  field core::num prop = 0;
+  field core::num? prop2 = null;
+  synthetic constructor •() → self::Test2
     : super core::Object::•()
     ;
-  static method test(self::Test2* t) → void {
-    core::int* v1 = let final self::Test2* #t13 = t in #t13 == null ?{core::int*} null : #t13.{self::Test2::prop} = self::getInt();
-    core::num* v2 = let final self::Test2* #t14 = t in #t14 == null ?{core::num*} null : #t14.{self::Test2::prop} = self::getNum();
-    core::double* v3 = let final self::Test2* #t15 = t in #t15 == null ?{core::double*} null : #t15.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t16 = t in #t16 == null ?{core::num*} null : let final core::num* #t17 = #t16.{self::Test2::prop}{core::num*} in #t17 == null ?{core::num*} #t16.{self::Test2::prop} = self::getInt() : #t17;
-    core::num* v5 = let final self::Test2* #t18 = t in #t18 == null ?{core::num*} null : let final core::num* #t19 = #t18.{self::Test2::prop}{core::num*} in #t19 == null ?{core::num*} #t18.{self::Test2::prop} = self::getNum() : #t19;
-    core::num* v6 = let final self::Test2* #t20 = t in #t20 == null ?{core::num*} null : let final core::num* #t21 = #t20.{self::Test2::prop}{core::num*} in #t21 == null ?{core::num*} #t20.{self::Test2::prop} = self::getDouble() : #t21;
-    core::num* v7 = let final self::Test2* #t22 = t in #t22 == null ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
-    core::num* v8 = let final self::Test2* #t25 = t in #t25 == null ?{core::num*} null : let final core::num* #t26 = #t25.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
-    core::num* v9 = let final self::Test2* #t28 = t in #t28 == null ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
-    core::num* v10 = let final self::Test2* #t31 = t in #t31 == null ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
-    core::num* v11 = let final self::Test2* #t34 = t in #t34 == null ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop}{core::num*} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1){(core::num*) →* core::num*} in #t35;
+  static method test(self::Test2? t) → void {
+    core::int? v1 = let final self::Test2? #t13 = t in #t13 == null ?{core::int?} null : #t13{self::Test2}.{self::Test2::prop} = self::getInt();
+    core::num? v2 = let final self::Test2? #t14 = t in #t14 == null ?{core::num?} null : #t14{self::Test2}.{self::Test2::prop} = self::getNum();
+    core::double? v3 = let final self::Test2? #t15 = t in #t15 == null ?{core::double?} null : #t15{self::Test2}.{self::Test2::prop} = self::getDouble();
+    core::num? v4 = let final self::Test2? #t16 = t in #t16 == null ?{core::num?} null : let final core::num? #t17 = #t16.{self::Test2::prop2}{core::num?} in #t17 == null ?{core::num} #t16.{self::Test2::prop2} = self::getInt() : #t17{core::num};
+    core::num? v5 = let final self::Test2? #t18 = t in #t18 == null ?{core::num?} null : let final core::num #t19 = #t18.{self::Test2::prop}{core::num} in #t19 == null ?{core::num} #t18.{self::Test2::prop} = self::getNum() : #t19;
+    core::num? v6 = let final self::Test2? #t20 = t in #t20 == null ?{core::num?} null : let final core::num #t21 = #t20.{self::Test2::prop}{core::num} in #t21 == null ?{core::num} #t20.{self::Test2::prop} = self::getDouble() : #t21;
+    core::num? v7 = let final self::Test2? #t22 = t in #t22 == null ?{core::num?} null : let final core::num #t23 = #t22.{self::Test2::prop}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
+    core::num? v8 = let final self::Test2? #t25 = t in #t25 == null ?{core::num?} null : let final core::num #t26 = #t25.{self::Test2::prop}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
+    core::double? v9 = let final self::Test2? #t28 = t in #t28 == null ?{core::double?} null : let final core::double #t29 = #t28.{self::Test2::prop}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
+    core::num? v10 = let final self::Test2? #t31 = t in #t31 == null ?{core::num?} null : let final core::num #t32 = #t31.{self::Test2::prop}{core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
+    core::num? v11 = let final self::Test2? #t34 = t in #t34 == null ?{core::num?} null : let final core::num #t35 = #t34.{self::Test2::prop}{core::num} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1){(core::num) → core::num} in #t35;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test3 extends core::Object {
-  field core::double* prop = null;
-  synthetic constructor •() → self::Test3*
+  field core::double prop = 0.0;
+  field core::double? prop2 = null;
+  synthetic constructor •() → self::Test3
     : super core::Object::•()
     ;
-  static method test3(self::Test3* t) → void {
-    core::double* v3 = let final self::Test3* #t37 = t in #t37 == null ?{core::double*} null : #t37.{self::Test3::prop} = self::getDouble();
-    core::double* v6 = let final self::Test3* #t38 = t in #t38 == null ?{core::double*} null : let final core::double* #t39 = #t38.{self::Test3::prop}{core::double*} in #t39 == null ?{core::double*} #t38.{self::Test3::prop} = self::getDouble() : #t39;
-    core::double* v7 = let final self::Test3* #t40 = t in #t40 == null ?{core::double*} null : let final core::double* #t41 = #t40.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
-    core::double* v8 = let final self::Test3* #t43 = t in #t43 == null ?{core::double*} null : let final core::double* #t44 = #t43.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
-    core::double* v9 = let final self::Test3* #t46 = t in #t46 == null ?{core::double*} null : let final core::double* #t47 = #t46.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
-    core::double* v10 = let final self::Test3* #t49 = t in #t49 == null ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
-    core::double* v11 = let final self::Test3* #t52 = t in #t52 == null ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop}{core::double*} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1){(core::num*) →* core::double*} in #t53;
+  static method test3(self::Test3? t) → void {
+    core::double? v3 = let final self::Test3? #t37 = t in #t37 == null ?{core::double?} null : #t37{self::Test3}.{self::Test3::prop} = self::getDouble();
+    core::double? v6 = let final self::Test3? #t38 = t in #t38 == null ?{core::double?} null : let final core::double? #t39 = #t38.{self::Test3::prop2}{core::double?} in #t39 == null ?{core::double} #t38.{self::Test3::prop2} = self::getDouble() : #t39{core::double};
+    core::double? v7 = let final self::Test3? #t40 = t in #t40 == null ?{core::double?} null : let final core::double #t41 = #t40.{self::Test3::prop}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
+    core::double? v8 = let final self::Test3? #t43 = t in #t43 == null ?{core::double?} null : let final core::double #t44 = #t43.{self::Test3::prop}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
+    core::double? v9 = let final self::Test3? #t46 = t in #t46 == null ?{core::double?} null : let final core::double #t47 = #t46.{self::Test3::prop}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
+    core::double? v10 = let final self::Test3? #t49 = t in #t49 == null ?{core::double?} null : let final core::double #t50 = #t49.{self::Test3::prop}{core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
+    core::double? v11 = let final self::Test3? #t52 = t in #t52 == null ?{core::double?} null : let final core::double #t53 = #t52.{self::Test3::prop}{core::double} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1){(core::num) → core::double} in #t53;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method getInt() → core::int*
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.modular.expect
index defcb5a..e4986a3 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.modular.expect
@@ -1,88 +1,61 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Test1 extends core::Object {
-  field core::int* prop = null;
-  synthetic constructor •() → self::Test1*
+  field core::int prop = 1;
+  field core::int? prop2 = null;
+  synthetic constructor •() → self::Test1
     : super core::Object::•()
     ;
-  static method test(self::Test1* t) → void {
-    core::int* v1 = let final self::Test1* #t1 = t in #t1 == null ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
-    core::int* v4 = let final self::Test1* #t2 = t in #t2 == null ?{core::int*} null : let final core::int* #t3 = #t2.{self::Test1::prop}{core::int*} in #t3 == null ?{core::int*} #t2.{self::Test1::prop} = self::getInt() : #t3;
-    core::int* v7 = let final self::Test1* #t4 = t in #t4 == null ?{core::int*} null : let final core::int* #t5 = #t4.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
-    core::int* v10 = let final self::Test1* #t7 = t in #t7 == null ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
-    core::int* v11 = let final self::Test1* #t10 = t in #t10 == null ?{core::int*} null : let final core::int* #t11 = #t10.{self::Test1::prop}{core::int*} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1){(core::num*) →* core::int*} in #t11;
+  static method test(self::Test1? t) → void {
+    core::int? v1 = let final self::Test1? #t1 = t in #t1 == null ?{core::int?} null : #t1{self::Test1}.{self::Test1::prop} = self::getInt();
+    core::int? v4 = let final self::Test1? #t2 = t in #t2 == null ?{core::int?} null : let final core::int? #t3 = #t2.{self::Test1::prop2}{core::int?} in #t3 == null ?{core::int} #t2.{self::Test1::prop2} = self::getInt() : #t3{core::int};
+    core::int? v7 = let final self::Test1? #t4 = t in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Test1::prop}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
+    core::int? v10 = let final self::Test1? #t7 = t in #t7 == null ?{core::int?} null : let final core::int #t8 = #t7.{self::Test1::prop}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
+    core::int? v11 = let final self::Test1? #t10 = t in #t10 == null ?{core::int?} null : let final core::int #t11 = #t10.{self::Test1::prop}{core::int} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1){(core::num) → core::int} in #t11;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test2 extends core::Object {
-  field core::num* prop = null;
-  synthetic constructor •() → self::Test2*
+  field core::num prop = 0;
+  field core::num? prop2 = null;
+  synthetic constructor •() → self::Test2
     : super core::Object::•()
     ;
-  static method test(self::Test2* t) → void {
-    core::int* v1 = let final self::Test2* #t13 = t in #t13 == null ?{core::int*} null : #t13.{self::Test2::prop} = self::getInt();
-    core::num* v2 = let final self::Test2* #t14 = t in #t14 == null ?{core::num*} null : #t14.{self::Test2::prop} = self::getNum();
-    core::double* v3 = let final self::Test2* #t15 = t in #t15 == null ?{core::double*} null : #t15.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t16 = t in #t16 == null ?{core::num*} null : let final core::num* #t17 = #t16.{self::Test2::prop}{core::num*} in #t17 == null ?{core::num*} #t16.{self::Test2::prop} = self::getInt() : #t17;
-    core::num* v5 = let final self::Test2* #t18 = t in #t18 == null ?{core::num*} null : let final core::num* #t19 = #t18.{self::Test2::prop}{core::num*} in #t19 == null ?{core::num*} #t18.{self::Test2::prop} = self::getNum() : #t19;
-    core::num* v6 = let final self::Test2* #t20 = t in #t20 == null ?{core::num*} null : let final core::num* #t21 = #t20.{self::Test2::prop}{core::num*} in #t21 == null ?{core::num*} #t20.{self::Test2::prop} = self::getDouble() : #t21;
-    core::num* v7 = let final self::Test2* #t22 = t in #t22 == null ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
-    core::num* v8 = let final self::Test2* #t25 = t in #t25 == null ?{core::num*} null : let final core::num* #t26 = #t25.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
-    core::num* v9 = let final self::Test2* #t28 = t in #t28 == null ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
-    core::num* v10 = let final self::Test2* #t31 = t in #t31 == null ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
-    core::num* v11 = let final self::Test2* #t34 = t in #t34 == null ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop}{core::num*} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1){(core::num*) →* core::num*} in #t35;
+  static method test(self::Test2? t) → void {
+    core::int? v1 = let final self::Test2? #t13 = t in #t13 == null ?{core::int?} null : #t13{self::Test2}.{self::Test2::prop} = self::getInt();
+    core::num? v2 = let final self::Test2? #t14 = t in #t14 == null ?{core::num?} null : #t14{self::Test2}.{self::Test2::prop} = self::getNum();
+    core::double? v3 = let final self::Test2? #t15 = t in #t15 == null ?{core::double?} null : #t15{self::Test2}.{self::Test2::prop} = self::getDouble();
+    core::num? v4 = let final self::Test2? #t16 = t in #t16 == null ?{core::num?} null : let final core::num? #t17 = #t16.{self::Test2::prop2}{core::num?} in #t17 == null ?{core::num} #t16.{self::Test2::prop2} = self::getInt() : #t17{core::num};
+    core::num? v5 = let final self::Test2? #t18 = t in #t18 == null ?{core::num?} null : let final core::num #t19 = #t18.{self::Test2::prop}{core::num} in #t19 == null ?{core::num} #t18.{self::Test2::prop} = self::getNum() : #t19;
+    core::num? v6 = let final self::Test2? #t20 = t in #t20 == null ?{core::num?} null : let final core::num #t21 = #t20.{self::Test2::prop}{core::num} in #t21 == null ?{core::num} #t20.{self::Test2::prop} = self::getDouble() : #t21;
+    core::num? v7 = let final self::Test2? #t22 = t in #t22 == null ?{core::num?} null : let final core::num #t23 = #t22.{self::Test2::prop}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
+    core::num? v8 = let final self::Test2? #t25 = t in #t25 == null ?{core::num?} null : let final core::num #t26 = #t25.{self::Test2::prop}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
+    core::double? v9 = let final self::Test2? #t28 = t in #t28 == null ?{core::double?} null : let final core::double #t29 = #t28.{self::Test2::prop}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
+    core::num? v10 = let final self::Test2? #t31 = t in #t31 == null ?{core::num?} null : let final core::num #t32 = #t31.{self::Test2::prop}{core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
+    core::num? v11 = let final self::Test2? #t34 = t in #t34 == null ?{core::num?} null : let final core::num #t35 = #t34.{self::Test2::prop}{core::num} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1){(core::num) → core::num} in #t35;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test3 extends core::Object {
-  field core::double* prop = null;
-  synthetic constructor •() → self::Test3*
+  field core::double prop = 0.0;
+  field core::double? prop2 = null;
+  synthetic constructor •() → self::Test3
     : super core::Object::•()
     ;
-  static method test3(self::Test3* t) → void {
-    core::double* v3 = let final self::Test3* #t37 = t in #t37 == null ?{core::double*} null : #t37.{self::Test3::prop} = self::getDouble();
-    core::double* v6 = let final self::Test3* #t38 = t in #t38 == null ?{core::double*} null : let final core::double* #t39 = #t38.{self::Test3::prop}{core::double*} in #t39 == null ?{core::double*} #t38.{self::Test3::prop} = self::getDouble() : #t39;
-    core::double* v7 = let final self::Test3* #t40 = t in #t40 == null ?{core::double*} null : let final core::double* #t41 = #t40.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
-    core::double* v8 = let final self::Test3* #t43 = t in #t43 == null ?{core::double*} null : let final core::double* #t44 = #t43.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
-    core::double* v9 = let final self::Test3* #t46 = t in #t46 == null ?{core::double*} null : let final core::double* #t47 = #t46.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
-    core::double* v10 = let final self::Test3* #t49 = t in #t49 == null ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
-    core::double* v11 = let final self::Test3* #t52 = t in #t52 == null ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop}{core::double*} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1){(core::num*) →* core::double*} in #t53;
+  static method test3(self::Test3? t) → void {
+    core::double? v3 = let final self::Test3? #t37 = t in #t37 == null ?{core::double?} null : #t37{self::Test3}.{self::Test3::prop} = self::getDouble();
+    core::double? v6 = let final self::Test3? #t38 = t in #t38 == null ?{core::double?} null : let final core::double? #t39 = #t38.{self::Test3::prop2}{core::double?} in #t39 == null ?{core::double} #t38.{self::Test3::prop2} = self::getDouble() : #t39{core::double};
+    core::double? v7 = let final self::Test3? #t40 = t in #t40 == null ?{core::double?} null : let final core::double #t41 = #t40.{self::Test3::prop}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
+    core::double? v8 = let final self::Test3? #t43 = t in #t43 == null ?{core::double?} null : let final core::double #t44 = #t43.{self::Test3::prop}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
+    core::double? v9 = let final self::Test3? #t46 = t in #t46 == null ?{core::double?} null : let final core::double #t47 = #t46.{self::Test3::prop}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
+    core::double? v10 = let final self::Test3? #t49 = t in #t49 == null ?{core::double?} null : let final core::double #t50 = #t49.{self::Test3::prop}{core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
+    core::double? v11 = let final self::Test3? #t52 = t in #t52 == null ?{core::double?} null : let final core::double #t53 = #t52.{self::Test3::prop}{core::double} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1){(core::num) → core::double} in #t53;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method getInt() → core::int*
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.outline.expect
index fd753c6..21d9cba 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.outline.expect
@@ -1,63 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Test1 extends core::Object {
-  field core::int* prop;
-  synthetic constructor •() → self::Test1*
+  field core::int prop;
+  field core::int? prop2;
+  synthetic constructor •() → self::Test1
     ;
-  static method test(self::Test1* t) → void
+  static method test(self::Test1? t) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test2 extends core::Object {
-  field core::num* prop;
-  synthetic constructor •() → self::Test2*
+  field core::num prop;
+  field core::num? prop2;
+  synthetic constructor •() → self::Test2
     ;
-  static method test(self::Test2* t) → void
+  static method test(self::Test2? t) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test3 extends core::Object {
-  field core::double* prop;
-  synthetic constructor •() → self::Test3*
+  field core::double prop;
+  field core::double? prop2;
+  synthetic constructor •() → self::Test3
     ;
-  static method test3(self::Test3* t) → void
+  static method test3(self::Test3? t) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method getInt() → core::int*
+static method getInt() → core::int
   ;
-static method getNum() → core::num*
+static method getNum() → core::num
   ;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.transformed.expect
index defcb5a..e4986a3 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.transformed.expect
@@ -1,88 +1,61 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Test1 extends core::Object {
-  field core::int* prop = null;
-  synthetic constructor •() → self::Test1*
+  field core::int prop = 1;
+  field core::int? prop2 = null;
+  synthetic constructor •() → self::Test1
     : super core::Object::•()
     ;
-  static method test(self::Test1* t) → void {
-    core::int* v1 = let final self::Test1* #t1 = t in #t1 == null ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
-    core::int* v4 = let final self::Test1* #t2 = t in #t2 == null ?{core::int*} null : let final core::int* #t3 = #t2.{self::Test1::prop}{core::int*} in #t3 == null ?{core::int*} #t2.{self::Test1::prop} = self::getInt() : #t3;
-    core::int* v7 = let final self::Test1* #t4 = t in #t4 == null ?{core::int*} null : let final core::int* #t5 = #t4.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
-    core::int* v10 = let final self::Test1* #t7 = t in #t7 == null ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
-    core::int* v11 = let final self::Test1* #t10 = t in #t10 == null ?{core::int*} null : let final core::int* #t11 = #t10.{self::Test1::prop}{core::int*} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1){(core::num*) →* core::int*} in #t11;
+  static method test(self::Test1? t) → void {
+    core::int? v1 = let final self::Test1? #t1 = t in #t1 == null ?{core::int?} null : #t1{self::Test1}.{self::Test1::prop} = self::getInt();
+    core::int? v4 = let final self::Test1? #t2 = t in #t2 == null ?{core::int?} null : let final core::int? #t3 = #t2.{self::Test1::prop2}{core::int?} in #t3 == null ?{core::int} #t2.{self::Test1::prop2} = self::getInt() : #t3{core::int};
+    core::int? v7 = let final self::Test1? #t4 = t in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Test1::prop}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
+    core::int? v10 = let final self::Test1? #t7 = t in #t7 == null ?{core::int?} null : let final core::int #t8 = #t7.{self::Test1::prop}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
+    core::int? v11 = let final self::Test1? #t10 = t in #t10 == null ?{core::int?} null : let final core::int #t11 = #t10.{self::Test1::prop}{core::int} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1){(core::num) → core::int} in #t11;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test2 extends core::Object {
-  field core::num* prop = null;
-  synthetic constructor •() → self::Test2*
+  field core::num prop = 0;
+  field core::num? prop2 = null;
+  synthetic constructor •() → self::Test2
     : super core::Object::•()
     ;
-  static method test(self::Test2* t) → void {
-    core::int* v1 = let final self::Test2* #t13 = t in #t13 == null ?{core::int*} null : #t13.{self::Test2::prop} = self::getInt();
-    core::num* v2 = let final self::Test2* #t14 = t in #t14 == null ?{core::num*} null : #t14.{self::Test2::prop} = self::getNum();
-    core::double* v3 = let final self::Test2* #t15 = t in #t15 == null ?{core::double*} null : #t15.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t16 = t in #t16 == null ?{core::num*} null : let final core::num* #t17 = #t16.{self::Test2::prop}{core::num*} in #t17 == null ?{core::num*} #t16.{self::Test2::prop} = self::getInt() : #t17;
-    core::num* v5 = let final self::Test2* #t18 = t in #t18 == null ?{core::num*} null : let final core::num* #t19 = #t18.{self::Test2::prop}{core::num*} in #t19 == null ?{core::num*} #t18.{self::Test2::prop} = self::getNum() : #t19;
-    core::num* v6 = let final self::Test2* #t20 = t in #t20 == null ?{core::num*} null : let final core::num* #t21 = #t20.{self::Test2::prop}{core::num*} in #t21 == null ?{core::num*} #t20.{self::Test2::prop} = self::getDouble() : #t21;
-    core::num* v7 = let final self::Test2* #t22 = t in #t22 == null ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
-    core::num* v8 = let final self::Test2* #t25 = t in #t25 == null ?{core::num*} null : let final core::num* #t26 = #t25.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
-    core::num* v9 = let final self::Test2* #t28 = t in #t28 == null ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
-    core::num* v10 = let final self::Test2* #t31 = t in #t31 == null ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
-    core::num* v11 = let final self::Test2* #t34 = t in #t34 == null ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop}{core::num*} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1){(core::num*) →* core::num*} in #t35;
+  static method test(self::Test2? t) → void {
+    core::int? v1 = let final self::Test2? #t13 = t in #t13 == null ?{core::int?} null : #t13{self::Test2}.{self::Test2::prop} = self::getInt();
+    core::num? v2 = let final self::Test2? #t14 = t in #t14 == null ?{core::num?} null : #t14{self::Test2}.{self::Test2::prop} = self::getNum();
+    core::double? v3 = let final self::Test2? #t15 = t in #t15 == null ?{core::double?} null : #t15{self::Test2}.{self::Test2::prop} = self::getDouble();
+    core::num? v4 = let final self::Test2? #t16 = t in #t16 == null ?{core::num?} null : let final core::num? #t17 = #t16.{self::Test2::prop2}{core::num?} in #t17 == null ?{core::num} #t16.{self::Test2::prop2} = self::getInt() : #t17{core::num};
+    core::num? v5 = let final self::Test2? #t18 = t in #t18 == null ?{core::num?} null : let final core::num #t19 = #t18.{self::Test2::prop}{core::num} in #t19 == null ?{core::num} #t18.{self::Test2::prop} = self::getNum() : #t19;
+    core::num? v6 = let final self::Test2? #t20 = t in #t20 == null ?{core::num?} null : let final core::num #t21 = #t20.{self::Test2::prop}{core::num} in #t21 == null ?{core::num} #t20.{self::Test2::prop} = self::getDouble() : #t21;
+    core::num? v7 = let final self::Test2? #t22 = t in #t22 == null ?{core::num?} null : let final core::num #t23 = #t22.{self::Test2::prop}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
+    core::num? v8 = let final self::Test2? #t25 = t in #t25 == null ?{core::num?} null : let final core::num #t26 = #t25.{self::Test2::prop}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
+    core::double? v9 = let final self::Test2? #t28 = t in #t28 == null ?{core::double?} null : let final core::double #t29 = #t28.{self::Test2::prop}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
+    core::num? v10 = let final self::Test2? #t31 = t in #t31 == null ?{core::num?} null : let final core::num #t32 = #t31.{self::Test2::prop}{core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
+    core::num? v11 = let final self::Test2? #t34 = t in #t34 == null ?{core::num?} null : let final core::num #t35 = #t34.{self::Test2::prop}{core::num} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1){(core::num) → core::num} in #t35;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test3 extends core::Object {
-  field core::double* prop = null;
-  synthetic constructor •() → self::Test3*
+  field core::double prop = 0.0;
+  field core::double? prop2 = null;
+  synthetic constructor •() → self::Test3
     : super core::Object::•()
     ;
-  static method test3(self::Test3* t) → void {
-    core::double* v3 = let final self::Test3* #t37 = t in #t37 == null ?{core::double*} null : #t37.{self::Test3::prop} = self::getDouble();
-    core::double* v6 = let final self::Test3* #t38 = t in #t38 == null ?{core::double*} null : let final core::double* #t39 = #t38.{self::Test3::prop}{core::double*} in #t39 == null ?{core::double*} #t38.{self::Test3::prop} = self::getDouble() : #t39;
-    core::double* v7 = let final self::Test3* #t40 = t in #t40 == null ?{core::double*} null : let final core::double* #t41 = #t40.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
-    core::double* v8 = let final self::Test3* #t43 = t in #t43 == null ?{core::double*} null : let final core::double* #t44 = #t43.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
-    core::double* v9 = let final self::Test3* #t46 = t in #t46 == null ?{core::double*} null : let final core::double* #t47 = #t46.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
-    core::double* v10 = let final self::Test3* #t49 = t in #t49 == null ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
-    core::double* v11 = let final self::Test3* #t52 = t in #t52 == null ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop}{core::double*} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1){(core::num*) →* core::double*} in #t53;
+  static method test3(self::Test3? t) → void {
+    core::double? v3 = let final self::Test3? #t37 = t in #t37 == null ?{core::double?} null : #t37{self::Test3}.{self::Test3::prop} = self::getDouble();
+    core::double? v6 = let final self::Test3? #t38 = t in #t38 == null ?{core::double?} null : let final core::double? #t39 = #t38.{self::Test3::prop2}{core::double?} in #t39 == null ?{core::double} #t38.{self::Test3::prop2} = self::getDouble() : #t39{core::double};
+    core::double? v7 = let final self::Test3? #t40 = t in #t40 == null ?{core::double?} null : let final core::double #t41 = #t40.{self::Test3::prop}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
+    core::double? v8 = let final self::Test3? #t43 = t in #t43 == null ?{core::double?} null : let final core::double #t44 = #t43.{self::Test3::prop}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
+    core::double? v9 = let final self::Test3? #t46 = t in #t46 == null ?{core::double?} null : let final core::double #t47 = #t46.{self::Test3::prop}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
+    core::double? v10 = let final self::Test3? #t49 = t in #t49 == null ?{core::double?} null : let final core::double #t50 = #t49.{self::Test3::prop}{core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
+    core::double? v11 = let final self::Test3? #t52 = t in #t52 == null ?{core::double?} null : let final core::double #t53 = #t52.{self::Test3::prop}{core::double} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1){(core::num) → core::double} in #t53;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method getInt() → core::int*
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart
index 1c94bce..4641510 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -26,36 +28,34 @@
   void test() {
     super.member = /*@ typeArgs=B* */ f();
 
-    super. /*@target=Base.member*/ member
-         ??= /*@ typeArgs=B* */ f();
+    super. /*@target=Base.member*/ member ??= /*@ typeArgs=B* */ f();
 
-    super. /*@target=Base.member*/ member
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    super
+        . /*@target=Base.member*/ member /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
-    super. /*@target=Base.member*/ member
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    super
+        . /*@target=Base.member*/ member /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
-    super. /*@target=Base.member*/ member
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    super
+        . /*@target=Base.member*/ member /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
     /*@target=B.-*/ --super. /*@target=Base.member*/ member;
 
-    super. /*@target=Base.member*/ member
-        /*@target=B.-*/ --;
+    super. /*@target=Base.member*/ member /*@target=B.-*/ --;
 
     var /*@ type=B* */ v1 = super.member = /*@ typeArgs=B* */ f();
 
-    var /*@ type=B* */ v2 = super. /*@target=Base.member*/ member
-         ??= /*@ typeArgs=B* */ f();
+    var /*@ type=B* */ v2 =
+        super. /*@target=Base.member*/ member ??= /*@ typeArgs=B* */ f();
 
-    var /*@ type=A* */ v3 = super. /*@target=Base.member*/ member
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    var /*@ type=A* */ v3 = super
+        . /*@target=Base.member*/ member /*@target=B.+*/ += /*@ typeArgs=C* */ f();
 
-    var /*@ type=B* */ v4 = super. /*@target=Base.member*/ member
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    var /*@ type=B* */ v4 = super
+        . /*@target=Base.member*/ member /*@target=B.**/ *= /*@ typeArgs=B* */ f();
 
-    var /*@ type=C* */ v5 = super. /*@target=Base.member*/ member
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    var /*@ type=C* */ v5 = super
+        . /*@target=Base.member*/ member /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
 
     var /*@ type=B* */ v6 =
         /*@target=B.-*/ --super. /*@target=Base.member*/ member;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart
new file mode 100644
index 0000000..62d3dc8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart
@@ -0,0 +1,72 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Base {
+  B member;
+  B? member2;
+
+  Base(this.member);
+}
+
+class Test extends Base {
+  Test(B member) : super(member);
+
+  void test() {
+    super.member = /*@typeArgs=B*/ f();
+
+    super. /*@target=Base.member2*/ member2 ??= /*@typeArgs=B?*/ f();
+
+    super
+        . /*@target=Base.member*/ member /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    super
+        . /*@target=Base.member*/ member /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    super
+        . /*@target=Base.member*/ member /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    /*@target=B.-*/ --super. /*@target=Base.member*/ member;
+
+    super. /*@target=Base.member*/ member /*@target=B.-*/ --;
+
+    var /*@type=B*/ v1 = super.member = /*@typeArgs=B*/ f();
+
+    var /*@type=B?*/ v2 =
+        super. /*@target=Base.member2*/ member2 ??= /*@typeArgs=B?*/ f();
+
+    var /*@type=B*/ v3 = super
+        . /*@target=Base.member*/ member /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    var /*@type=B*/ v4 = super
+        . /*@target=Base.member*/ member /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    var /*@type=C*/ v5 = super
+        . /*@target=Base.member*/ member /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    var /*@type=B*/ v6 =
+        /*@target=B.-*/ --super. /*@target=Base.member*/ member;
+
+    var /*@type=B*/ v7 = super
+        . /*@type=B*/ /*@target=Base.member*/
+        /*@type=B*/ member /*@target=B.-*/ --;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.textual_outline.expect
new file mode 100644
index 0000000..7fd2bc5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.textual_outline.expect
@@ -0,0 +1,27 @@
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Base {
+  B member;
+  B? member2;
+  Base(this.member);
+}
+
+class Test extends Base {
+  Test(B member) : super(member);
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1fa8637
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.textual_outline_modelled.expect
@@ -0,0 +1,27 @@
+library test;
+
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class Base {
+  B? member2;
+  B member;
+  Base(this.member);
+}
+
+class C extends B {}
+
+class Test extends Base {
+  Test(B member) : super(member);
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.weak.expect
new file mode 100644
index 0000000..d1cf654
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.weak.expect
@@ -0,0 +1,58 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  field self::B member;
+  field self::B? member2 = null;
+  constructor •(self::B member) → self::Base
+    : self::Base::member = member, super core::Object::•()
+    ;
+}
+class Test extends self::Base {
+  constructor •(self::B member) → self::Test
+    : super self::Base::•(member)
+    ;
+  method test() → void {
+    super.{self::Base::member} = self::f<self::B>();
+    super.{self::Base::member2} == null ?{self::B?} super.{self::Base::member2} = self::f<self::B?>() : null;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = super.{self::Base::member} = self::f<self::B>();
+    self::B? v2 = let final self::B? #t1 = super.{self::Base::member2} in #t1 == null ?{self::B?} super.{self::Base::member2} = self::f<self::B?>() : #t1{self::B};
+    self::B v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::B #t2 = super.{self::Base::member} in let final self::B #t3 = super.{self::Base::member} = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.weak.modular.expect
new file mode 100644
index 0000000..d1cf654
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  field self::B member;
+  field self::B? member2 = null;
+  constructor •(self::B member) → self::Base
+    : self::Base::member = member, super core::Object::•()
+    ;
+}
+class Test extends self::Base {
+  constructor •(self::B member) → self::Test
+    : super self::Base::•(member)
+    ;
+  method test() → void {
+    super.{self::Base::member} = self::f<self::B>();
+    super.{self::Base::member2} == null ?{self::B?} super.{self::Base::member2} = self::f<self::B?>() : null;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = super.{self::Base::member} = self::f<self::B>();
+    self::B? v2 = let final self::B? #t1 = super.{self::Base::member2} in #t1 == null ?{self::B?} super.{self::Base::member2} = self::f<self::B?>() : #t1{self::B};
+    self::B v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::B #t2 = super.{self::Base::member} in let final self::B #t3 = super.{self::Base::member} = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.weak.outline.expect
new file mode 100644
index 0000000..81ca033
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.weak.outline.expect
@@ -0,0 +1,40 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+class Base extends core::Object {
+  field self::B member;
+  field self::B? member2;
+  constructor •(self::B member) → self::Base
+    ;
+}
+class Test extends self::Base {
+  constructor •(self::B member) → self::Test
+    ;
+  method test() → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.weak.transformed.expect
new file mode 100644
index 0000000..d1cf654
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super2.dart.weak.transformed.expect
@@ -0,0 +1,58 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  field self::B member;
+  field self::B? member2 = null;
+  constructor •(self::B member) → self::Base
+    : self::Base::member = member, super core::Object::•()
+    ;
+}
+class Test extends self::Base {
+  constructor •(self::B member) → self::Test
+    : super self::Base::•(member)
+    ;
+  method test() → void {
+    super.{self::Base::member} = self::f<self::B>();
+    super.{self::Base::member2} == null ?{self::B?} super.{self::Base::member2} = self::f<self::B?>() : null;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = super.{self::Base::member} = self::f<self::B>();
+    self::B? v2 = let final self::B? #t1 = super.{self::Base::member2} in #t1 == null ?{self::B?} super.{self::Base::member2} = self::f<self::B?>() : #t1{self::B};
+    self::B v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::B #t2 = super.{self::Base::member} in let final self::B #t3 = super.{self::Base::member} = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart
index b7a994d..bf35751 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,90 +10,93 @@
 double getDouble() => 0.0;
 
 class Base {
-  int intProp;
-  num numProp;
-  double doubleProp;
+  int intProp = 0;
+  int? intProp2;
+  num numProp = 0;
+  num? numProp2;
+  double doubleProp = 0;
+  double? doubleProp2;
 }
 
 class Test1 extends Base {
   void test() {
-    var /*@ type=int* */ v1 = super.intProp = getInt();
+    var /*@type=int*/ v1 = super.intProp = getInt();
 
-    var /*@ type=int* */ v4 = super. /*@target=Base.intProp*/ intProp
+    var /*@type=int*/ v4 = super. /*@target=Base.intProp2*/ intProp2
          ??= getInt();
 
-    var /*@ type=int* */ v7 = super. /*@target=Base.intProp*/ intProp
+    var /*@type=int*/ v7 = super. /*@target=Base.intProp*/ intProp
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
+    var /*@type=int*/ v10 = /*@target=num.+*/ ++super
         . /*@target=Base.intProp*/ intProp;
 
-    var /*@ type=int* */ v11 = super
-        . /*@ type=int* */ /*@target=Base.intProp*/
-        /*@ type=int* */ intProp /*@target=num.+*/ ++;
+    var /*@type=int*/ v11 = super
+        . /*@type=int*/ /*@target=Base.intProp*/
+        /*@type=int*/ intProp /*@target=num.+*/ ++;
   }
 }
 
 class Test2 extends Base {
   void test() {
-    var /*@ type=int* */ v1 = super.numProp = getInt();
+    var /*@type=int*/ v1 = super.numProp = getInt();
 
-    var /*@ type=num* */ v2 = super.numProp = getNum();
+    var /*@type=num*/ v2 = super.numProp = getNum();
 
-    var /*@ type=double* */ v3 = super.numProp = getDouble();
+    var /*@type=double*/ v3 = super.numProp = getDouble();
 
-    var /*@ type=num* */ v4 = super. /*@target=Base.numProp*/ numProp
+    var /*@type=num*/ v4 = super. /*@target=Base.numProp2*/ numProp2
          ??= getInt();
 
-    var /*@ type=num* */ v5 = super. /*@target=Base.numProp*/ numProp
+    var /*@type=num*/ v5 = super. /*@target=Base.numProp2*/ numProp2
          ??= getNum();
 
-    var /*@ type=num* */ v6 = super. /*@target=Base.numProp*/ numProp
+    var /*@type=num*/ v6 = super. /*@target=Base.numProp2*/ numProp2
          ??= getDouble();
 
-    var /*@ type=num* */ v7 = super. /*@target=Base.numProp*/ numProp
+    var /*@type=num*/ v7 = super. /*@target=Base.numProp*/ numProp
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = super. /*@target=Base.numProp*/ numProp
+    var /*@type=num*/ v8 = super. /*@target=Base.numProp*/ numProp
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v9 = super
+    var /*@type=double*/ v9 = super
             .
             /*@target=Base.numProp*/ numProp
         /*@target=num.+*/ += getDouble();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++super
+    var /*@type=num*/ v10 = /*@target=num.+*/ ++super
         . /*@target=Base.numProp*/ numProp;
 
-    var /*@ type=num* */ v11 = super
+    var /*@type=num*/ v11 = super
         .
-        /*@ type=num* */ /*@target=Base.numProp*/
-        /*@ type=num* */ numProp /*@target=num.+*/ ++;
+        /*@type=num*/ /*@target=Base.numProp*/
+        /*@type=num*/ numProp /*@target=num.+*/ ++;
   }
 }
 
 class Test3 extends Base {
   void test3() {
-    var /*@ type=double* */ v3 = super.doubleProp = getDouble();
+    var /*@type=double*/ v3 = super.doubleProp = getDouble();
 
-    var /*@ type=double* */ v6 = super. /*@target=Base.doubleProp*/ doubleProp
+    var /*@type=double*/ v6 = super. /*@target=Base.doubleProp2*/ doubleProp2
          ??= getDouble();
 
-    var /*@ type=double* */ v7 = super. /*@target=Base.doubleProp*/ doubleProp
+    var /*@type=double*/ v7 = super. /*@target=Base.doubleProp*/ doubleProp
         /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 = super. /*@target=Base.doubleProp*/ doubleProp
+    var /*@type=double*/ v8 = super. /*@target=Base.doubleProp*/ doubleProp
         /*@target=double.+*/ += getNum();
 
-    var /*@ type=double* */ v9 = super. /*@target=Base.doubleProp*/ doubleProp
+    var /*@type=double*/ v9 = super. /*@target=Base.doubleProp*/ doubleProp
         /*@target=double.+*/ += getDouble();
 
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
+    var /*@type=double*/ v10 = /*@target=double.+*/ ++super
         . /*@target=Base.doubleProp*/ doubleProp;
 
-    var /*@ type=double* */ v11 = super
-        . /*@ type=double* */ /*@target=Base.doubleProp*/
-        /*@ type=double* */ doubleProp /*@target=double.+*/ ++;
+    var /*@type=double*/ v11 = super
+        . /*@type=double*/ /*@target=Base.doubleProp*/
+        /*@type=double*/ doubleProp /*@target=double.+*/ ++;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.textual_outline.expect
index 4fafcad..371ffeb 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 int getInt() => 0;
@@ -6,9 +5,12 @@
 double getDouble() => 0.0;
 
 class Base {
-  int intProp;
-  num numProp;
-  double doubleProp;
+  int intProp = 0;
+  int? intProp2;
+  num numProp = 0;
+  num? numProp2;
+  double doubleProp = 0;
+  double? doubleProp2;
 }
 
 class Test1 extends Base {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.textual_outline_modelled.expect
index 4aefd1c..230af7c 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.textual_outline_modelled.expect
@@ -1,10 +1,12 @@
-// @dart = 2.9
 library test;
 
 class Base {
-  double doubleProp;
-  int intProp;
-  num numProp;
+  double? doubleProp2;
+  double doubleProp = 0;
+  int? intProp2;
+  int intProp = 0;
+  num? numProp2;
+  num numProp = 0;
 }
 
 class Test1 extends Base {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.expect
index 15883a8..12e10f4 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.expect
@@ -1,73 +1,66 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Base extends core::Object {
-  field core::int* intProp = null;
-  field core::num* numProp = null;
-  field core::double* doubleProp = null;
-  synthetic constructor •() → self::Base*
+  field core::int intProp = 0;
+  field core::int? intProp2 = null;
+  field core::num numProp = 0;
+  field core::num? numProp2 = null;
+  field core::double doubleProp = 0.0;
+  field core::double? doubleProp2 = null;
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test1 extends self::Base {
-  synthetic constructor •() → self::Test1*
+  synthetic constructor •() → self::Test1
     : super self::Base::•()
     ;
   method test() → void {
-    core::int* v1 = super.{self::Base::intProp} = self::getInt();
-    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1 == null ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
-    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
-    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num*) →* core::int*};
-    core::int* v11 = let final core::int* #t2 = super.{self::Base::intProp} in let final core::int* #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+    core::int v1 = super.{self::Base::intProp} = self::getInt();
+    core::int v4 = let final core::int? #t1 = super.{self::Base::intProp2} in #t1 == null ?{core::int} super.{self::Base::intProp2} = self::getInt() : #t1{core::int};
+    core::int v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final core::int #t2 = super.{self::Base::intProp} in let final core::int #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
   }
 }
 class Test2 extends self::Base {
-  synthetic constructor •() → self::Test2*
+  synthetic constructor •() → self::Test2
     : super self::Base::•()
     ;
   method test() → void {
-    core::int* v1 = super.{self::Base::numProp} = self::getInt();
-    core::num* v2 = super.{self::Base::numProp} = self::getNum();
-    core::double* v3 = super.{self::Base::numProp} = self::getDouble();
-    core::num* v4 = let final core::num* #t4 = super.{self::Base::numProp} in #t4 == null ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t4;
-    core::num* v5 = let final core::num* #t5 = super.{self::Base::numProp} in #t5 == null ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t5;
-    core::num* v6 = let final core::num* #t6 = super.{self::Base::numProp} in #t6 == null ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t6;
-    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
-    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
-    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
-    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num*) →* core::num*};
-    core::num* v11 = let final core::num* #t7 = super.{self::Base::numProp} in let final core::num* #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+    core::int v1 = super.{self::Base::numProp} = self::getInt();
+    core::num v2 = super.{self::Base::numProp} = self::getNum();
+    core::double v3 = super.{self::Base::numProp} = self::getDouble();
+    core::num v4 = let final core::num? #t4 = super.{self::Base::numProp2} in #t4 == null ?{core::num} super.{self::Base::numProp2} = self::getInt() : #t4{core::num};
+    core::num v5 = let final core::num? #t5 = super.{self::Base::numProp2} in #t5 == null ?{core::num} super.{self::Base::numProp2} = self::getNum() : #t5{core::num};
+    core::num v6 = let final core::num? #t6 = super.{self::Base::numProp2} in #t6 == null ?{core::num} super.{self::Base::numProp2} = self::getDouble() : #t6{core::num};
+    core::num v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final core::num #t7 = super.{self::Base::numProp} in let final core::num #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
   }
 }
 class Test3 extends self::Base {
-  synthetic constructor •() → self::Test3*
+  synthetic constructor •() → self::Test3
     : super self::Base::•()
     ;
   method test3() → void {
-    core::double* v3 = super.{self::Base::doubleProp} = self::getDouble();
-    core::double* v6 = let final core::double* #t9 = super.{self::Base::doubleProp} in #t9 == null ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t9;
-    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
-    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
-    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
-    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num*) →* core::double*};
-    core::double* v11 = let final core::double* #t10 = super.{self::Base::doubleProp} in let final core::double* #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+    core::double v3 = super.{self::Base::doubleProp} = self::getDouble();
+    core::double v6 = let final core::double? #t9 = super.{self::Base::doubleProp2} in #t9 == null ?{core::double} super.{self::Base::doubleProp2} = self::getDouble() : #t9{core::double};
+    core::double v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final core::double #t10 = super.{self::Base::doubleProp} in let final core::double #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
   }
 }
-static method getInt() → core::int*
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.modular.expect
index 15883a8..12e10f4 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.modular.expect
@@ -1,73 +1,66 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Base extends core::Object {
-  field core::int* intProp = null;
-  field core::num* numProp = null;
-  field core::double* doubleProp = null;
-  synthetic constructor •() → self::Base*
+  field core::int intProp = 0;
+  field core::int? intProp2 = null;
+  field core::num numProp = 0;
+  field core::num? numProp2 = null;
+  field core::double doubleProp = 0.0;
+  field core::double? doubleProp2 = null;
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test1 extends self::Base {
-  synthetic constructor •() → self::Test1*
+  synthetic constructor •() → self::Test1
     : super self::Base::•()
     ;
   method test() → void {
-    core::int* v1 = super.{self::Base::intProp} = self::getInt();
-    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1 == null ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
-    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
-    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num*) →* core::int*};
-    core::int* v11 = let final core::int* #t2 = super.{self::Base::intProp} in let final core::int* #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+    core::int v1 = super.{self::Base::intProp} = self::getInt();
+    core::int v4 = let final core::int? #t1 = super.{self::Base::intProp2} in #t1 == null ?{core::int} super.{self::Base::intProp2} = self::getInt() : #t1{core::int};
+    core::int v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final core::int #t2 = super.{self::Base::intProp} in let final core::int #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
   }
 }
 class Test2 extends self::Base {
-  synthetic constructor •() → self::Test2*
+  synthetic constructor •() → self::Test2
     : super self::Base::•()
     ;
   method test() → void {
-    core::int* v1 = super.{self::Base::numProp} = self::getInt();
-    core::num* v2 = super.{self::Base::numProp} = self::getNum();
-    core::double* v3 = super.{self::Base::numProp} = self::getDouble();
-    core::num* v4 = let final core::num* #t4 = super.{self::Base::numProp} in #t4 == null ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t4;
-    core::num* v5 = let final core::num* #t5 = super.{self::Base::numProp} in #t5 == null ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t5;
-    core::num* v6 = let final core::num* #t6 = super.{self::Base::numProp} in #t6 == null ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t6;
-    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
-    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
-    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
-    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num*) →* core::num*};
-    core::num* v11 = let final core::num* #t7 = super.{self::Base::numProp} in let final core::num* #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+    core::int v1 = super.{self::Base::numProp} = self::getInt();
+    core::num v2 = super.{self::Base::numProp} = self::getNum();
+    core::double v3 = super.{self::Base::numProp} = self::getDouble();
+    core::num v4 = let final core::num? #t4 = super.{self::Base::numProp2} in #t4 == null ?{core::num} super.{self::Base::numProp2} = self::getInt() : #t4{core::num};
+    core::num v5 = let final core::num? #t5 = super.{self::Base::numProp2} in #t5 == null ?{core::num} super.{self::Base::numProp2} = self::getNum() : #t5{core::num};
+    core::num v6 = let final core::num? #t6 = super.{self::Base::numProp2} in #t6 == null ?{core::num} super.{self::Base::numProp2} = self::getDouble() : #t6{core::num};
+    core::num v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final core::num #t7 = super.{self::Base::numProp} in let final core::num #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
   }
 }
 class Test3 extends self::Base {
-  synthetic constructor •() → self::Test3*
+  synthetic constructor •() → self::Test3
     : super self::Base::•()
     ;
   method test3() → void {
-    core::double* v3 = super.{self::Base::doubleProp} = self::getDouble();
-    core::double* v6 = let final core::double* #t9 = super.{self::Base::doubleProp} in #t9 == null ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t9;
-    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
-    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
-    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
-    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num*) →* core::double*};
-    core::double* v11 = let final core::double* #t10 = super.{self::Base::doubleProp} in let final core::double* #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+    core::double v3 = super.{self::Base::doubleProp} = self::getDouble();
+    core::double v6 = let final core::double? #t9 = super.{self::Base::doubleProp2} in #t9 == null ?{core::double} super.{self::Base::doubleProp2} = self::getDouble() : #t9{core::double};
+    core::double v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final core::double #t10 = super.{self::Base::doubleProp} in let final core::double #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
   }
 }
-static method getInt() → core::int*
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.outline.expect
index 805ae5a..6500afd 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.outline.expect
@@ -1,47 +1,40 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Base extends core::Object {
-  field core::int* intProp;
-  field core::num* numProp;
-  field core::double* doubleProp;
-  synthetic constructor •() → self::Base*
+  field core::int intProp;
+  field core::int? intProp2;
+  field core::num numProp;
+  field core::num? numProp2;
+  field core::double doubleProp;
+  field core::double? doubleProp2;
+  synthetic constructor •() → self::Base
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test1 extends self::Base {
-  synthetic constructor •() → self::Test1*
+  synthetic constructor •() → self::Test1
     ;
   method test() → void
     ;
 }
 class Test2 extends self::Base {
-  synthetic constructor •() → self::Test2*
+  synthetic constructor •() → self::Test2
     ;
   method test() → void
     ;
 }
 class Test3 extends self::Base {
-  synthetic constructor •() → self::Test3*
+  synthetic constructor •() → self::Test3
     ;
   method test3() → void
     ;
 }
-static method getInt() → core::int*
+static method getInt() → core::int
   ;
-static method getNum() → core::num*
+static method getNum() → core::num
   ;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.transformed.expect
index 15883a8..12e10f4 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.transformed.expect
@@ -1,73 +1,66 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Base extends core::Object {
-  field core::int* intProp = null;
-  field core::num* numProp = null;
-  field core::double* doubleProp = null;
-  synthetic constructor •() → self::Base*
+  field core::int intProp = 0;
+  field core::int? intProp2 = null;
+  field core::num numProp = 0;
+  field core::num? numProp2 = null;
+  field core::double doubleProp = 0.0;
+  field core::double? doubleProp2 = null;
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test1 extends self::Base {
-  synthetic constructor •() → self::Test1*
+  synthetic constructor •() → self::Test1
     : super self::Base::•()
     ;
   method test() → void {
-    core::int* v1 = super.{self::Base::intProp} = self::getInt();
-    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1 == null ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
-    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
-    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num*) →* core::int*};
-    core::int* v11 = let final core::int* #t2 = super.{self::Base::intProp} in let final core::int* #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+    core::int v1 = super.{self::Base::intProp} = self::getInt();
+    core::int v4 = let final core::int? #t1 = super.{self::Base::intProp2} in #t1 == null ?{core::int} super.{self::Base::intProp2} = self::getInt() : #t1{core::int};
+    core::int v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final core::int #t2 = super.{self::Base::intProp} in let final core::int #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
   }
 }
 class Test2 extends self::Base {
-  synthetic constructor •() → self::Test2*
+  synthetic constructor •() → self::Test2
     : super self::Base::•()
     ;
   method test() → void {
-    core::int* v1 = super.{self::Base::numProp} = self::getInt();
-    core::num* v2 = super.{self::Base::numProp} = self::getNum();
-    core::double* v3 = super.{self::Base::numProp} = self::getDouble();
-    core::num* v4 = let final core::num* #t4 = super.{self::Base::numProp} in #t4 == null ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t4;
-    core::num* v5 = let final core::num* #t5 = super.{self::Base::numProp} in #t5 == null ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t5;
-    core::num* v6 = let final core::num* #t6 = super.{self::Base::numProp} in #t6 == null ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t6;
-    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
-    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
-    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
-    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num*) →* core::num*};
-    core::num* v11 = let final core::num* #t7 = super.{self::Base::numProp} in let final core::num* #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+    core::int v1 = super.{self::Base::numProp} = self::getInt();
+    core::num v2 = super.{self::Base::numProp} = self::getNum();
+    core::double v3 = super.{self::Base::numProp} = self::getDouble();
+    core::num v4 = let final core::num? #t4 = super.{self::Base::numProp2} in #t4 == null ?{core::num} super.{self::Base::numProp2} = self::getInt() : #t4{core::num};
+    core::num v5 = let final core::num? #t5 = super.{self::Base::numProp2} in #t5 == null ?{core::num} super.{self::Base::numProp2} = self::getNum() : #t5{core::num};
+    core::num v6 = let final core::num? #t6 = super.{self::Base::numProp2} in #t6 == null ?{core::num} super.{self::Base::numProp2} = self::getDouble() : #t6{core::num};
+    core::num v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final core::num #t7 = super.{self::Base::numProp} in let final core::num #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
   }
 }
 class Test3 extends self::Base {
-  synthetic constructor •() → self::Test3*
+  synthetic constructor •() → self::Test3
     : super self::Base::•()
     ;
   method test3() → void {
-    core::double* v3 = super.{self::Base::doubleProp} = self::getDouble();
-    core::double* v6 = let final core::double* #t9 = super.{self::Base::doubleProp} in #t9 == null ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t9;
-    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
-    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
-    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
-    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num*) →* core::double*};
-    core::double* v11 = let final core::double* #t10 = super.{self::Base::doubleProp} in let final core::double* #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+    core::double v3 = super.{self::Base::doubleProp} = self::getDouble();
+    core::double v6 = let final core::double? #t9 = super.{self::Base::doubleProp2} in #t9 == null ?{core::double} super.{self::Base::doubleProp2} = self::getDouble() : #t9{core::double};
+    core::double v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final core::double #t10 = super.{self::Base::doubleProp} in let final core::double #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
   }
 }
-static method getInt() → core::int*
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart
index 541e475..3b3ff90 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,80 +10,83 @@
 double getDouble() => 0.0;
 
 class Test1 {
-  int prop;
+  int prop = 0;
+  int? prop2;
 
   static void test(Test1 t) {
-    var /*@ type=int* */ v1 = t. /*@target=Test1.prop*/ prop = getInt();
-    var /*@ type=int* */ v4 = /*@ type=Test1* */ /*@target=Test1.prop*/ t
-            . /*@target=Test1.prop*/ prop
+    var /*@type=int*/ v1 = t. /*@target=Test1.prop*/ prop = getInt();
+    var /*@type=int*/ v4 = /*@type=Test1*/ /*@target=Test1.prop2*/ t
+            . /*@target=Test1.prop2*/ prop2
          ??= getInt();
-    var /*@ type=int* */ v7 =
-        /*@ type=Test1* */ t. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
+    var /*@type=int*/ v7 =
+        /*@type=Test1*/ t. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
             /*@target=num.+*/ += getInt();
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++ /*@ type=Test1* */ t
+    var /*@type=int*/ v10 = /*@target=num.+*/ ++ /*@type=Test1*/ t
         . /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop;
-    var /*@ type=int* */ v11 = /*@ type=Test1* */ t
-        . /*@ type=int* */ /*@target=Test1.prop*/ /*@target=Test1.prop*/
-        /*@ type=int* */ prop /*@target=num.+*/ ++;
+    var /*@type=int*/ v11 = /*@type=Test1*/ t
+        . /*@type=int*/ /*@target=Test1.prop*/ /*@target=Test1.prop*/
+        /*@type=int*/ prop /*@target=num.+*/ ++;
   }
 }
 
 class Test2 {
-  num prop;
+  num prop = 0;
+  num? prop2;
 
   static void test(Test2 t) {
-    var /*@ type=int* */ v1 = t. /*@target=Test2.prop*/ prop = getInt();
-    var /*@ type=num* */ v2 = t. /*@target=Test2.prop*/ prop = getNum();
-    var /*@ type=double* */ v3 = t. /*@target=Test2.prop*/ prop = getDouble();
-    var /*@ type=num* */ v4 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
-            . /*@target=Test2.prop*/ prop
+    var /*@type=int*/ v1 = t. /*@target=Test2.prop*/ prop = getInt();
+    var /*@type=num*/ v2 = t. /*@target=Test2.prop*/ prop = getNum();
+    var /*@type=double*/ v3 = t. /*@target=Test2.prop*/ prop = getDouble();
+    var /*@type=num*/ v4 = /*@type=Test2*/ /*@target=Test2.prop2*/ t
+            . /*@target=Test2.prop2*/ prop2
          ??= getInt();
-    var /*@ type=num* */ v5 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
-            . /*@target=Test2.prop*/ prop
+    var /*@type=num*/ v5 = /*@type=Test2*/ /*@target=Test2.prop2*/ t
+            . /*@target=Test2.prop2*/ prop2
          ??= getNum();
-    var /*@ type=num* */ v6 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
-            . /*@target=Test2.prop*/ prop
+    var /*@type=num*/ v6 = /*@type=Test2*/ /*@target=Test2.prop2*/ t
+            . /*@target=Test2.prop2*/ prop2
          ??= getDouble();
-    var /*@ type=num* */ v7 =
-        /*@ type=Test2* */ t. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
+    var /*@type=num*/ v7 =
+        /*@type=Test2*/ t. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
             /*@target=num.+*/ += getInt();
-    var /*@ type=num* */ v8 =
-        /*@ type=Test2* */ t. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
+    var /*@type=num*/ v8 =
+        /*@type=Test2*/ t. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
             /*@target=num.+*/ += getNum();
-    var /*@ type=num* */ v9 =
-        /*@ type=Test2* */ t. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
+    var /*@type=double*/ v9 =
+        /*@type=Test2*/ t. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
             /*@target=num.+*/ += getDouble();
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++ /*@ type=Test2* */ t
+    var /*@type=num*/ v10 = /*@target=num.+*/ ++ /*@type=Test2*/ t
         . /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop;
-    var /*@ type=num* */ v11 = /*@ type=Test2* */ t
-        . /*@ type=num* */ /*@target=Test2.prop*/ /*@target=Test2.prop*/
-        /*@ type=num* */ prop /*@target=num.+*/ ++;
+    var /*@type=num*/ v11 = /*@type=Test2*/ t
+        . /*@type=num*/ /*@target=Test2.prop*/ /*@target=Test2.prop*/
+        /*@type=num*/ prop /*@target=num.+*/ ++;
   }
 }
 
 class Test3 {
-  double prop;
+  double prop = 0;
+  double? prop2;
 
   static void test3(Test3 t) {
-    var /*@ type=double* */ v3 = t. /*@target=Test3.prop*/ prop = getDouble();
-    var /*@ type=double* */ v6 =
-        /*@ type=Test3* */ /*@target=Test3.prop*/ t. /*@target=Test3.prop*/
-            prop  ??= getDouble();
-    var /*@ type=double* */ v7 =
-        /*@ type=Test3* */ t. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
+    var /*@type=double*/ v3 = t. /*@target=Test3.prop*/ prop = getDouble();
+    var /*@type=double*/ v6 =
+        /*@type=Test3*/ /*@target=Test3.prop2*/ t. /*@target=Test3.prop2*/
+            prop2  ??= getDouble();
+    var /*@type=double*/ v7 =
+        /*@type=Test3*/ t. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
             /*@target=double.+*/ += getInt();
-    var /*@ type=double* */ v8 =
-        /*@ type=Test3* */ t. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
+    var /*@type=double*/ v8 =
+        /*@type=Test3*/ t. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
             /*@target=double.+*/ += getNum();
-    var /*@ type=double* */ v9 =
-        /*@ type=Test3* */ t. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
+    var /*@type=double*/ v9 =
+        /*@type=Test3*/ t. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
             /*@target=double.+*/ += getDouble();
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++ /*@ type=Test3* */ t.
+    var /*@type=double*/ v10 = /*@target=double.+*/ ++ /*@type=Test3*/ t.
         /*@target=Test3.prop*/ /*@target=Test3.prop*/
         prop;
-    var /*@ type=double* */ v11 = /*@ type=Test3* */ t.
-        /*@ type=double* */ /*@target=Test3.prop*/ /*@target=Test3.prop*/
-        /*@ type=double* */ prop /*@target=double.+*/ ++;
+    var /*@type=double*/ v11 = /*@type=Test3*/ t.
+        /*@type=double*/ /*@target=Test3.prop*/ /*@target=Test3.prop*/
+        /*@type=double*/ prop /*@target=double.+*/ ++;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.textual_outline.expect
index d232d96..c8a6c11 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 int getInt() => 0;
@@ -6,17 +5,20 @@
 double getDouble() => 0.0;
 
 class Test1 {
-  int prop;
+  int prop = 0;
+  int? prop2;
   static void test(Test1 t) {}
 }
 
 class Test2 {
-  num prop;
+  num prop = 0;
+  num? prop2;
   static void test(Test2 t) {}
 }
 
 class Test3 {
-  double prop;
+  double prop = 0;
+  double? prop2;
   static void test3(Test3 t) {}
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.textual_outline_modelled.expect
index 5ff5dff..473c5d4 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.textual_outline_modelled.expect
@@ -1,18 +1,20 @@
-// @dart = 2.9
 library test;
 
 class Test1 {
-  int prop;
+  int? prop2;
+  int prop = 0;
   static void test(Test1 t) {}
 }
 
 class Test2 {
-  num prop;
+  num? prop2;
+  num prop = 0;
   static void test(Test2 t) {}
 }
 
 class Test3 {
-  double prop;
+  double? prop2;
+  double prop = 0;
   static void test3(Test3 t) {}
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.expect
index 1e03234..e4784b6 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.expect
@@ -1,88 +1,61 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Test1 extends core::Object {
-  field core::int* prop = null;
-  synthetic constructor •() → self::Test1*
+  field core::int prop = 0;
+  field core::int? prop2 = null;
+  synthetic constructor •() → self::Test1
     : super core::Object::•()
     ;
-  static method test(self::Test1* t) → void {
-    core::int* v1 = t.{self::Test1::prop} = self::getInt();
-    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop}{core::int*} in #t2 == null ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
-    core::int* v7 = let final self::Test1* #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
-    core::int* v10 = let final self::Test1* #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-    core::int* v11 = let final self::Test1* #t5 = t in let final core::int* #t6 = #t5.{self::Test1::prop}{core::int*} in let final core::int* #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1){(core::num*) →* core::int*} in #t6;
+  static method test(self::Test1 t) → void {
+    core::int v1 = t.{self::Test1::prop} = self::getInt();
+    core::int v4 = let final self::Test1 #t1 = t in let final core::int? #t2 = #t1.{self::Test1::prop2}{core::int?} in #t2 == null ?{core::int} #t1.{self::Test1::prop2} = self::getInt() : #t2{core::int};
+    core::int v7 = let final self::Test1 #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = let final self::Test1 #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final self::Test1 #t5 = t in let final core::int #t6 = #t5.{self::Test1::prop}{core::int} in let final core::int #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1){(core::num) → core::int} in #t6;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test2 extends core::Object {
-  field core::num* prop = null;
-  synthetic constructor •() → self::Test2*
+  field core::num prop = 0;
+  field core::num? prop2 = null;
+  synthetic constructor •() → self::Test2
     : super core::Object::•()
     ;
-  static method test(self::Test2* t) → void {
-    core::int* v1 = t.{self::Test2::prop} = self::getInt();
-    core::num* v2 = t.{self::Test2::prop} = self::getNum();
-    core::double* v3 = t.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t8 = t in let final core::num* #t9 = #t8.{self::Test2::prop}{core::num*} in #t9 == null ?{core::num*} #t8.{self::Test2::prop} = self::getInt() : #t9;
-    core::num* v5 = let final self::Test2* #t10 = t in let final core::num* #t11 = #t10.{self::Test2::prop}{core::num*} in #t11 == null ?{core::num*} #t10.{self::Test2::prop} = self::getNum() : #t11;
-    core::num* v6 = let final self::Test2* #t12 = t in let final core::num* #t13 = #t12.{self::Test2::prop}{core::num*} in #t13 == null ?{core::num*} #t12.{self::Test2::prop} = self::getDouble() : #t13;
-    core::num* v7 = let final self::Test2* #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
-    core::num* v8 = let final self::Test2* #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
-    core::num* v9 = let final self::Test2* #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
-    core::num* v10 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
-    core::num* v11 = let final self::Test2* #t18 = t in let final core::num* #t19 = #t18.{self::Test2::prop}{core::num*} in let final core::num* #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1){(core::num*) →* core::num*} in #t19;
+  static method test(self::Test2 t) → void {
+    core::int v1 = t.{self::Test2::prop} = self::getInt();
+    core::num v2 = t.{self::Test2::prop} = self::getNum();
+    core::double v3 = t.{self::Test2::prop} = self::getDouble();
+    core::num v4 = let final self::Test2 #t8 = t in let final core::num? #t9 = #t8.{self::Test2::prop2}{core::num?} in #t9 == null ?{core::num} #t8.{self::Test2::prop2} = self::getInt() : #t9{core::num};
+    core::num v5 = let final self::Test2 #t10 = t in let final core::num? #t11 = #t10.{self::Test2::prop2}{core::num?} in #t11 == null ?{core::num} #t10.{self::Test2::prop2} = self::getNum() : #t11{core::num};
+    core::num v6 = let final self::Test2 #t12 = t in let final core::num? #t13 = #t12.{self::Test2::prop2}{core::num?} in #t13 == null ?{core::num} #t12.{self::Test2::prop2} = self::getDouble() : #t13{core::num};
+    core::num v7 = let final self::Test2 #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = let final self::Test2 #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = let final self::Test2 #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = let final self::Test2 #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final self::Test2 #t18 = t in let final core::num #t19 = #t18.{self::Test2::prop}{core::num} in let final core::num #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1){(core::num) → core::num} in #t19;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test3 extends core::Object {
-  field core::double* prop = null;
-  synthetic constructor •() → self::Test3*
+  field core::double prop = 0.0;
+  field core::double? prop2 = null;
+  synthetic constructor •() → self::Test3
     : super core::Object::•()
     ;
-  static method test3(self::Test3* t) → void {
-    core::double* v3 = t.{self::Test3::prop} = self::getDouble();
-    core::double* v6 = let final self::Test3* #t21 = t in let final core::double* #t22 = #t21.{self::Test3::prop}{core::double*} in #t22 == null ?{core::double*} #t21.{self::Test3::prop} = self::getDouble() : #t22;
-    core::double* v7 = let final self::Test3* #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
-    core::double* v8 = let final self::Test3* #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
-    core::double* v9 = let final self::Test3* #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
-    core::double* v10 = let final self::Test3* #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
-    core::double* v11 = let final self::Test3* #t27 = t in let final core::double* #t28 = #t27.{self::Test3::prop}{core::double*} in let final core::double* #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1){(core::num*) →* core::double*} in #t28;
+  static method test3(self::Test3 t) → void {
+    core::double v3 = t.{self::Test3::prop} = self::getDouble();
+    core::double v6 = let final self::Test3 #t21 = t in let final core::double? #t22 = #t21.{self::Test3::prop2}{core::double?} in #t22 == null ?{core::double} #t21.{self::Test3::prop2} = self::getDouble() : #t22{core::double};
+    core::double v7 = let final self::Test3 #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = let final self::Test3 #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = let final self::Test3 #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = let final self::Test3 #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}{core::double}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final self::Test3 #t27 = t in let final core::double #t28 = #t27.{self::Test3::prop}{core::double} in let final core::double #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1){(core::num) → core::double} in #t28;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method getInt() → core::int*
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.modular.expect
index 1e03234..e4784b6 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.modular.expect
@@ -1,88 +1,61 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Test1 extends core::Object {
-  field core::int* prop = null;
-  synthetic constructor •() → self::Test1*
+  field core::int prop = 0;
+  field core::int? prop2 = null;
+  synthetic constructor •() → self::Test1
     : super core::Object::•()
     ;
-  static method test(self::Test1* t) → void {
-    core::int* v1 = t.{self::Test1::prop} = self::getInt();
-    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop}{core::int*} in #t2 == null ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
-    core::int* v7 = let final self::Test1* #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
-    core::int* v10 = let final self::Test1* #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-    core::int* v11 = let final self::Test1* #t5 = t in let final core::int* #t6 = #t5.{self::Test1::prop}{core::int*} in let final core::int* #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1){(core::num*) →* core::int*} in #t6;
+  static method test(self::Test1 t) → void {
+    core::int v1 = t.{self::Test1::prop} = self::getInt();
+    core::int v4 = let final self::Test1 #t1 = t in let final core::int? #t2 = #t1.{self::Test1::prop2}{core::int?} in #t2 == null ?{core::int} #t1.{self::Test1::prop2} = self::getInt() : #t2{core::int};
+    core::int v7 = let final self::Test1 #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = let final self::Test1 #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final self::Test1 #t5 = t in let final core::int #t6 = #t5.{self::Test1::prop}{core::int} in let final core::int #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1){(core::num) → core::int} in #t6;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test2 extends core::Object {
-  field core::num* prop = null;
-  synthetic constructor •() → self::Test2*
+  field core::num prop = 0;
+  field core::num? prop2 = null;
+  synthetic constructor •() → self::Test2
     : super core::Object::•()
     ;
-  static method test(self::Test2* t) → void {
-    core::int* v1 = t.{self::Test2::prop} = self::getInt();
-    core::num* v2 = t.{self::Test2::prop} = self::getNum();
-    core::double* v3 = t.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t8 = t in let final core::num* #t9 = #t8.{self::Test2::prop}{core::num*} in #t9 == null ?{core::num*} #t8.{self::Test2::prop} = self::getInt() : #t9;
-    core::num* v5 = let final self::Test2* #t10 = t in let final core::num* #t11 = #t10.{self::Test2::prop}{core::num*} in #t11 == null ?{core::num*} #t10.{self::Test2::prop} = self::getNum() : #t11;
-    core::num* v6 = let final self::Test2* #t12 = t in let final core::num* #t13 = #t12.{self::Test2::prop}{core::num*} in #t13 == null ?{core::num*} #t12.{self::Test2::prop} = self::getDouble() : #t13;
-    core::num* v7 = let final self::Test2* #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
-    core::num* v8 = let final self::Test2* #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
-    core::num* v9 = let final self::Test2* #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
-    core::num* v10 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
-    core::num* v11 = let final self::Test2* #t18 = t in let final core::num* #t19 = #t18.{self::Test2::prop}{core::num*} in let final core::num* #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1){(core::num*) →* core::num*} in #t19;
+  static method test(self::Test2 t) → void {
+    core::int v1 = t.{self::Test2::prop} = self::getInt();
+    core::num v2 = t.{self::Test2::prop} = self::getNum();
+    core::double v3 = t.{self::Test2::prop} = self::getDouble();
+    core::num v4 = let final self::Test2 #t8 = t in let final core::num? #t9 = #t8.{self::Test2::prop2}{core::num?} in #t9 == null ?{core::num} #t8.{self::Test2::prop2} = self::getInt() : #t9{core::num};
+    core::num v5 = let final self::Test2 #t10 = t in let final core::num? #t11 = #t10.{self::Test2::prop2}{core::num?} in #t11 == null ?{core::num} #t10.{self::Test2::prop2} = self::getNum() : #t11{core::num};
+    core::num v6 = let final self::Test2 #t12 = t in let final core::num? #t13 = #t12.{self::Test2::prop2}{core::num?} in #t13 == null ?{core::num} #t12.{self::Test2::prop2} = self::getDouble() : #t13{core::num};
+    core::num v7 = let final self::Test2 #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = let final self::Test2 #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = let final self::Test2 #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = let final self::Test2 #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final self::Test2 #t18 = t in let final core::num #t19 = #t18.{self::Test2::prop}{core::num} in let final core::num #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1){(core::num) → core::num} in #t19;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test3 extends core::Object {
-  field core::double* prop = null;
-  synthetic constructor •() → self::Test3*
+  field core::double prop = 0.0;
+  field core::double? prop2 = null;
+  synthetic constructor •() → self::Test3
     : super core::Object::•()
     ;
-  static method test3(self::Test3* t) → void {
-    core::double* v3 = t.{self::Test3::prop} = self::getDouble();
-    core::double* v6 = let final self::Test3* #t21 = t in let final core::double* #t22 = #t21.{self::Test3::prop}{core::double*} in #t22 == null ?{core::double*} #t21.{self::Test3::prop} = self::getDouble() : #t22;
-    core::double* v7 = let final self::Test3* #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
-    core::double* v8 = let final self::Test3* #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
-    core::double* v9 = let final self::Test3* #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
-    core::double* v10 = let final self::Test3* #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
-    core::double* v11 = let final self::Test3* #t27 = t in let final core::double* #t28 = #t27.{self::Test3::prop}{core::double*} in let final core::double* #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1){(core::num*) →* core::double*} in #t28;
+  static method test3(self::Test3 t) → void {
+    core::double v3 = t.{self::Test3::prop} = self::getDouble();
+    core::double v6 = let final self::Test3 #t21 = t in let final core::double? #t22 = #t21.{self::Test3::prop2}{core::double?} in #t22 == null ?{core::double} #t21.{self::Test3::prop2} = self::getDouble() : #t22{core::double};
+    core::double v7 = let final self::Test3 #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = let final self::Test3 #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = let final self::Test3 #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = let final self::Test3 #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}{core::double}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final self::Test3 #t27 = t in let final core::double #t28 = #t27.{self::Test3::prop}{core::double} in let final core::double #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1){(core::num) → core::double} in #t28;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method getInt() → core::int*
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.outline.expect
index fd753c6..fd3445a 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.outline.expect
@@ -1,63 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Test1 extends core::Object {
-  field core::int* prop;
-  synthetic constructor •() → self::Test1*
+  field core::int prop;
+  field core::int? prop2;
+  synthetic constructor •() → self::Test1
     ;
-  static method test(self::Test1* t) → void
+  static method test(self::Test1 t) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test2 extends core::Object {
-  field core::num* prop;
-  synthetic constructor •() → self::Test2*
+  field core::num prop;
+  field core::num? prop2;
+  synthetic constructor •() → self::Test2
     ;
-  static method test(self::Test2* t) → void
+  static method test(self::Test2 t) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test3 extends core::Object {
-  field core::double* prop;
-  synthetic constructor •() → self::Test3*
+  field core::double prop;
+  field core::double? prop2;
+  synthetic constructor •() → self::Test3
     ;
-  static method test3(self::Test3* t) → void
+  static method test3(self::Test3 t) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method getInt() → core::int*
+static method getInt() → core::int
   ;
-static method getNum() → core::num*
+static method getNum() → core::num
   ;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.transformed.expect
index 1e03234..e4784b6 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.transformed.expect
@@ -1,88 +1,61 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Test1 extends core::Object {
-  field core::int* prop = null;
-  synthetic constructor •() → self::Test1*
+  field core::int prop = 0;
+  field core::int? prop2 = null;
+  synthetic constructor •() → self::Test1
     : super core::Object::•()
     ;
-  static method test(self::Test1* t) → void {
-    core::int* v1 = t.{self::Test1::prop} = self::getInt();
-    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop}{core::int*} in #t2 == null ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
-    core::int* v7 = let final self::Test1* #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
-    core::int* v10 = let final self::Test1* #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-    core::int* v11 = let final self::Test1* #t5 = t in let final core::int* #t6 = #t5.{self::Test1::prop}{core::int*} in let final core::int* #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1){(core::num*) →* core::int*} in #t6;
+  static method test(self::Test1 t) → void {
+    core::int v1 = t.{self::Test1::prop} = self::getInt();
+    core::int v4 = let final self::Test1 #t1 = t in let final core::int? #t2 = #t1.{self::Test1::prop2}{core::int?} in #t2 == null ?{core::int} #t1.{self::Test1::prop2} = self::getInt() : #t2{core::int};
+    core::int v7 = let final self::Test1 #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = let final self::Test1 #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final self::Test1 #t5 = t in let final core::int #t6 = #t5.{self::Test1::prop}{core::int} in let final core::int #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1){(core::num) → core::int} in #t6;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test2 extends core::Object {
-  field core::num* prop = null;
-  synthetic constructor •() → self::Test2*
+  field core::num prop = 0;
+  field core::num? prop2 = null;
+  synthetic constructor •() → self::Test2
     : super core::Object::•()
     ;
-  static method test(self::Test2* t) → void {
-    core::int* v1 = t.{self::Test2::prop} = self::getInt();
-    core::num* v2 = t.{self::Test2::prop} = self::getNum();
-    core::double* v3 = t.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t8 = t in let final core::num* #t9 = #t8.{self::Test2::prop}{core::num*} in #t9 == null ?{core::num*} #t8.{self::Test2::prop} = self::getInt() : #t9;
-    core::num* v5 = let final self::Test2* #t10 = t in let final core::num* #t11 = #t10.{self::Test2::prop}{core::num*} in #t11 == null ?{core::num*} #t10.{self::Test2::prop} = self::getNum() : #t11;
-    core::num* v6 = let final self::Test2* #t12 = t in let final core::num* #t13 = #t12.{self::Test2::prop}{core::num*} in #t13 == null ?{core::num*} #t12.{self::Test2::prop} = self::getDouble() : #t13;
-    core::num* v7 = let final self::Test2* #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
-    core::num* v8 = let final self::Test2* #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
-    core::num* v9 = let final self::Test2* #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
-    core::num* v10 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
-    core::num* v11 = let final self::Test2* #t18 = t in let final core::num* #t19 = #t18.{self::Test2::prop}{core::num*} in let final core::num* #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1){(core::num*) →* core::num*} in #t19;
+  static method test(self::Test2 t) → void {
+    core::int v1 = t.{self::Test2::prop} = self::getInt();
+    core::num v2 = t.{self::Test2::prop} = self::getNum();
+    core::double v3 = t.{self::Test2::prop} = self::getDouble();
+    core::num v4 = let final self::Test2 #t8 = t in let final core::num? #t9 = #t8.{self::Test2::prop2}{core::num?} in #t9 == null ?{core::num} #t8.{self::Test2::prop2} = self::getInt() : #t9{core::num};
+    core::num v5 = let final self::Test2 #t10 = t in let final core::num? #t11 = #t10.{self::Test2::prop2}{core::num?} in #t11 == null ?{core::num} #t10.{self::Test2::prop2} = self::getNum() : #t11{core::num};
+    core::num v6 = let final self::Test2 #t12 = t in let final core::num? #t13 = #t12.{self::Test2::prop2}{core::num?} in #t13 == null ?{core::num} #t12.{self::Test2::prop2} = self::getDouble() : #t13{core::num};
+    core::num v7 = let final self::Test2 #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = let final self::Test2 #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = let final self::Test2 #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = let final self::Test2 #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final self::Test2 #t18 = t in let final core::num #t19 = #t18.{self::Test2::prop}{core::num} in let final core::num #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1){(core::num) → core::num} in #t19;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Test3 extends core::Object {
-  field core::double* prop = null;
-  synthetic constructor •() → self::Test3*
+  field core::double prop = 0.0;
+  field core::double? prop2 = null;
+  synthetic constructor •() → self::Test3
     : super core::Object::•()
     ;
-  static method test3(self::Test3* t) → void {
-    core::double* v3 = t.{self::Test3::prop} = self::getDouble();
-    core::double* v6 = let final self::Test3* #t21 = t in let final core::double* #t22 = #t21.{self::Test3::prop}{core::double*} in #t22 == null ?{core::double*} #t21.{self::Test3::prop} = self::getDouble() : #t22;
-    core::double* v7 = let final self::Test3* #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
-    core::double* v8 = let final self::Test3* #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
-    core::double* v9 = let final self::Test3* #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
-    core::double* v10 = let final self::Test3* #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
-    core::double* v11 = let final self::Test3* #t27 = t in let final core::double* #t28 = #t27.{self::Test3::prop}{core::double*} in let final core::double* #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1){(core::num*) →* core::double*} in #t28;
+  static method test3(self::Test3 t) → void {
+    core::double v3 = t.{self::Test3::prop} = self::getDouble();
+    core::double v6 = let final self::Test3 #t21 = t in let final core::double? #t22 = #t21.{self::Test3::prop2}{core::double?} in #t22 == null ?{core::double} #t21.{self::Test3::prop2} = self::getDouble() : #t22{core::double};
+    core::double v7 = let final self::Test3 #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = let final self::Test3 #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = let final self::Test3 #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = let final self::Test3 #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}{core::double}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final self::Test3 #t27 = t in let final core::double #t28 = #t27.{self::Test3::prop}{core::double} in let final core::double #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1){(core::num) → core::double} in #t28;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method getInt() → core::int*
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart
index b6c157a..00ba0ab 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A {
-  int f;
+  int f = 0;
 }
 
 A a = new A();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.textual_outline.expect
index 5efe496..c3350d6 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class A {
-  int f;
+  int f = 0;
 }
 
 A a = new A();
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.textual_outline_modelled.expect
index bd591d5..a23894e 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 A a = new A();
 
 class A {
-  int f;
+  int f = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.expect
index e1508e3..40682a6 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* f = null;
-  synthetic constructor •() → self::A*
+  field core::int f = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field core::int* c = 0;
+static field self::A a = new self::A::•();
+static field core::int c = 0;
 static method main() → dynamic {
   self::a;
   self::c;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.modular.expect
index e1508e3..40682a6 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* f = null;
-  synthetic constructor •() → self::A*
+  field core::int f = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field core::int* c = 0;
+static field self::A a = new self::A::•();
+static field core::int c = 0;
 static method main() → dynamic {
   self::a;
   self::c;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.outline.expect
index 9134274..0e448a9 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* f;
-  synthetic constructor •() → self::A*
+  field core::int f;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a;
-static field core::int* c;
+static field self::A a;
+static field core::int c;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.transformed.expect
index e1508e3..40682a6 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* f = null;
-  synthetic constructor •() → self::A*
+  field core::int f = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field core::int* c = 0;
+static field self::A a = new self::A::•();
+static field core::int c = 0;
 static method main() → dynamic {
   self::a;
   self::c;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart b/pkg/front_end/testcases/inference/infer_assign_to_static.dart
index c09b270..c457353 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static2.dart b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart
new file mode 100644
index 0000000..834b333
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart
@@ -0,0 +1,88 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+
+  static B staticVariable = throw '';
+  static B? staticVariable2;
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+B topLevelVariable = throw '';
+B? topLevelVariable2;
+
+void test_topLevelVariable() {
+  topLevelVariable = /*@typeArgs=B*/ f();
+
+  topLevelVariable2 ??= /*@typeArgs=B?*/ f();
+
+  topLevelVariable /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+  topLevelVariable /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+  topLevelVariable /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+  /*@target=B.-*/ --topLevelVariable;
+
+  topLevelVariable /*@target=B.-*/ --;
+
+  var /*@type=B*/ v1 = topLevelVariable = /*@typeArgs=B*/ f();
+
+  var /*@type=B?*/ v2 = topLevelVariable2 ??= /*@typeArgs=B?*/ f();
+
+  var /*@type=B*/ v3 = topLevelVariable /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+  var /*@type=B*/ v4 = topLevelVariable /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+  var /*@type=C*/ v5 = topLevelVariable /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+  var /*@type=B*/ v6 = /*@target=B.-*/ --topLevelVariable;
+
+  var /*@type=B*/ v7 = /*@type=B*/ topLevelVariable /*@type=B*/ /*@target=B.-*/ --;
+}
+
+void test_staticVariable() {
+  B.staticVariable = /*@typeArgs=B*/ f();
+
+  B.staticVariable2 ??= /*@typeArgs=B?*/ f();
+
+  B.staticVariable /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+  B.staticVariable /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+  B.staticVariable /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+  /*@target=B.-*/ --B.staticVariable;
+
+  B.staticVariable /*@target=B.-*/ --;
+
+  var /*@type=B*/ v1 = B.staticVariable = /*@typeArgs=B*/ f();
+
+  var /*@type=B?*/ v2 = B.staticVariable2 ??= /*@typeArgs=B?*/ f();
+
+  var /*@type=B*/ v3 = B.staticVariable /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+  var /*@type=B*/ v4 = B.staticVariable /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+  var /*@type=C*/ v5 = B.staticVariable /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+  var /*@type=B*/ v6 = /*@target=B.-*/ --B.staticVariable;
+
+  var /*@type=B*/ v7 =
+      B. /*@type=B*/ staticVariable /*@type=B*/ /*@target=B.-*/ --;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.textual_outline.expect
new file mode 100644
index 0000000..ac69ece
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.textual_outline.expect
@@ -0,0 +1,21 @@
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+  static B staticVariable = throw '';
+  static B? staticVariable2;
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+B topLevelVariable = throw '';
+B? topLevelVariable2;
+void test_topLevelVariable() {}
+void test_staticVariable() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..dfd2d70
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.textual_outline_modelled.expect
@@ -0,0 +1,22 @@
+library test;
+
+B? topLevelVariable2;
+B topLevelVariable = throw '';
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+  static B? staticVariable2;
+  static B staticVariable = throw '';
+}
+
+class C extends B {}
+
+main() {}
+void test_staticVariable() {}
+void test_topLevelVariable() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.weak.expect
new file mode 100644
index 0000000..3551711
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.weak.expect
@@ -0,0 +1,66 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  static field self::B staticVariable = throw "";
+  static field self::B? staticVariable2 = null;
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static field self::B topLevelVariable = throw "";
+static field self::B? topLevelVariable2;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test_topLevelVariable() → void {
+  self::topLevelVariable = self::f<self::B>();
+  self::topLevelVariable2 == null ?{self::B?} self::topLevelVariable2 = self::f<self::B?>() : null;
+  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = self::topLevelVariable = self::f<self::B>();
+  self::B? v2 = let final self::B? #t1 = self::topLevelVariable2 in #t1 == null ?{self::B?} self::topLevelVariable2 = self::f<self::B?>() : #t1{self::B};
+  self::B v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t2 = self::topLevelVariable in let final self::B #t3 = self::topLevelVariable = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+}
+static method test_staticVariable() → void {
+  self::B::staticVariable = self::f<self::B>();
+  self::B::staticVariable2 == null ?{self::B?} self::B::staticVariable2 = self::f<self::B?>() : null;
+  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = self::B::staticVariable = self::f<self::B>();
+  self::B? v2 = let final self::B? #t4 = self::B::staticVariable2 in #t4 == null ?{self::B?} self::B::staticVariable2 = self::f<self::B?>() : #t4{self::B};
+  self::B v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t5 = self::B::staticVariable in let final self::B #t6 = self::B::staticVariable = #t5.{self::B::-}(1){(core::int) → self::B} in #t5;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.weak.modular.expect
new file mode 100644
index 0000000..3551711
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  static field self::B staticVariable = throw "";
+  static field self::B? staticVariable2 = null;
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static field self::B topLevelVariable = throw "";
+static field self::B? topLevelVariable2;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test_topLevelVariable() → void {
+  self::topLevelVariable = self::f<self::B>();
+  self::topLevelVariable2 == null ?{self::B?} self::topLevelVariable2 = self::f<self::B?>() : null;
+  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = self::topLevelVariable = self::f<self::B>();
+  self::B? v2 = let final self::B? #t1 = self::topLevelVariable2 in #t1 == null ?{self::B?} self::topLevelVariable2 = self::f<self::B?>() : #t1{self::B};
+  self::B v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t2 = self::topLevelVariable in let final self::B #t3 = self::topLevelVariable = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+}
+static method test_staticVariable() → void {
+  self::B::staticVariable = self::f<self::B>();
+  self::B::staticVariable2 == null ?{self::B?} self::B::staticVariable2 = self::f<self::B?>() : null;
+  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = self::B::staticVariable = self::f<self::B>();
+  self::B? v2 = let final self::B? #t4 = self::B::staticVariable2 in #t4 == null ?{self::B?} self::B::staticVariable2 = self::f<self::B?>() : #t4{self::B};
+  self::B v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t5 = self::B::staticVariable in let final self::B #t6 = self::B::staticVariable = #t5.{self::B::-}(1){(core::int) → self::B} in #t5;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.weak.outline.expect
new file mode 100644
index 0000000..a06bbd0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  static field self::B staticVariable;
+  static field self::B? staticVariable2;
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+static field self::B topLevelVariable;
+static field self::B? topLevelVariable2;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method test_topLevelVariable() → void
+  ;
+static method test_staticVariable() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.weak.transformed.expect
new file mode 100644
index 0000000..3551711
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static2.dart.weak.transformed.expect
@@ -0,0 +1,66 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  static field self::B staticVariable = throw "";
+  static field self::B? staticVariable2 = null;
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static field self::B topLevelVariable = throw "";
+static field self::B? topLevelVariable2;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test_topLevelVariable() → void {
+  self::topLevelVariable = self::f<self::B>();
+  self::topLevelVariable2 == null ?{self::B?} self::topLevelVariable2 = self::f<self::B?>() : null;
+  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = self::topLevelVariable = self::f<self::B>();
+  self::B? v2 = let final self::B? #t1 = self::topLevelVariable2 in #t1 == null ?{self::B?} self::topLevelVariable2 = self::f<self::B?>() : #t1{self::B};
+  self::B v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t2 = self::topLevelVariable in let final self::B #t3 = self::topLevelVariable = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+}
+static method test_staticVariable() → void {
+  self::B::staticVariable = self::f<self::B>();
+  self::B::staticVariable2 == null ?{self::B?} self::B::staticVariable2 = self::f<self::B?>() : null;
+  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = self::B::staticVariable = self::f<self::B>();
+  self::B? v2 = let final self::B? #t4 = self::B::staticVariable2 in #t4 == null ?{self::B?} self::B::staticVariable2 = self::f<self::B?>() : #t4{self::B};
+  self::B v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t5 = self::B::staticVariable in let final self::B #t6 = self::B::staticVariable = #t5.{self::B::-}(1){(core::int) → self::B} in #t5;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart
index 22ed9e5..c8bb726 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,65 +9,63 @@
 num getNum() => 0;
 double getDouble() => 0.0;
 
-int topLevelInt;
-num topLevelNum;
-double topLevelDouble;
+int topLevelInt = 0;
+int? topLevelInt2;
+num topLevelNum = 0;
+num? topLevelNum2;
+double topLevelDouble = 0;
+double? topLevelDouble2;
 
 void test1() {
-  var /*@ type=int* */ v1 = topLevelInt = getInt();
+  var /*@type=int*/ v1 = topLevelInt = getInt();
 
-  var /*@ type=int* */ v4 = topLevelInt  ??= getInt();
+  var /*@type=int*/ v4 = topLevelInt2 ??= getInt();
 
-  var /*@ type=int* */ v7 = topLevelInt /*@target=num.+*/ += getInt();
+  var /*@type=int*/ v7 = topLevelInt  /*@target=num.+*/+= getInt();
 
-  var /*@ type=int* */ v10 = /*@target=num.+*/ ++topLevelInt;
+  var /*@type=int*/ v10 =  /*@target=num.+*/++topLevelInt;
 
-  var /*@ type=int* */ v11 = /*@ type=int* */ topLevelInt
-      /*@ type=int* */ /*@target=num.+*/ ++;
+  var /*@type=int*/ v11 =  /*@type=int*/topLevelInt   /*@target=num.+*//*@type=int*/++;
 }
 
 void test2() {
-  var /*@ type=int* */ v1 = topLevelNum = getInt();
+  var /*@type=int*/ v1 = topLevelNum = getInt();
 
-  var /*@ type=num* */ v2 = topLevelNum = getNum();
+  var /*@type=num*/ v2 = topLevelNum = getNum();
 
-  var /*@ type=double* */ v3 = topLevelNum = getDouble();
+  var /*@type=double*/ v3 = topLevelNum = getDouble();
 
-  var /*@ type=num* */ v4 = topLevelNum  ??= getInt();
+  var /*@type=num*/ v4 = topLevelNum2 ??= getInt();
 
-  var /*@ type=num* */ v5 = topLevelNum  ??= getNum();
+  var /*@type=num*/ v5 = topLevelNum2 ??= getNum();
 
-  var /*@ type=num* */ v6 = topLevelNum  ??= getDouble();
+  var /*@type=num*/ v6 = topLevelNum2 ??= getDouble();
 
-  var /*@ type=num* */ v7 = topLevelNum /*@target=num.+*/ += getInt();
+  var /*@type=num*/ v7 = topLevelNum /*@target=num.+*/ += getInt();
 
-  var /*@ type=num* */ v8 = topLevelNum /*@target=num.+*/ += getNum();
+  var /*@type=num*/ v8 = topLevelNum /*@target=num.+*/ += getNum();
 
-  var /*@ type=num* */ v9 = topLevelNum /*@target=num.+*/ += getDouble();
+  var /*@type=double*/ v9 = topLevelNum /*@target=num.+*/ += getDouble();
 
-  var /*@ type=num* */ v10 = /*@target=num.+*/ ++topLevelNum;
+  var /*@type=num*/ v10 = /*@target=num.+*/ ++topLevelNum;
 
-  var /*@ type=num* */ v11 = /*@ type=num* */ topLevelNum
-      /*@ type=num* */ /*@target=num.+*/ ++;
+  var /*@type=num*/ v11 = /*@type=num*/ topLevelNum /*@type=num*/ /*@target=num.+*/ ++;
 }
 
 void test3() {
-  var /*@ type=double* */ v3 = topLevelDouble = getDouble();
+  var /*@type=double*/ v3 = topLevelDouble = getDouble();
 
-  var /*@ type=double* */ v6 =
-      topLevelDouble  ??= getDouble();
+  var /*@type=double*/ v6 = topLevelDouble2 ??= getDouble();
 
-  var /*@ type=double* */ v7 = topLevelDouble /*@target=double.+*/ += getInt();
+  var /*@type=double*/ v7 = topLevelDouble /*@target=double.+*/ += getInt();
 
-  var /*@ type=double* */ v8 = topLevelDouble /*@target=double.+*/ += getNum();
+  var /*@type=double*/ v8 = topLevelDouble /*@target=double.+*/ += getNum();
 
-  var /*@ type=double* */ v9 =
-      topLevelDouble /*@target=double.+*/ += getDouble();
+  var /*@type=double*/ v9 = topLevelDouble /*@target=double.+*/ += getDouble();
 
-  var /*@ type=double* */ v10 = /*@target=double.+*/ ++topLevelDouble;
+  var /*@type=double*/ v10 = /*@target=double.+*/ ++topLevelDouble;
 
-  var /*@ type=double* */ v11 = /*@ type=double* */ topLevelDouble
-      /*@ type=double* */ /*@target=double.+*/ ++;
+  var /*@type=double*/ v11 = /*@type=double*/ topLevelDouble /*@type=double*/ /*@target=double.+*/ ++;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.textual_outline.expect
index a6d579a..a9a31ea 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.textual_outline.expect
@@ -1,12 +1,14 @@
-// @dart = 2.9
 library test;
 
 int getInt() => 0;
 num getNum() => 0;
 double getDouble() => 0.0;
-int topLevelInt;
-num topLevelNum;
-double topLevelDouble;
+int topLevelInt = 0;
+int? topLevelInt2;
+num topLevelNum = 0;
+num? topLevelNum2;
+double topLevelDouble = 0;
+double? topLevelDouble2;
 void test1() {}
 void test2() {}
 void test3() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.textual_outline_modelled.expect
index 2e57621..2d4dbdf 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.textual_outline_modelled.expect
@@ -1,13 +1,15 @@
-// @dart = 2.9
 library test;
 
+double? topLevelDouble2;
 double getDouble() => 0.0;
-double topLevelDouble;
+double topLevelDouble = 0;
+int? topLevelInt2;
 int getInt() => 0;
-int topLevelInt;
+int topLevelInt = 0;
 main() {}
+num? topLevelNum2;
 num getNum() => 0;
-num topLevelNum;
+num topLevelNum = 0;
 void test1() {}
 void test2() {}
 void test3() {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.expect
index 4130e63..4aa81b0 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.expect
@@ -1,43 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* topLevelInt;
-static field core::num* topLevelNum;
-static field core::double* topLevelDouble;
-static method getInt() → core::int*
+static field core::int topLevelInt = 0;
+static field core::int? topLevelInt2;
+static field core::num topLevelNum = 0;
+static field core::num? topLevelNum2;
+static field core::double topLevelDouble = 0.0;
+static field core::double? topLevelDouble2;
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
 static method test1() → void {
-  core::int* v1 = self::topLevelInt = self::getInt();
-  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1 == null ?{core::int*} self::topLevelInt = self::getInt() : #t1;
-  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
-  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num*) →* core::int*};
-  core::int* v11 = let final core::int* #t2 = self::topLevelInt in let final core::int* #t3 = self::topLevelInt = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+  core::int v1 = self::topLevelInt = self::getInt();
+  core::int v4 = let final core::int? #t1 = self::topLevelInt2 in #t1 == null ?{core::int} self::topLevelInt2 = self::getInt() : #t1{core::int};
+  core::int v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num) → core::int};
+  core::int v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num) → core::int};
+  core::int v11 = let final core::int #t2 = self::topLevelInt in let final core::int #t3 = self::topLevelInt = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
 }
 static method test2() → void {
-  core::int* v1 = self::topLevelNum = self::getInt();
-  core::num* v2 = self::topLevelNum = self::getNum();
-  core::double* v3 = self::topLevelNum = self::getDouble();
-  core::num* v4 = let final core::num* #t4 = self::topLevelNum in #t4 == null ?{core::num*} self::topLevelNum = self::getInt() : #t4;
-  core::num* v5 = let final core::num* #t5 = self::topLevelNum in #t5 == null ?{core::num*} self::topLevelNum = self::getNum() : #t5;
-  core::num* v6 = let final core::num* #t6 = self::topLevelNum in #t6 == null ?{core::num*} self::topLevelNum = self::getDouble() : #t6;
-  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
-  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
-  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
-  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num*) →* core::num*};
-  core::num* v11 = let final core::num* #t7 = self::topLevelNum in let final core::num* #t8 = self::topLevelNum = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+  core::int v1 = self::topLevelNum = self::getInt();
+  core::num v2 = self::topLevelNum = self::getNum();
+  core::double v3 = self::topLevelNum = self::getDouble();
+  core::num v4 = let final core::num? #t4 = self::topLevelNum2 in #t4 == null ?{core::num} self::topLevelNum2 = self::getInt() : #t4{core::num};
+  core::num v5 = let final core::num? #t5 = self::topLevelNum2 in #t5 == null ?{core::num} self::topLevelNum2 = self::getNum() : #t5{core::num};
+  core::num v6 = let final core::num? #t6 = self::topLevelNum2 in #t6 == null ?{core::num} self::topLevelNum2 = self::getDouble() : #t6{core::num};
+  core::num v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num) → core::num};
+  core::num v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num) → core::num};
+  core::double v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num) → core::double};
+  core::num v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num) → core::num};
+  core::num v11 = let final core::num #t7 = self::topLevelNum in let final core::num #t8 = self::topLevelNum = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
 }
 static method test3() → void {
-  core::double* v3 = self::topLevelDouble = self::getDouble();
-  core::double* v6 = let final core::double* #t9 = self::topLevelDouble in #t9 == null ?{core::double*} self::topLevelDouble = self::getDouble() : #t9;
-  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
-  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
-  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
-  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num*) →* core::double*};
-  core::double* v11 = let final core::double* #t10 = self::topLevelDouble in let final core::double* #t11 = self::topLevelDouble = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+  core::double v3 = self::topLevelDouble = self::getDouble();
+  core::double v6 = let final core::double? #t9 = self::topLevelDouble2 in #t9 == null ?{core::double} self::topLevelDouble2 = self::getDouble() : #t9{core::double};
+  core::double v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num) → core::double};
+  core::double v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num) → core::double};
+  core::double v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num) → core::double};
+  core::double v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num) → core::double};
+  core::double v11 = let final core::double #t10 = self::topLevelDouble in let final core::double #t11 = self::topLevelDouble = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.modular.expect
index 4130e63..4aa81b0 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.modular.expect
@@ -1,43 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* topLevelInt;
-static field core::num* topLevelNum;
-static field core::double* topLevelDouble;
-static method getInt() → core::int*
+static field core::int topLevelInt = 0;
+static field core::int? topLevelInt2;
+static field core::num topLevelNum = 0;
+static field core::num? topLevelNum2;
+static field core::double topLevelDouble = 0.0;
+static field core::double? topLevelDouble2;
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
 static method test1() → void {
-  core::int* v1 = self::topLevelInt = self::getInt();
-  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1 == null ?{core::int*} self::topLevelInt = self::getInt() : #t1;
-  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
-  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num*) →* core::int*};
-  core::int* v11 = let final core::int* #t2 = self::topLevelInt in let final core::int* #t3 = self::topLevelInt = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+  core::int v1 = self::topLevelInt = self::getInt();
+  core::int v4 = let final core::int? #t1 = self::topLevelInt2 in #t1 == null ?{core::int} self::topLevelInt2 = self::getInt() : #t1{core::int};
+  core::int v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num) → core::int};
+  core::int v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num) → core::int};
+  core::int v11 = let final core::int #t2 = self::topLevelInt in let final core::int #t3 = self::topLevelInt = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
 }
 static method test2() → void {
-  core::int* v1 = self::topLevelNum = self::getInt();
-  core::num* v2 = self::topLevelNum = self::getNum();
-  core::double* v3 = self::topLevelNum = self::getDouble();
-  core::num* v4 = let final core::num* #t4 = self::topLevelNum in #t4 == null ?{core::num*} self::topLevelNum = self::getInt() : #t4;
-  core::num* v5 = let final core::num* #t5 = self::topLevelNum in #t5 == null ?{core::num*} self::topLevelNum = self::getNum() : #t5;
-  core::num* v6 = let final core::num* #t6 = self::topLevelNum in #t6 == null ?{core::num*} self::topLevelNum = self::getDouble() : #t6;
-  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
-  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
-  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
-  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num*) →* core::num*};
-  core::num* v11 = let final core::num* #t7 = self::topLevelNum in let final core::num* #t8 = self::topLevelNum = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+  core::int v1 = self::topLevelNum = self::getInt();
+  core::num v2 = self::topLevelNum = self::getNum();
+  core::double v3 = self::topLevelNum = self::getDouble();
+  core::num v4 = let final core::num? #t4 = self::topLevelNum2 in #t4 == null ?{core::num} self::topLevelNum2 = self::getInt() : #t4{core::num};
+  core::num v5 = let final core::num? #t5 = self::topLevelNum2 in #t5 == null ?{core::num} self::topLevelNum2 = self::getNum() : #t5{core::num};
+  core::num v6 = let final core::num? #t6 = self::topLevelNum2 in #t6 == null ?{core::num} self::topLevelNum2 = self::getDouble() : #t6{core::num};
+  core::num v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num) → core::num};
+  core::num v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num) → core::num};
+  core::double v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num) → core::double};
+  core::num v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num) → core::num};
+  core::num v11 = let final core::num #t7 = self::topLevelNum in let final core::num #t8 = self::topLevelNum = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
 }
 static method test3() → void {
-  core::double* v3 = self::topLevelDouble = self::getDouble();
-  core::double* v6 = let final core::double* #t9 = self::topLevelDouble in #t9 == null ?{core::double*} self::topLevelDouble = self::getDouble() : #t9;
-  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
-  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
-  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
-  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num*) →* core::double*};
-  core::double* v11 = let final core::double* #t10 = self::topLevelDouble in let final core::double* #t11 = self::topLevelDouble = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+  core::double v3 = self::topLevelDouble = self::getDouble();
+  core::double v6 = let final core::double? #t9 = self::topLevelDouble2 in #t9 == null ?{core::double} self::topLevelDouble2 = self::getDouble() : #t9{core::double};
+  core::double v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num) → core::double};
+  core::double v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num) → core::double};
+  core::double v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num) → core::double};
+  core::double v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num) → core::double};
+  core::double v11 = let final core::double #t10 = self::topLevelDouble in let final core::double #t11 = self::topLevelDouble = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.outline.expect
index ddb758d..8cba366 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.outline.expect
@@ -1,15 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* topLevelInt;
-static field core::num* topLevelNum;
-static field core::double* topLevelDouble;
-static method getInt() → core::int*
+static field core::int topLevelInt;
+static field core::int? topLevelInt2;
+static field core::num topLevelNum;
+static field core::num? topLevelNum2;
+static field core::double topLevelDouble;
+static field core::double? topLevelDouble2;
+static method getInt() → core::int
   ;
-static method getNum() → core::num*
+static method getNum() → core::num
   ;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   ;
 static method test1() → void
   ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.transformed.expect
index 4130e63..4aa81b0 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.transformed.expect
@@ -1,43 +1,46 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* topLevelInt;
-static field core::num* topLevelNum;
-static field core::double* topLevelDouble;
-static method getInt() → core::int*
+static field core::int topLevelInt = 0;
+static field core::int? topLevelInt2;
+static field core::num topLevelNum = 0;
+static field core::num? topLevelNum2;
+static field core::double topLevelDouble = 0.0;
+static field core::double? topLevelDouble2;
+static method getInt() → core::int
   return 0;
-static method getNum() → core::num*
+static method getNum() → core::num
   return 0;
-static method getDouble() → core::double*
+static method getDouble() → core::double
   return 0.0;
 static method test1() → void {
-  core::int* v1 = self::topLevelInt = self::getInt();
-  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1 == null ?{core::int*} self::topLevelInt = self::getInt() : #t1;
-  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
-  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num*) →* core::int*};
-  core::int* v11 = let final core::int* #t2 = self::topLevelInt in let final core::int* #t3 = self::topLevelInt = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+  core::int v1 = self::topLevelInt = self::getInt();
+  core::int v4 = let final core::int? #t1 = self::topLevelInt2 in #t1 == null ?{core::int} self::topLevelInt2 = self::getInt() : #t1{core::int};
+  core::int v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num) → core::int};
+  core::int v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num) → core::int};
+  core::int v11 = let final core::int #t2 = self::topLevelInt in let final core::int #t3 = self::topLevelInt = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
 }
 static method test2() → void {
-  core::int* v1 = self::topLevelNum = self::getInt();
-  core::num* v2 = self::topLevelNum = self::getNum();
-  core::double* v3 = self::topLevelNum = self::getDouble();
-  core::num* v4 = let final core::num* #t4 = self::topLevelNum in #t4 == null ?{core::num*} self::topLevelNum = self::getInt() : #t4;
-  core::num* v5 = let final core::num* #t5 = self::topLevelNum in #t5 == null ?{core::num*} self::topLevelNum = self::getNum() : #t5;
-  core::num* v6 = let final core::num* #t6 = self::topLevelNum in #t6 == null ?{core::num*} self::topLevelNum = self::getDouble() : #t6;
-  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
-  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
-  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
-  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num*) →* core::num*};
-  core::num* v11 = let final core::num* #t7 = self::topLevelNum in let final core::num* #t8 = self::topLevelNum = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+  core::int v1 = self::topLevelNum = self::getInt();
+  core::num v2 = self::topLevelNum = self::getNum();
+  core::double v3 = self::topLevelNum = self::getDouble();
+  core::num v4 = let final core::num? #t4 = self::topLevelNum2 in #t4 == null ?{core::num} self::topLevelNum2 = self::getInt() : #t4{core::num};
+  core::num v5 = let final core::num? #t5 = self::topLevelNum2 in #t5 == null ?{core::num} self::topLevelNum2 = self::getNum() : #t5{core::num};
+  core::num v6 = let final core::num? #t6 = self::topLevelNum2 in #t6 == null ?{core::num} self::topLevelNum2 = self::getDouble() : #t6{core::num};
+  core::num v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num) → core::num};
+  core::num v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num) → core::num};
+  core::double v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num) → core::double};
+  core::num v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num) → core::num};
+  core::num v11 = let final core::num #t7 = self::topLevelNum in let final core::num #t8 = self::topLevelNum = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
 }
 static method test3() → void {
-  core::double* v3 = self::topLevelDouble = self::getDouble();
-  core::double* v6 = let final core::double* #t9 = self::topLevelDouble in #t9 == null ?{core::double*} self::topLevelDouble = self::getDouble() : #t9;
-  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
-  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
-  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
-  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num*) →* core::double*};
-  core::double* v11 = let final core::double* #t10 = self::topLevelDouble in let final core::double* #t11 = self::topLevelDouble = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+  core::double v3 = self::topLevelDouble = self::getDouble();
+  core::double v6 = let final core::double? #t9 = self::topLevelDouble2 in #t9 == null ?{core::double} self::topLevelDouble2 = self::getDouble() : #t9{core::double};
+  core::double v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num) → core::double};
+  core::double v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num) → core::double};
+  core::double v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num) → core::double};
+  core::double v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num) → core::double};
+  core::double v11 = let final core::double #t10 = self::topLevelDouble in let final core::double #t11 = self::topLevelDouble = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart b/pkg/front_end/testcases/inference/infer_binary_custom.dart
index be2ad1d..b84b3ae 100644
--- a/pkg/front_end/testcases/inference/infer_binary_custom.dart
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.textual_outline.expect
index 07b6051..80ca252 100644
--- a/pkg/front_end/testcases/inference/infer_binary_custom.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.textual_outline_modelled.expect
index 9911480..0b2556e 100644
--- a/pkg/front_end/testcases/inference/infer_binary_custom.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.expect
index 2fd7b9e..edffbfc 100644
--- a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(dynamic other) → core::int*
+  operator +(dynamic other) → core::int
     return 1;
-  operator -(dynamic other) → core::double*
+  operator -(dynamic other) → core::double
     return 2.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_add = new self::A::•().{self::A::+}("foo"){(dynamic) →* core::int*};
-static field core::double* v_minus = new self::A::•().{self::A::-}("bar"){(dynamic) →* core::double*};
+static field core::int v_add = new self::A::•().{self::A::+}("foo"){(dynamic) → core::int};
+static field core::double v_minus = new self::A::•().{self::A::-}("bar"){(dynamic) → core::double};
 static method main() → dynamic {
   self::v_add;
   self::v_minus;
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.modular.expect
index 2fd7b9e..edffbfc 100644
--- a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(dynamic other) → core::int*
+  operator +(dynamic other) → core::int
     return 1;
-  operator -(dynamic other) → core::double*
+  operator -(dynamic other) → core::double
     return 2.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_add = new self::A::•().{self::A::+}("foo"){(dynamic) →* core::int*};
-static field core::double* v_minus = new self::A::•().{self::A::-}("bar"){(dynamic) →* core::double*};
+static field core::int v_add = new self::A::•().{self::A::+}("foo"){(dynamic) → core::int};
+static field core::double v_minus = new self::A::•().{self::A::-}("bar"){(dynamic) → core::double};
 static method main() → dynamic {
   self::v_add;
   self::v_minus;
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.outline.expect
index 0a4d5ae..12424ab 100644
--- a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  operator +(dynamic other) → core::int*
+  operator +(dynamic other) → core::int
     ;
-  operator -(dynamic other) → core::double*
+  operator -(dynamic other) → core::double
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_add;
-static field core::double* v_minus;
+static field core::int v_add;
+static field core::double v_minus;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.transformed.expect
index 2fd7b9e..edffbfc 100644
--- a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.transformed.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(dynamic other) → core::int*
+  operator +(dynamic other) → core::int
     return 1;
-  operator -(dynamic other) → core::double*
+  operator -(dynamic other) → core::double
     return 2.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_add = new self::A::•().{self::A::+}("foo"){(dynamic) →* core::int*};
-static field core::double* v_minus = new self::A::•().{self::A::-}("bar"){(dynamic) →* core::double*};
+static field core::int v_add = new self::A::•().{self::A::+}("foo"){(dynamic) → core::int};
+static field core::double v_minus = new self::A::•().{self::A::-}("bar"){(dynamic) → core::double};
 static method main() → dynamic {
   self::v_add;
   self::v_minus;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_double.dart b/pkg/front_end/testcases/inference/infer_binary_double_double.dart
index 332b672..701ec6b 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_double.dart
+++ b/pkg/front_end/testcases/inference/infer_binary_double_double.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.textual_outline.expect
index 2e2c25e..afb98b1 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var a_equal = 1.0 == 2.0;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.textual_outline_modelled.expect
index cb2a486..6ca4cc2 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.expect b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.expect
index 38be484..0ee73da 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2.0;
-static field core::bool* a_notEqual = !(1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2.0);
-static field core::double* a_add = 1.0.{core::double::+}(2.0){(core::num*) →* core::double*};
-static field core::double* a_subtract = 1.0.{core::double::-}(2.0){(core::num*) →* core::double*};
-static field core::double* a_multiply = 1.0.{core::double::*}(2.0){(core::num*) →* core::double*};
-static field core::double* a_divide = 1.0.{core::double::/}(2.0){(core::num*) →* core::double*};
-static field core::int* a_floorDivide = 1.0.{core::double::~/}(2.0){(core::num*) →* core::int*};
-static field core::bool* a_greater = 1.0.{core::num::>}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_less = 1.0.{core::num::<}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2.0){(core::num*) →* core::bool*};
-static field core::double* a_modulo = 1.0.{core::double::%}(2.0){(core::num*) →* core::double*};
+static field core::bool a_equal = 1.0 =={core::num::==}{(core::Object) → core::bool} 2.0;
+static field core::bool a_notEqual = !(1.0 =={core::num::==}{(core::Object) → core::bool} 2.0);
+static field core::double a_add = 1.0.{core::double::+}(2.0){(core::num) → core::double};
+static field core::double a_subtract = 1.0.{core::double::-}(2.0){(core::num) → core::double};
+static field core::double a_multiply = 1.0.{core::double::*}(2.0){(core::num) → core::double};
+static field core::double a_divide = 1.0.{core::double::/}(2.0){(core::num) → core::double};
+static field core::int a_floorDivide = 1.0.{core::double::~/}(2.0){(core::num) → core::int};
+static field core::bool a_greater = 1.0.{core::num::>}(2.0){(core::num) → core::bool};
+static field core::bool a_less = 1.0.{core::num::<}(2.0){(core::num) → core::bool};
+static field core::bool a_greaterEqual = 1.0.{core::num::>=}(2.0){(core::num) → core::bool};
+static field core::bool a_lessEqual = 1.0.{core::num::<=}(2.0){(core::num) → core::bool};
+static field core::double a_modulo = 1.0.{core::double::%}(2.0){(core::num) → core::double};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.modular.expect
index 38be484..0ee73da 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.modular.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2.0;
-static field core::bool* a_notEqual = !(1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2.0);
-static field core::double* a_add = 1.0.{core::double::+}(2.0){(core::num*) →* core::double*};
-static field core::double* a_subtract = 1.0.{core::double::-}(2.0){(core::num*) →* core::double*};
-static field core::double* a_multiply = 1.0.{core::double::*}(2.0){(core::num*) →* core::double*};
-static field core::double* a_divide = 1.0.{core::double::/}(2.0){(core::num*) →* core::double*};
-static field core::int* a_floorDivide = 1.0.{core::double::~/}(2.0){(core::num*) →* core::int*};
-static field core::bool* a_greater = 1.0.{core::num::>}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_less = 1.0.{core::num::<}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2.0){(core::num*) →* core::bool*};
-static field core::double* a_modulo = 1.0.{core::double::%}(2.0){(core::num*) →* core::double*};
+static field core::bool a_equal = 1.0 =={core::num::==}{(core::Object) → core::bool} 2.0;
+static field core::bool a_notEqual = !(1.0 =={core::num::==}{(core::Object) → core::bool} 2.0);
+static field core::double a_add = 1.0.{core::double::+}(2.0){(core::num) → core::double};
+static field core::double a_subtract = 1.0.{core::double::-}(2.0){(core::num) → core::double};
+static field core::double a_multiply = 1.0.{core::double::*}(2.0){(core::num) → core::double};
+static field core::double a_divide = 1.0.{core::double::/}(2.0){(core::num) → core::double};
+static field core::int a_floorDivide = 1.0.{core::double::~/}(2.0){(core::num) → core::int};
+static field core::bool a_greater = 1.0.{core::num::>}(2.0){(core::num) → core::bool};
+static field core::bool a_less = 1.0.{core::num::<}(2.0){(core::num) → core::bool};
+static field core::bool a_greaterEqual = 1.0.{core::num::>=}(2.0){(core::num) → core::bool};
+static field core::bool a_lessEqual = 1.0.{core::num::<=}(2.0){(core::num) → core::bool};
+static field core::double a_modulo = 1.0.{core::double::%}(2.0){(core::num) → core::double};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.outline.expect
index fc1ae00..9baa9a0 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.outline.expect
@@ -1,18 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal;
-static field core::bool* a_notEqual;
-static field core::double* a_add;
-static field core::double* a_subtract;
-static field core::double* a_multiply;
-static field core::double* a_divide;
-static field core::int* a_floorDivide;
-static field core::bool* a_greater;
-static field core::bool* a_less;
-static field core::bool* a_greaterEqual;
-static field core::bool* a_lessEqual;
-static field core::double* a_modulo;
+static field core::bool a_equal;
+static field core::bool a_notEqual;
+static field core::double a_add;
+static field core::double a_subtract;
+static field core::double a_multiply;
+static field core::double a_divide;
+static field core::int a_floorDivide;
+static field core::bool a_greater;
+static field core::bool a_less;
+static field core::bool a_greaterEqual;
+static field core::bool a_lessEqual;
+static field core::double a_modulo;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.transformed.expect
index b96f167..8a4256f 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.transformed.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2.0;
-static field core::bool* a_notEqual = !(1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2.0);
-static field core::double* a_add = 1.0.{core::double::+}(2.0){(core::num*) →* core::double*};
-static field core::double* a_subtract = 1.0.{core::double::-}(2.0){(core::num*) →* core::double*};
-static field core::double* a_multiply = 1.0.{core::double::*}(2.0){(core::num*) →* core::double*};
-static field core::double* a_divide = 1.0.{core::double::/}(2.0){(core::num*) →* core::double*};
-static field core::int* a_floorDivide = 1.0.{core::double::~/}(2.0){(core::num*) →* core::int*};
-static field core::bool* a_greater = 1.0.{core::num::>}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_less = 1.0.{core::num::<}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2.0){(core::num*) →* core::bool*};
-static field core::double* a_modulo = 1.0.{core::double::%}(2.0){(core::num*) →* core::double*};
+static field core::bool a_equal = 1.0 =={core::num::==}{(core::Object) → core::bool} 2.0;
+static field core::bool a_notEqual = !(1.0 =={core::num::==}{(core::Object) → core::bool} 2.0);
+static field core::double a_add = 1.0.{core::double::+}(2.0){(core::num) → core::double};
+static field core::double a_subtract = 1.0.{core::double::-}(2.0){(core::num) → core::double};
+static field core::double a_multiply = 1.0.{core::double::*}(2.0){(core::num) → core::double};
+static field core::double a_divide = 1.0.{core::double::/}(2.0){(core::num) → core::double};
+static field core::int a_floorDivide = 1.0.{core::double::~/}(2.0){(core::num) → core::int};
+static field core::bool a_greater = 1.0.{core::num::>}(2.0){(core::num) → core::bool};
+static field core::bool a_less = 1.0.{core::num::<}(2.0){(core::num) → core::bool};
+static field core::bool a_greaterEqual = 1.0.{core::num::>=}(2.0){(core::num) → core::bool};
+static field core::bool a_lessEqual = 1.0.{core::num::<=}(2.0){(core::num) → core::bool};
+static field core::double a_modulo = 1.0.{core::double::%}(2.0){(core::num) → core::double};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_int.dart b/pkg/front_end/testcases/inference/infer_binary_double_int.dart
index be0a646..45f02a8 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_int.dart
+++ b/pkg/front_end/testcases/inference/infer_binary_double_int.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.textual_outline.expect
index 763ab9b..5b6dace 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var a_equal = 1.0 == 2;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.textual_outline_modelled.expect
index 91f5a73..e8ac0d0 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.expect b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.expect
index 1f62c1e..c1c1474 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2;
-static field core::bool* a_notEqual = !(1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2);
-static field core::double* a_add = 1.0.{core::double::+}(2){(core::num*) →* core::double*};
-static field core::double* a_subtract = 1.0.{core::double::-}(2){(core::num*) →* core::double*};
-static field core::double* a_multiply = 1.0.{core::double::*}(2){(core::num*) →* core::double*};
-static field core::double* a_divide = 1.0.{core::double::/}(2){(core::num*) →* core::double*};
-static field core::int* a_floorDivide = 1.0.{core::double::~/}(2){(core::num*) →* core::int*};
-static field core::bool* a_greater = 1.0.{core::num::>}(2){(core::num*) →* core::bool*};
-static field core::bool* a_less = 1.0.{core::num::<}(2){(core::num*) →* core::bool*};
-static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2){(core::num*) →* core::bool*};
-static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2){(core::num*) →* core::bool*};
-static field core::double* a_modulo = 1.0.{core::double::%}(2){(core::num*) →* core::double*};
+static field core::bool a_equal = 1.0 =={core::num::==}{(core::Object) → core::bool} 2;
+static field core::bool a_notEqual = !(1.0 =={core::num::==}{(core::Object) → core::bool} 2);
+static field core::double a_add = 1.0.{core::double::+}(2){(core::num) → core::double};
+static field core::double a_subtract = 1.0.{core::double::-}(2){(core::num) → core::double};
+static field core::double a_multiply = 1.0.{core::double::*}(2){(core::num) → core::double};
+static field core::double a_divide = 1.0.{core::double::/}(2){(core::num) → core::double};
+static field core::int a_floorDivide = 1.0.{core::double::~/}(2){(core::num) → core::int};
+static field core::bool a_greater = 1.0.{core::num::>}(2){(core::num) → core::bool};
+static field core::bool a_less = 1.0.{core::num::<}(2){(core::num) → core::bool};
+static field core::bool a_greaterEqual = 1.0.{core::num::>=}(2){(core::num) → core::bool};
+static field core::bool a_lessEqual = 1.0.{core::num::<=}(2){(core::num) → core::bool};
+static field core::double a_modulo = 1.0.{core::double::%}(2){(core::num) → core::double};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.modular.expect
index 1f62c1e..c1c1474 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.modular.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2;
-static field core::bool* a_notEqual = !(1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2);
-static field core::double* a_add = 1.0.{core::double::+}(2){(core::num*) →* core::double*};
-static field core::double* a_subtract = 1.0.{core::double::-}(2){(core::num*) →* core::double*};
-static field core::double* a_multiply = 1.0.{core::double::*}(2){(core::num*) →* core::double*};
-static field core::double* a_divide = 1.0.{core::double::/}(2){(core::num*) →* core::double*};
-static field core::int* a_floorDivide = 1.0.{core::double::~/}(2){(core::num*) →* core::int*};
-static field core::bool* a_greater = 1.0.{core::num::>}(2){(core::num*) →* core::bool*};
-static field core::bool* a_less = 1.0.{core::num::<}(2){(core::num*) →* core::bool*};
-static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2){(core::num*) →* core::bool*};
-static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2){(core::num*) →* core::bool*};
-static field core::double* a_modulo = 1.0.{core::double::%}(2){(core::num*) →* core::double*};
+static field core::bool a_equal = 1.0 =={core::num::==}{(core::Object) → core::bool} 2;
+static field core::bool a_notEqual = !(1.0 =={core::num::==}{(core::Object) → core::bool} 2);
+static field core::double a_add = 1.0.{core::double::+}(2){(core::num) → core::double};
+static field core::double a_subtract = 1.0.{core::double::-}(2){(core::num) → core::double};
+static field core::double a_multiply = 1.0.{core::double::*}(2){(core::num) → core::double};
+static field core::double a_divide = 1.0.{core::double::/}(2){(core::num) → core::double};
+static field core::int a_floorDivide = 1.0.{core::double::~/}(2){(core::num) → core::int};
+static field core::bool a_greater = 1.0.{core::num::>}(2){(core::num) → core::bool};
+static field core::bool a_less = 1.0.{core::num::<}(2){(core::num) → core::bool};
+static field core::bool a_greaterEqual = 1.0.{core::num::>=}(2){(core::num) → core::bool};
+static field core::bool a_lessEqual = 1.0.{core::num::<=}(2){(core::num) → core::bool};
+static field core::double a_modulo = 1.0.{core::double::%}(2){(core::num) → core::double};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.outline.expect
index fc1ae00..9baa9a0 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.outline.expect
@@ -1,18 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal;
-static field core::bool* a_notEqual;
-static field core::double* a_add;
-static field core::double* a_subtract;
-static field core::double* a_multiply;
-static field core::double* a_divide;
-static field core::int* a_floorDivide;
-static field core::bool* a_greater;
-static field core::bool* a_less;
-static field core::bool* a_greaterEqual;
-static field core::bool* a_lessEqual;
-static field core::double* a_modulo;
+static field core::bool a_equal;
+static field core::bool a_notEqual;
+static field core::double a_add;
+static field core::double a_subtract;
+static field core::double a_multiply;
+static field core::double a_divide;
+static field core::int a_floorDivide;
+static field core::bool a_greater;
+static field core::bool a_less;
+static field core::bool a_greaterEqual;
+static field core::bool a_lessEqual;
+static field core::double a_modulo;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.transformed.expect
index 046802e..a91ca8f 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.transformed.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2;
-static field core::bool* a_notEqual = !(1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2);
-static field core::double* a_add = 1.0.{core::double::+}(2){(core::num*) →* core::double*};
-static field core::double* a_subtract = 1.0.{core::double::-}(2){(core::num*) →* core::double*};
-static field core::double* a_multiply = 1.0.{core::double::*}(2){(core::num*) →* core::double*};
-static field core::double* a_divide = 1.0.{core::double::/}(2){(core::num*) →* core::double*};
-static field core::int* a_floorDivide = 1.0.{core::double::~/}(2){(core::num*) →* core::int*};
-static field core::bool* a_greater = 1.0.{core::num::>}(2){(core::num*) →* core::bool*};
-static field core::bool* a_less = 1.0.{core::num::<}(2){(core::num*) →* core::bool*};
-static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2){(core::num*) →* core::bool*};
-static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2){(core::num*) →* core::bool*};
-static field core::double* a_modulo = 1.0.{core::double::%}(2){(core::num*) →* core::double*};
+static field core::bool a_equal = 1.0 =={core::num::==}{(core::Object) → core::bool} 2;
+static field core::bool a_notEqual = !(1.0 =={core::num::==}{(core::Object) → core::bool} 2);
+static field core::double a_add = 1.0.{core::double::+}(2){(core::num) → core::double};
+static field core::double a_subtract = 1.0.{core::double::-}(2){(core::num) → core::double};
+static field core::double a_multiply = 1.0.{core::double::*}(2){(core::num) → core::double};
+static field core::double a_divide = 1.0.{core::double::/}(2){(core::num) → core::double};
+static field core::int a_floorDivide = 1.0.{core::double::~/}(2){(core::num) → core::int};
+static field core::bool a_greater = 1.0.{core::num::>}(2){(core::num) → core::bool};
+static field core::bool a_less = 1.0.{core::num::<}(2){(core::num) → core::bool};
+static field core::bool a_greaterEqual = 1.0.{core::num::>=}(2){(core::num) → core::bool};
+static field core::bool a_lessEqual = 1.0.{core::num::<=}(2){(core::num) → core::bool};
+static field core::double a_modulo = 1.0.{core::double::%}(2){(core::num) → core::double};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_double.dart b/pkg/front_end/testcases/inference/infer_binary_int_double.dart
index 04709e8..f3a91cb 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_double.dart
+++ b/pkg/front_end/testcases/inference/infer_binary_int_double.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.textual_outline.expect
index 3b176e5..f4d00de 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var a_equal = 1 == 2.0;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.textual_outline_modelled.expect
index b05f267..ba59e589 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.expect b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.expect
index 1e26a3e..3b927a9 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2.0;
-static field core::bool* a_notEqual = !(1 =={core::num::==}{(core::Object*) →* core::bool*} 2.0);
-static field core::double* a_add = 1.{core::num::+}(2.0){(core::num*) →* core::double*};
-static field core::double* a_subtract = 1.{core::num::-}(2.0){(core::num*) →* core::double*};
-static field core::double* a_multiply = 1.{core::num::*}(2.0){(core::num*) →* core::double*};
-static field core::double* a_divide = 1.{core::num::/}(2.0){(core::num*) →* core::double*};
-static field core::int* a_floorDivide = 1.{core::num::~/}(2.0){(core::num*) →* core::int*};
-static field core::bool* a_greater = 1.{core::num::>}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_less = 1.{core::num::<}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_greaterEqual = 1.{core::num::>=}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_lessEqual = 1.{core::num::<=}(2.0){(core::num*) →* core::bool*};
-static field core::double* a_modulo = 1.{core::num::%}(2.0){(core::num*) →* core::double*};
+static field core::bool a_equal = 1 =={core::num::==}{(core::Object) → core::bool} 2.0;
+static field core::bool a_notEqual = !(1 =={core::num::==}{(core::Object) → core::bool} 2.0);
+static field core::double a_add = 1.{core::num::+}(2.0){(core::num) → core::double};
+static field core::double a_subtract = 1.{core::num::-}(2.0){(core::num) → core::double};
+static field core::double a_multiply = 1.{core::num::*}(2.0){(core::num) → core::double};
+static field core::double a_divide = 1.{core::num::/}(2.0){(core::num) → core::double};
+static field core::int a_floorDivide = 1.{core::num::~/}(2.0){(core::num) → core::int};
+static field core::bool a_greater = 1.{core::num::>}(2.0){(core::num) → core::bool};
+static field core::bool a_less = 1.{core::num::<}(2.0){(core::num) → core::bool};
+static field core::bool a_greaterEqual = 1.{core::num::>=}(2.0){(core::num) → core::bool};
+static field core::bool a_lessEqual = 1.{core::num::<=}(2.0){(core::num) → core::bool};
+static field core::double a_modulo = 1.{core::num::%}(2.0){(core::num) → core::double};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.modular.expect
index 1e26a3e..3b927a9 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.modular.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2.0;
-static field core::bool* a_notEqual = !(1 =={core::num::==}{(core::Object*) →* core::bool*} 2.0);
-static field core::double* a_add = 1.{core::num::+}(2.0){(core::num*) →* core::double*};
-static field core::double* a_subtract = 1.{core::num::-}(2.0){(core::num*) →* core::double*};
-static field core::double* a_multiply = 1.{core::num::*}(2.0){(core::num*) →* core::double*};
-static field core::double* a_divide = 1.{core::num::/}(2.0){(core::num*) →* core::double*};
-static field core::int* a_floorDivide = 1.{core::num::~/}(2.0){(core::num*) →* core::int*};
-static field core::bool* a_greater = 1.{core::num::>}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_less = 1.{core::num::<}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_greaterEqual = 1.{core::num::>=}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_lessEqual = 1.{core::num::<=}(2.0){(core::num*) →* core::bool*};
-static field core::double* a_modulo = 1.{core::num::%}(2.0){(core::num*) →* core::double*};
+static field core::bool a_equal = 1 =={core::num::==}{(core::Object) → core::bool} 2.0;
+static field core::bool a_notEqual = !(1 =={core::num::==}{(core::Object) → core::bool} 2.0);
+static field core::double a_add = 1.{core::num::+}(2.0){(core::num) → core::double};
+static field core::double a_subtract = 1.{core::num::-}(2.0){(core::num) → core::double};
+static field core::double a_multiply = 1.{core::num::*}(2.0){(core::num) → core::double};
+static field core::double a_divide = 1.{core::num::/}(2.0){(core::num) → core::double};
+static field core::int a_floorDivide = 1.{core::num::~/}(2.0){(core::num) → core::int};
+static field core::bool a_greater = 1.{core::num::>}(2.0){(core::num) → core::bool};
+static field core::bool a_less = 1.{core::num::<}(2.0){(core::num) → core::bool};
+static field core::bool a_greaterEqual = 1.{core::num::>=}(2.0){(core::num) → core::bool};
+static field core::bool a_lessEqual = 1.{core::num::<=}(2.0){(core::num) → core::bool};
+static field core::double a_modulo = 1.{core::num::%}(2.0){(core::num) → core::double};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.outline.expect
index fc1ae00..9baa9a0 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.outline.expect
@@ -1,18 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal;
-static field core::bool* a_notEqual;
-static field core::double* a_add;
-static field core::double* a_subtract;
-static field core::double* a_multiply;
-static field core::double* a_divide;
-static field core::int* a_floorDivide;
-static field core::bool* a_greater;
-static field core::bool* a_less;
-static field core::bool* a_greaterEqual;
-static field core::bool* a_lessEqual;
-static field core::double* a_modulo;
+static field core::bool a_equal;
+static field core::bool a_notEqual;
+static field core::double a_add;
+static field core::double a_subtract;
+static field core::double a_multiply;
+static field core::double a_divide;
+static field core::int a_floorDivide;
+static field core::bool a_greater;
+static field core::bool a_less;
+static field core::bool a_greaterEqual;
+static field core::bool a_lessEqual;
+static field core::double a_modulo;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.transformed.expect
index 85e2e66..2a5d6bf 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.transformed.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2.0;
-static field core::bool* a_notEqual = !(1 =={core::num::==}{(core::Object*) →* core::bool*} 2.0);
-static field core::double* a_add = 1.{core::num::+}(2.0){(core::num*) →* core::double*};
-static field core::double* a_subtract = 1.{core::num::-}(2.0){(core::num*) →* core::double*};
-static field core::double* a_multiply = 1.{core::num::*}(2.0){(core::num*) →* core::double*};
-static field core::double* a_divide = 1.{core::num::/}(2.0){(core::num*) →* core::double*};
-static field core::int* a_floorDivide = 1.{core::num::~/}(2.0){(core::num*) →* core::int*};
-static field core::bool* a_greater = 1.{core::num::>}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_less = 1.{core::num::<}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_greaterEqual = 1.{core::num::>=}(2.0){(core::num*) →* core::bool*};
-static field core::bool* a_lessEqual = 1.{core::num::<=}(2.0){(core::num*) →* core::bool*};
-static field core::double* a_modulo = 1.{core::num::%}(2.0){(core::num*) →* core::double*};
+static field core::bool a_equal = 1 =={core::num::==}{(core::Object) → core::bool} 2.0;
+static field core::bool a_notEqual = !(1 =={core::num::==}{(core::Object) → core::bool} 2.0);
+static field core::double a_add = 1.{core::num::+}(2.0){(core::num) → core::double};
+static field core::double a_subtract = 1.{core::num::-}(2.0){(core::num) → core::double};
+static field core::double a_multiply = 1.{core::num::*}(2.0){(core::num) → core::double};
+static field core::double a_divide = 1.{core::num::/}(2.0){(core::num) → core::double};
+static field core::int a_floorDivide = 1.{core::num::~/}(2.0){(core::num) → core::int};
+static field core::bool a_greater = 1.{core::num::>}(2.0){(core::num) → core::bool};
+static field core::bool a_less = 1.{core::num::<}(2.0){(core::num) → core::bool};
+static field core::bool a_greaterEqual = 1.{core::num::>=}(2.0){(core::num) → core::bool};
+static field core::bool a_lessEqual = 1.{core::num::<=}(2.0){(core::num) → core::bool};
+static field core::double a_modulo = 1.{core::num::%}(2.0){(core::num) → core::double};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_int.dart b/pkg/front_end/testcases/inference/infer_binary_int_int.dart
index fdc51d1..8176f7f 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_int.dart
+++ b/pkg/front_end/testcases/inference/infer_binary_int_int.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.textual_outline.expect
index 06c57c6..f139d16 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var a_equal = 1 == 2;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.textual_outline_modelled.expect
index 7e1942a..dae8595 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.expect b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.expect
index 883662f..695ffba 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.expect
@@ -1,24 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2;
-static field core::bool* a_notEqual = !(1 =={core::num::==}{(core::Object*) →* core::bool*} 2);
-static field core::int* a_bitXor = 1.{core::int::^}(2){(core::int*) →* core::int*};
-static field core::int* a_bitAnd = 1.{core::int::&}(2){(core::int*) →* core::int*};
-static field core::int* a_bitOr = 1.{core::int::|}(2){(core::int*) →* core::int*};
-static field core::int* a_bitShiftRight = 1.{core::int::>>}(2){(core::int*) →* core::int*};
-static field core::int* a_bitShiftLeft = 1.{core::int::<<}(2){(core::int*) →* core::int*};
-static field core::int* a_add = 1.{core::num::+}(2){(core::num*) →* core::int*};
-static field core::int* a_subtract = 1.{core::num::-}(2){(core::num*) →* core::int*};
-static field core::int* a_multiply = 1.{core::num::*}(2){(core::num*) →* core::int*};
-static field core::double* a_divide = 1.{core::num::/}(2){(core::num*) →* core::double*};
-static field core::int* a_floorDivide = 1.{core::num::~/}(2){(core::num*) →* core::int*};
-static field core::bool* a_greater = 1.{core::num::>}(2){(core::num*) →* core::bool*};
-static field core::bool* a_less = 1.{core::num::<}(2){(core::num*) →* core::bool*};
-static field core::bool* a_greaterEqual = 1.{core::num::>=}(2){(core::num*) →* core::bool*};
-static field core::bool* a_lessEqual = 1.{core::num::<=}(2){(core::num*) →* core::bool*};
-static field core::int* a_modulo = 1.{core::num::%}(2){(core::num*) →* core::int*};
+static field core::bool a_equal = 1 =={core::num::==}{(core::Object) → core::bool} 2;
+static field core::bool a_notEqual = !(1 =={core::num::==}{(core::Object) → core::bool} 2);
+static field core::int a_bitXor = 1.{core::int::^}(2){(core::int) → core::int};
+static field core::int a_bitAnd = 1.{core::int::&}(2){(core::int) → core::int};
+static field core::int a_bitOr = 1.{core::int::|}(2){(core::int) → core::int};
+static field core::int a_bitShiftRight = 1.{core::int::>>}(2){(core::int) → core::int};
+static field core::int a_bitShiftLeft = 1.{core::int::<<}(2){(core::int) → core::int};
+static field core::int a_add = 1.{core::num::+}(2){(core::num) → core::int};
+static field core::int a_subtract = 1.{core::num::-}(2){(core::num) → core::int};
+static field core::int a_multiply = 1.{core::num::*}(2){(core::num) → core::int};
+static field core::double a_divide = 1.{core::num::/}(2){(core::num) → core::double};
+static field core::int a_floorDivide = 1.{core::num::~/}(2){(core::num) → core::int};
+static field core::bool a_greater = 1.{core::num::>}(2){(core::num) → core::bool};
+static field core::bool a_less = 1.{core::num::<}(2){(core::num) → core::bool};
+static field core::bool a_greaterEqual = 1.{core::num::>=}(2){(core::num) → core::bool};
+static field core::bool a_lessEqual = 1.{core::num::<=}(2){(core::num) → core::bool};
+static field core::int a_modulo = 1.{core::num::%}(2){(core::num) → core::int};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.modular.expect
index 883662f..695ffba 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.modular.expect
@@ -1,24 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2;
-static field core::bool* a_notEqual = !(1 =={core::num::==}{(core::Object*) →* core::bool*} 2);
-static field core::int* a_bitXor = 1.{core::int::^}(2){(core::int*) →* core::int*};
-static field core::int* a_bitAnd = 1.{core::int::&}(2){(core::int*) →* core::int*};
-static field core::int* a_bitOr = 1.{core::int::|}(2){(core::int*) →* core::int*};
-static field core::int* a_bitShiftRight = 1.{core::int::>>}(2){(core::int*) →* core::int*};
-static field core::int* a_bitShiftLeft = 1.{core::int::<<}(2){(core::int*) →* core::int*};
-static field core::int* a_add = 1.{core::num::+}(2){(core::num*) →* core::int*};
-static field core::int* a_subtract = 1.{core::num::-}(2){(core::num*) →* core::int*};
-static field core::int* a_multiply = 1.{core::num::*}(2){(core::num*) →* core::int*};
-static field core::double* a_divide = 1.{core::num::/}(2){(core::num*) →* core::double*};
-static field core::int* a_floorDivide = 1.{core::num::~/}(2){(core::num*) →* core::int*};
-static field core::bool* a_greater = 1.{core::num::>}(2){(core::num*) →* core::bool*};
-static field core::bool* a_less = 1.{core::num::<}(2){(core::num*) →* core::bool*};
-static field core::bool* a_greaterEqual = 1.{core::num::>=}(2){(core::num*) →* core::bool*};
-static field core::bool* a_lessEqual = 1.{core::num::<=}(2){(core::num*) →* core::bool*};
-static field core::int* a_modulo = 1.{core::num::%}(2){(core::num*) →* core::int*};
+static field core::bool a_equal = 1 =={core::num::==}{(core::Object) → core::bool} 2;
+static field core::bool a_notEqual = !(1 =={core::num::==}{(core::Object) → core::bool} 2);
+static field core::int a_bitXor = 1.{core::int::^}(2){(core::int) → core::int};
+static field core::int a_bitAnd = 1.{core::int::&}(2){(core::int) → core::int};
+static field core::int a_bitOr = 1.{core::int::|}(2){(core::int) → core::int};
+static field core::int a_bitShiftRight = 1.{core::int::>>}(2){(core::int) → core::int};
+static field core::int a_bitShiftLeft = 1.{core::int::<<}(2){(core::int) → core::int};
+static field core::int a_add = 1.{core::num::+}(2){(core::num) → core::int};
+static field core::int a_subtract = 1.{core::num::-}(2){(core::num) → core::int};
+static field core::int a_multiply = 1.{core::num::*}(2){(core::num) → core::int};
+static field core::double a_divide = 1.{core::num::/}(2){(core::num) → core::double};
+static field core::int a_floorDivide = 1.{core::num::~/}(2){(core::num) → core::int};
+static field core::bool a_greater = 1.{core::num::>}(2){(core::num) → core::bool};
+static field core::bool a_less = 1.{core::num::<}(2){(core::num) → core::bool};
+static field core::bool a_greaterEqual = 1.{core::num::>=}(2){(core::num) → core::bool};
+static field core::bool a_lessEqual = 1.{core::num::<=}(2){(core::num) → core::bool};
+static field core::int a_modulo = 1.{core::num::%}(2){(core::num) → core::int};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.outline.expect
index cc7c479..4dbca48 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.outline.expect
@@ -1,23 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal;
-static field core::bool* a_notEqual;
-static field core::int* a_bitXor;
-static field core::int* a_bitAnd;
-static field core::int* a_bitOr;
-static field core::int* a_bitShiftRight;
-static field core::int* a_bitShiftLeft;
-static field core::int* a_add;
-static field core::int* a_subtract;
-static field core::int* a_multiply;
-static field core::double* a_divide;
-static field core::int* a_floorDivide;
-static field core::bool* a_greater;
-static field core::bool* a_less;
-static field core::bool* a_greaterEqual;
-static field core::bool* a_lessEqual;
-static field core::int* a_modulo;
+static field core::bool a_equal;
+static field core::bool a_notEqual;
+static field core::int a_bitXor;
+static field core::int a_bitAnd;
+static field core::int a_bitOr;
+static field core::int a_bitShiftRight;
+static field core::int a_bitShiftLeft;
+static field core::int a_add;
+static field core::int a_subtract;
+static field core::int a_multiply;
+static field core::double a_divide;
+static field core::int a_floorDivide;
+static field core::bool a_greater;
+static field core::bool a_less;
+static field core::bool a_greaterEqual;
+static field core::bool a_lessEqual;
+static field core::int a_modulo;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.transformed.expect
index 650dde3..f067c83 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.transformed.expect
@@ -1,24 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2;
-static field core::bool* a_notEqual = !(1 =={core::num::==}{(core::Object*) →* core::bool*} 2);
-static field core::int* a_bitXor = 1.{core::int::^}(2){(core::int*) →* core::int*};
-static field core::int* a_bitAnd = 1.{core::int::&}(2){(core::int*) →* core::int*};
-static field core::int* a_bitOr = 1.{core::int::|}(2){(core::int*) →* core::int*};
-static field core::int* a_bitShiftRight = 1.{core::int::>>}(2){(core::int*) →* core::int*};
-static field core::int* a_bitShiftLeft = 1.{core::int::<<}(2){(core::int*) →* core::int*};
-static field core::int* a_add = 1.{core::num::+}(2){(core::num*) →* core::int*};
-static field core::int* a_subtract = 1.{core::num::-}(2){(core::num*) →* core::int*};
-static field core::int* a_multiply = 1.{core::num::*}(2){(core::num*) →* core::int*};
-static field core::double* a_divide = 1.{core::num::/}(2){(core::num*) →* core::double*};
-static field core::int* a_floorDivide = 1.{core::num::~/}(2){(core::num*) →* core::int*};
-static field core::bool* a_greater = 1.{core::num::>}(2){(core::num*) →* core::bool*};
-static field core::bool* a_less = 1.{core::num::<}(2){(core::num*) →* core::bool*};
-static field core::bool* a_greaterEqual = 1.{core::num::>=}(2){(core::num*) →* core::bool*};
-static field core::bool* a_lessEqual = 1.{core::num::<=}(2){(core::num*) →* core::bool*};
-static field core::int* a_modulo = 1.{core::num::%}(2){(core::num*) →* core::int*};
+static field core::bool a_equal = 1 =={core::num::==}{(core::Object) → core::bool} 2;
+static field core::bool a_notEqual = !(1 =={core::num::==}{(core::Object) → core::bool} 2);
+static field core::int a_bitXor = 1.{core::int::^}(2){(core::int) → core::int};
+static field core::int a_bitAnd = 1.{core::int::&}(2){(core::int) → core::int};
+static field core::int a_bitOr = 1.{core::int::|}(2){(core::int) → core::int};
+static field core::int a_bitShiftRight = 1.{core::int::>>}(2){(core::int) → core::int};
+static field core::int a_bitShiftLeft = 1.{core::int::<<}(2){(core::int) → core::int};
+static field core::int a_add = 1.{core::num::+}(2){(core::num) → core::int};
+static field core::int a_subtract = 1.{core::num::-}(2){(core::num) → core::int};
+static field core::int a_multiply = 1.{core::num::*}(2){(core::num) → core::int};
+static field core::double a_divide = 1.{core::num::/}(2){(core::num) → core::double};
+static field core::int a_floorDivide = 1.{core::num::~/}(2){(core::num) → core::int};
+static field core::bool a_greater = 1.{core::num::>}(2){(core::num) → core::bool};
+static field core::bool a_less = 1.{core::num::<}(2){(core::num) → core::bool};
+static field core::bool a_greaterEqual = 1.{core::num::>=}(2){(core::num) → core::bool};
+static field core::bool a_lessEqual = 1.{core::num::<=}(2){(core::num) → core::bool};
+static field core::int a_modulo = 1.{core::num::%}(2){(core::num) → core::int};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_conditional.dart b/pkg/front_end/testcases/inference/infer_conditional.dart
index 9896b5c..b707956 100644
--- a/pkg/front_end/testcases/inference/infer_conditional.dart
+++ b/pkg/front_end/testcases/inference/infer_conditional.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_conditional.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_conditional.dart.textual_outline.expect
index 931920b..49f6015 100644
--- a/pkg/front_end/testcases/inference/infer_conditional.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_conditional.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var a = 1 == 2 ? 1 : 2.0;
diff --git a/pkg/front_end/testcases/inference/infer_conditional.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_conditional.dart.textual_outline_modelled.expect
index 39f4bc5..da56220 100644
--- a/pkg/front_end/testcases/inference/infer_conditional.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_conditional.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.expect b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.expect
index b2128b8..ff1aeed 100644
--- a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::num* a = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::num*} 1 : 2.0;
-static field core::num* b = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::num*} 1.0 : 2;
+static field core::num a = 1 =={core::num::==}{(core::Object) → core::bool} 2 ?{core::num} 1 : 2.0;
+static field core::num b = 1 =={core::num::==}{(core::Object) → core::bool} 2 ?{core::num} 1.0 : 2;
 static method main() → dynamic {
   self::a;
   self::b;
diff --git a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.modular.expect
index b2128b8..ff1aeed 100644
--- a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::num* a = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::num*} 1 : 2.0;
-static field core::num* b = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::num*} 1.0 : 2;
+static field core::num a = 1 =={core::num::==}{(core::Object) → core::bool} 2 ?{core::num} 1 : 2.0;
+static field core::num b = 1 =={core::num::==}{(core::Object) → core::bool} 2 ?{core::num} 1.0 : 2;
 static method main() → dynamic {
   self::a;
   self::b;
diff --git a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.outline.expect
index 6ea6d78..353e308 100644
--- a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::num* a;
-static field core::num* b;
+static field core::num a;
+static field core::num b;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.transformed.expect
index cf7cb3e..b8f7077 100644
--- a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::num* a = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::num*} 1 : 2.0;
-static field core::num* b = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::num*} 1.0 : 2;
+static field core::num a = 1 =={core::num::==}{(core::Object) → core::bool} 2 ?{core::num} 1 : 2.0;
+static field core::num b = 1 =={core::num::==}{(core::Object) → core::bool} 2 ?{core::num} 1.0 : 2;
 static method main() → dynamic {
   self::a;
   self::b;
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart
index a3f0577..a86c249 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.textual_outline.expect
index 64fd57f..e7967d4 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_consts_transitively_2_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.textual_outline_modelled.expect
index 64fd57f..e7967d4 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_consts_transitively_2_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.expect
index ba94200..1985429 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.expect
@@ -1,33 +1,33 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
 
-static const field core::int* m1 = #C1;
-static const field core::int* m2 = #C1;
+static const field core::int m1 = #C1;
+static const field core::int m2 = #C1;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = #C1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
 import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
 
-static const field core::int* a1 = #C1;
-static const field core::int* a2 = #C1;
+static const field core::int a1 = #C1;
+static const field core::int a2 = #C1;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static const field core::int* b1 = #C1;
+static const field core::int b1 = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.modular.expect
index ba94200..1985429 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.modular.expect
@@ -1,33 +1,33 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
 
-static const field core::int* m1 = #C1;
-static const field core::int* m2 = #C1;
+static const field core::int m1 = #C1;
+static const field core::int m2 = #C1;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = #C1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
 import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
 
-static const field core::int* a1 = #C1;
-static const field core::int* a2 = #C1;
+static const field core::int a1 = #C1;
+static const field core::int a2 = #C1;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static const field core::int* b1 = #C1;
+static const field core::int b1 = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.outline.expect
index f89bc38..555de42 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.outline.expect
@@ -1,18 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_consts_transitively_2_a.dart" as inf;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
 
-static const field core::int* m1 = inf::a1;
-static const field core::int* m2 = inf::a2;
+static const field core::int m1 = inf::a1;
+static const field core::int m2 = inf::a2;
 static method foo() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 import "infer_consts_transitively_2.dart" as self;
@@ -21,16 +21,16 @@
 import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
 import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
 
-static const field core::int* a1 = self::m2;
-static const field core::int* a2 = inf2::b1;
+static const field core::int a1 = self::m2;
+static const field core::int a2 = inf2::b1;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf2;
 import "dart:core" as core;
 
-static const field core::int* b1 = 2;
+static const field core::int b1 = 2;
 static method main() → dynamic
   ;
 
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.transformed.expect
index ba94200..1985429 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.transformed.expect
@@ -1,33 +1,33 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
 
-static const field core::int* m1 = #C1;
-static const field core::int* m2 = #C1;
+static const field core::int m1 = #C1;
+static const field core::int m2 = #C1;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = #C1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
 import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
 
-static const field core::int* a1 = #C1;
-static const field core::int* a2 = #C1;
+static const field core::int a1 = #C1;
+static const field core::int a2 = #C1;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static const field core::int* b1 = #C1;
+static const field core::int b1 = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart
index 507e5ff..25fcf76 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 
 import 'infer_consts_transitively_2.dart';
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.textual_outline.expect
index 85a19ad..3db058a 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_consts_transitively_2.dart';
 import 'infer_consts_transitively_2_b.dart';
 
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.textual_outline_modelled.expect
index 85a19ad..3db058a 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_consts_transitively_2.dart';
 import 'infer_consts_transitively_2_b.dart';
 
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.expect
index 7f72a48..b9719a1 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.expect
@@ -1,33 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
 import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
 
-static const field core::int* a1 = #C1;
-static const field core::int* a2 = #C1;
+static const field core::int a1 = #C1;
+static const field core::int a2 = #C1;
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
 
-static const field core::int* m1 = #C1;
-static const field core::int* m2 = #C1;
+static const field core::int m1 = #C1;
+static const field core::int m2 = #C1;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = #C1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static const field core::int* b1 = #C1;
+static const field core::int b1 = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.modular.expect
index 7f72a48..b9719a1 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.modular.expect
@@ -1,33 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
 import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
 
-static const field core::int* a1 = #C1;
-static const field core::int* a2 = #C1;
+static const field core::int a1 = #C1;
+static const field core::int a2 = #C1;
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
 
-static const field core::int* m1 = #C1;
-static const field core::int* m2 = #C1;
+static const field core::int m1 = #C1;
+static const field core::int m2 = #C1;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = #C1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static const field core::int* b1 = #C1;
+static const field core::int b1 = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.outline.expect
index 1b5944d..861c987 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_consts_transitively_2.dart" as test;
@@ -7,30 +7,30 @@
 import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
 import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
 
-static const field core::int* a1 = test::m2;
-static const field core::int* a2 = inf::b1;
+static const field core::int a1 = test::m2;
+static const field core::int a2 = inf::b1;
 static method main() → dynamic
   ;
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as test;
 import "dart:core" as core;
 import "infer_consts_transitively_2_a.dart" as self;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
 
-static const field core::int* m1 = self::a1;
-static const field core::int* m2 = self::a2;
+static const field core::int m1 = self::a1;
+static const field core::int m2 = self::a2;
 static method foo() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static const field core::int* b1 = 2;
+static const field core::int b1 = 2;
 static method main() → dynamic
   ;
 
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.transformed.expect
index 7f72a48..b9719a1 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.transformed.expect
@@ -1,33 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
 import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
 
-static const field core::int* a1 = #C1;
-static const field core::int* a2 = #C1;
+static const field core::int a1 = #C1;
+static const field core::int a2 = #C1;
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
 
-static const field core::int* m1 = #C1;
-static const field core::int* m2 = #C1;
+static const field core::int m1 = #C1;
+static const field core::int m2 = #C1;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = #C1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static const field core::int* b1 = #C1;
+static const field core::int b1 = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart
index 66c7b75..99d0034 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 const b1 = 2;
 
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.textual_outline.expect
index bb32afa..53d59d9 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 const b1 = 2;
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.textual_outline_modelled.expect
index bb32afa..53d59d9 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 const b1 = 2;
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.expect
index 85d3066..8a4e701 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* b1 = #C1;
+static const field core::int b1 = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.modular.expect
index 85d3066..8a4e701 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* b1 = #C1;
+static const field core::int b1 = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.outline.expect
index afdd6d7..a1e7264 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* b1 = 2;
+static const field core::int b1 = 2;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.transformed.expect
index 85d3066..8a4e701 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* b1 = #C1;
+static const field core::int b1 = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart
index 59a910f..3e4e74e 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 const b1 = 2;
 
 main() {
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.textual_outline.expect
index bb32afa..53d59d9 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 const b1 = 2;
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.textual_outline_modelled.expect
index bb32afa..53d59d9 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 const b1 = 2;
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.expect
index 85d3066..8a4e701 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* b1 = #C1;
+static const field core::int b1 = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.modular.expect
index 85d3066..8a4e701 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* b1 = #C1;
+static const field core::int b1 = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.outline.expect
index afdd6d7..a1e7264 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* b1 = 2;
+static const field core::int b1 = 2;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.transformed.expect
index 85d3066..8a4e701 100644
--- a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* b1 = #C1;
+static const field core::int b1 = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart
index 04f1608..0d951b2 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart
@@ -1,12 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
+String? nullableString = "hi";
+
 class A {
-  var x, y = 2, z = "hi";
+  var x, y = 2, z = nullableString;
 }
 
 class B implements A {
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.textual_outline.expect
index f8c81d8..d94d39f 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.textual_outline.expect
@@ -1,8 +1,9 @@
-// @dart = 2.9
 library test;
 
+String? nullableString = "hi";
+
 class A {
-  var x, y = 2, z = "hi";
+  var x, y = 2, z = nullableString;
 }
 
 class B implements A {
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.textual_outline_modelled.expect
index f8c81d8..d94d39f 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.textual_outline_modelled.expect
@@ -1,8 +1,9 @@
-// @dart = 2.9
 library test;
 
+String? nullableString = "hi";
+
 class A {
-  var x, y = 2, z = "hi";
+  var x, y = 2, z = nullableString;
 }
 
 class B implements A {
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.expect
index 5692085..f623eb2 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.expect
@@ -1,16 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: 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;
 //                                                             ^
 //
-// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:24:32: Error: A value of type 'String?' can't be assigned to a variable of type 'String' because 'String?' is nullable and 'String' isn't.
+//   s = new B(). /*@target=B.z*/ z;
+//                                ^
+//
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:25:61: 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;
 //                                                             ^
 //
-// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:29:61: 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;
 //                                                             ^
 //
@@ -19,57 +23,40 @@
 
 class A extends core::Object {
   field dynamic x = null;
-  field core::int* y = 2;
-  field core::String* z = "hi";
-  synthetic constructor •() → self::A*
+  field core::int y = 2;
+  field core::String? z = self::nullableString;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
   field dynamic x = 2;
-  field core::int* y = 3;
-  field core::String* z = null;
-  field core::int* w = 2;
-  synthetic constructor •() → self::B*
+  field core::int y = 3;
+  field core::String? z = null;
+  field core::int w = 2;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+static field core::String? nullableString = "hi";
 static method foo() → dynamic {
-  core::String* s;
-  core::int* i;
-  s = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: 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}{core::int*} as{TypeError} core::String*;
-  s = new self::B::•().{self::B::z}{core::String*};
+  core::String s;
+  core::int i;
+  s = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: 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}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:24:32: Error: A value of type 'String?' can't be assigned to a variable of type 'String' because 'String?' is nullable and 'String' isn't.
+  s = new B(). /*@target=B.z*/ z;
+                               ^" in new self::B::•().{self::B::z}{core::String?} as{TypeError,ForNonNullableByDefault} core::String;
+  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:25:61: 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}{core::int*} as{TypeError} core::String*;
-  i = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
-  i = new self::B::•().{self::B::y}{core::int*};
-  i = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                            ^" in new self::B::•().{self::B::w}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  i = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  i = new self::B::•().{self::B::y}{core::int};
+  i = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:29:61: 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;
-                                                            ^" in new self::B::•().{self::B::z}{core::String*} as{TypeError} core::int*;
-  i = new self::B::•().{self::B::w}{core::int*};
+                                                            ^" in new self::B::•().{self::B::z}{core::String?} as{TypeError,ForNonNullableByDefault} core::int;
+  i = new self::B::•().{self::B::w}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.modular.expect
index 5692085..f623eb2 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.modular.expect
@@ -1,16 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: 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;
 //                                                             ^
 //
-// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:24:32: Error: A value of type 'String?' can't be assigned to a variable of type 'String' because 'String?' is nullable and 'String' isn't.
+//   s = new B(). /*@target=B.z*/ z;
+//                                ^
+//
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:25:61: 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;
 //                                                             ^
 //
-// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:29:61: 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;
 //                                                             ^
 //
@@ -19,57 +23,40 @@
 
 class A extends core::Object {
   field dynamic x = null;
-  field core::int* y = 2;
-  field core::String* z = "hi";
-  synthetic constructor •() → self::A*
+  field core::int y = 2;
+  field core::String? z = self::nullableString;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
   field dynamic x = 2;
-  field core::int* y = 3;
-  field core::String* z = null;
-  field core::int* w = 2;
-  synthetic constructor •() → self::B*
+  field core::int y = 3;
+  field core::String? z = null;
+  field core::int w = 2;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+static field core::String? nullableString = "hi";
 static method foo() → dynamic {
-  core::String* s;
-  core::int* i;
-  s = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: 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}{core::int*} as{TypeError} core::String*;
-  s = new self::B::•().{self::B::z}{core::String*};
+  core::String s;
+  core::int i;
+  s = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: 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}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:24:32: Error: A value of type 'String?' can't be assigned to a variable of type 'String' because 'String?' is nullable and 'String' isn't.
+  s = new B(). /*@target=B.z*/ z;
+                               ^" in new self::B::•().{self::B::z}{core::String?} as{TypeError,ForNonNullableByDefault} core::String;
+  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:25:61: 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}{core::int*} as{TypeError} core::String*;
-  i = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
-  i = new self::B::•().{self::B::y}{core::int*};
-  i = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                            ^" in new self::B::•().{self::B::w}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  i = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  i = new self::B::•().{self::B::y}{core::int};
+  i = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:29:61: 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;
-                                                            ^" in new self::B::•().{self::B::z}{core::String*} as{TypeError} core::int*;
-  i = new self::B::•().{self::B::w}{core::int*};
+                                                            ^" in new self::B::•().{self::B::z}{core::String?} as{TypeError,ForNonNullableByDefault} core::int;
+  i = new self::B::•().{self::B::w}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.outline.expect
index 00e76ae..97ba173 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.outline.expect
@@ -1,42 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic x;
-  field core::int* y;
-  field core::String* z;
-  synthetic constructor •() → self::A*
+  field core::int y;
+  field core::String? z;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
   field dynamic x;
-  field core::int* y;
-  field core::String* z;
-  field core::int* w;
-  synthetic constructor •() → self::B*
+  field core::int y;
+  field core::String? z;
+  field core::int w;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+static field core::String? nullableString;
 static method foo() → dynamic
   ;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.transformed.expect
index 5692085..3d3b2c5 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.transformed.expect
@@ -1,16 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: 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;
 //                                                             ^
 //
-// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:24:32: Error: A value of type 'String?' can't be assigned to a variable of type 'String' because 'String?' is nullable and 'String' isn't.
+//   s = new B(). /*@target=B.z*/ z;
+//                                ^
+//
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:25:61: 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;
 //                                                             ^
 //
-// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:29:61: 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;
 //                                                             ^
 //
@@ -19,57 +23,40 @@
 
 class A extends core::Object {
   field dynamic x = null;
-  field core::int* y = 2;
-  field core::String* z = "hi";
-  synthetic constructor •() → self::A*
+  field core::int y = 2;
+  field core::String? z = self::nullableString;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
   field dynamic x = 2;
-  field core::int* y = 3;
-  field core::String* z = null;
-  field core::int* w = 2;
-  synthetic constructor •() → self::B*
+  field core::int y = 3;
+  field core::String? z = null;
+  field core::int w = 2;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+static field core::String? nullableString = "hi";
 static method foo() → dynamic {
-  core::String* s;
-  core::int* i;
-  s = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: 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}{core::int*} as{TypeError} core::String*;
-  s = new self::B::•().{self::B::z}{core::String*};
+  core::String s;
+  core::int i;
+  s = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: 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}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:24:32: Error: A value of type 'String?' can't be assigned to a variable of type 'String' because 'String?' is nullable and 'String' isn't.
+  s = new B(). /*@target=B.z*/ z;
+                               ^" in new self::B::•().{self::B::z}{core::String?};
+  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:25:61: 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}{core::int*} as{TypeError} core::String*;
-  i = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
-  i = new self::B::•().{self::B::y}{core::int*};
-  i = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                            ^" in new self::B::•().{self::B::w}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  i = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  i = new self::B::•().{self::B::y}{core::int};
+  i = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:29:61: 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;
-                                                            ^" in new self::B::•().{self::B::z}{core::String*} as{TypeError} core::int*;
-  i = new self::B::•().{self::B::w}{core::int*};
+                                                            ^" in new self::B::•().{self::B::z}{core::String?} as{TypeError,ForNonNullableByDefault} core::int;
+  i = new self::B::•().{self::B::w}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart
index 01e5e62..cc5ae61 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart
@@ -1,16 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
+int? nullableInt = 0;
+
 class A implements B {
   var x;
 }
 
 class B {
-  var x = 0;
+  var x = nullableInt;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.textual_outline.expect
index a10ed1c..b28d3c6 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.textual_outline.expect
@@ -1,12 +1,13 @@
-// @dart = 2.9
 library test;
 
+int? nullableInt = 0;
+
 class A implements B {
   var x;
 }
 
 class B {
-  var x = 0;
+  var x = nullableInt;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.textual_outline_modelled.expect
index a10ed1c..b6be51f 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A implements B {
@@ -6,7 +5,8 @@
 }
 
 class B {
-  var x = 0;
+  var x = nullableInt;
 }
 
+int? nullableInt = 0;
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.expect
index ba522a3..35a3bf9 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.expect
@@ -1,37 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::A*
+  field core::int? x = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field core::int* x = 0;
-  synthetic constructor •() → self::B*
+  field core::int? x = self::nullableInt;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+static field core::int? nullableInt = 0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.modular.expect
index ba522a3..35a3bf9 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.modular.expect
@@ -1,37 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::A*
+  field core::int? x = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field core::int* x = 0;
-  synthetic constructor •() → self::B*
+  field core::int? x = self::nullableInt;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+static field core::int? nullableInt = 0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.outline.expect
index 55478f9..9548cc4 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.outline.expect
@@ -1,36 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field core::int* x;
-  synthetic constructor •() → self::A*
+  field core::int? x;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::B*
+  field core::int? x;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+static field core::int? nullableInt;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.transformed.expect
index ba522a3..35a3bf9 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.transformed.expect
@@ -1,37 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::A*
+  field core::int? x = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field core::int* x = 0;
-  synthetic constructor •() → self::B*
+  field core::int? x = self::nullableInt;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+static field core::int? nullableInt = 0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart
index b4f957d..a487c1e 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -14,7 +14,7 @@
 }
 
 abstract class C {
-  int get x;
+  int? get x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.textual_outline.expect
index 16deb36..7ab22b6 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A implements B {
@@ -10,7 +9,7 @@
 }
 
 abstract class C {
-  int get x;
+  int? get x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.textual_outline_modelled.expect
index 82e3698..5aa3262 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class B implements C {
@@ -6,7 +5,7 @@
 }
 
 abstract class C {
-  int get x;
+  int? get x;
 }
 
 class A implements B {
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.expect
index cc037d5..420edd3 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::A*
+  field core::int? x = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.modular.expect
index cc037d5..420edd3 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.modular.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::A*
+  field core::int? x = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.outline.expect
index 9917158..b635620 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.outline.expect
@@ -1,51 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field core::int* x;
-  synthetic constructor •() → self::A*
+  field core::int? x;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.transformed.expect
index cc037d5..420edd3 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.transformed.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::A*
+  field core::int? x = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart
index e4cf6f7..7d73bde 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -14,7 +14,7 @@
 }
 
 abstract class C {
-  void set x(int value);
+  void set x(int? value);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.textual_outline.expect
index 4eacca8..54a2a66 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A implements B {
@@ -10,7 +9,7 @@
 }
 
 abstract class C {
-  void set x(int value);
+  void set x(int? value);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.textual_outline_modelled.expect
index e403c75..86136c8 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class B implements C {
@@ -6,7 +5,7 @@
 }
 
 abstract class C {
-  void set x(int value);
+  void set x(int? value);
 }
 
 class A implements B {
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.expect
index ad938ca..5853650 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::A*
+  field core::int? x = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int? value) → void;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int? value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.modular.expect
index ad938ca..5853650 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.modular.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::A*
+  field core::int? x = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int? value) → void;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int? value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.outline.expect
index 49d12bb..c8f00c0 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.outline.expect
@@ -1,51 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field core::int* x;
-  synthetic constructor •() → self::A*
+  field core::int? x;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int? value) → void;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int? value) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.transformed.expect
index ad938ca..5853650 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.transformed.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::A*
+  field core::int? x = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int? value) → void;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int? value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart
index 050847e..8bc577c 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart
@@ -1,24 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 abstract class A {
-  int get x;
+  int? get x;
 }
 
 abstract class B {
-  int get x;
+  int? get x;
 }
 
 abstract class C {
-  num get x;
+  num? get x;
 }
 
 abstract class D {
-  double get x;
+  double? get x;
 }
 
 // Superclasses have a consistent type for `x` so inference succeeds.
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.textual_outline.expect
index 987c50a..b4bcc85 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.textual_outline.expect
@@ -1,20 +1,19 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
-  int get x;
+  int? get x;
 }
 
 abstract class B {
-  int get x;
+  int? get x;
 }
 
 abstract class C {
-  num get x;
+  num? get x;
 }
 
 abstract class D {
-  double get x;
+  double? get x;
 }
 
 class E extends A implements B {
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.textual_outline_modelled.expect
index 987c50a..b4bcc85 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.textual_outline_modelled.expect
@@ -1,20 +1,19 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
-  int get x;
+  int? get x;
 }
 
 abstract class B {
-  int get x;
+  int? get x;
 }
 
 abstract class C {
-  num get x;
+  num? get x;
 }
 
 abstract class D {
-  double get x;
+  double? get x;
 }
 
 class E extends A implements B {
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.expect
index 4c56b7e..56dd763 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,101 +6,61 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the overridden members.
-//   int get x;
-//           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the overridden members.
-//   double get x;
-//              ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:12: Context: This is one of the overridden members.
+//   int? get x;
+//            ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:15: Context: This is one of the overridden members.
+//   double? get x;
+//               ^
 //
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::num?;
 }
 abstract class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract get x() → core::double*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::double?;
 }
 class E extends self::A implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::E*
+  field core::int? x = null;
+  synthetic constructor •() → self::E
     : super self::A::•()
     ;
 }
 class F extends self::A implements self::C {
-  field core::int* x = null;
-  synthetic constructor •() → self::F*
+  field core::int? x = null;
+  synthetic constructor •() → self::F
     : super self::A::•()
     ;
 }
 class G extends self::A implements self::D {
   field invalid-type x = null;
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::A::•()
     ;
 }
 class H extends self::C implements self::D {
-  field core::double* x = null;
-  synthetic constructor •() → self::H*
+  field core::double? x = null;
+  synthetic constructor •() → self::H
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.modular.expect
index 4c56b7e..56dd763 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,101 +6,61 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the overridden members.
-//   int get x;
-//           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the overridden members.
-//   double get x;
-//              ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:12: Context: This is one of the overridden members.
+//   int? get x;
+//            ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:15: Context: This is one of the overridden members.
+//   double? get x;
+//               ^
 //
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::num?;
 }
 abstract class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract get x() → core::double*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::double?;
 }
 class E extends self::A implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::E*
+  field core::int? x = null;
+  synthetic constructor •() → self::E
     : super self::A::•()
     ;
 }
 class F extends self::A implements self::C {
-  field core::int* x = null;
-  synthetic constructor •() → self::F*
+  field core::int? x = null;
+  synthetic constructor •() → self::F
     : super self::A::•()
     ;
 }
 class G extends self::A implements self::D {
   field invalid-type x = null;
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::A::•()
     ;
 }
 class H extends self::C implements self::D {
-  field core::double* x = null;
-  synthetic constructor •() → self::H*
+  field core::double? x = null;
+  synthetic constructor •() → self::H
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.outline.expect
index 6fd22e3..a74f111 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,94 +6,54 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the overridden members.
-//   int get x;
-//           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the overridden members.
-//   double get x;
-//              ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:12: Context: This is one of the overridden members.
+//   int? get x;
+//            ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:15: Context: This is one of the overridden members.
+//   double? get x;
+//               ^
 //
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::num?;
 }
 abstract class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  abstract get x() → core::double*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::double?;
 }
 class E extends self::A implements self::B {
-  field core::int* x;
-  synthetic constructor •() → self::E*
+  field core::int? x;
+  synthetic constructor •() → self::E
     ;
 }
 class F extends self::A implements self::C {
-  field core::int* x;
-  synthetic constructor •() → self::F*
+  field core::int? x;
+  synthetic constructor •() → self::F
     ;
 }
 class G extends self::A implements self::D {
   field invalid-type x;
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     ;
 }
 class H extends self::C implements self::D {
-  field core::double* x;
-  synthetic constructor •() → self::H*
+  field core::double? x;
+  synthetic constructor •() → self::H
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.transformed.expect
index 4c56b7e..56dd763 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,101 +6,61 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the overridden members.
-//   int get x;
-//           ^
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the overridden members.
-//   double get x;
-//              ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:12: Context: This is one of the overridden members.
+//   int? get x;
+//            ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:15: Context: This is one of the overridden members.
+//   double? get x;
+//               ^
 //
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::num?;
 }
 abstract class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract get x() → core::double*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::double?;
 }
 class E extends self::A implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::E*
+  field core::int? x = null;
+  synthetic constructor •() → self::E
     : super self::A::•()
     ;
 }
 class F extends self::A implements self::C {
-  field core::int* x = null;
-  synthetic constructor •() → self::F*
+  field core::int? x = null;
+  synthetic constructor •() → self::F
     : super self::A::•()
     ;
 }
 class G extends self::A implements self::D {
   field invalid-type x = null;
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::A::•()
     ;
 }
 class H extends self::C implements self::D {
-  field core::double* x = null;
-  synthetic constructor •() → self::H*
+  field core::double? x = null;
+  synthetic constructor •() → self::H
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart
index 7eda712..2fe5bd0 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 abstract class A {
-  num get x;
+  num? get x;
 }
 
 abstract class B extends A {
-  int get x;
+  int? get x;
 }
 
 class C extends B {
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.textual_outline.expect
index 523e0b2..d11d327 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
-  num get x;
+  num? get x;
 }
 
 abstract class B extends A {
-  int get x;
+  int? get x;
 }
 
 class C extends B {
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.textual_outline_modelled.expect
index 523e0b2..d11d327 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
-  num get x;
+  num? get x;
 }
 
 abstract class B extends A {
-  int get x;
+  int? get x;
 }
 
 class C extends B {
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.expect
index c1a5df1..451d9f3 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::num?;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract get x() → core::int*;
+  abstract get x() → core::int?;
 }
 class C extends self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int? x = null;
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.modular.expect
index c1a5df1..451d9f3 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.modular.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::num?;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract get x() → core::int*;
+  abstract get x() → core::int?;
 }
 class C extends self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int? x = null;
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.outline.expect
index 4b097f7..9de5707 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.outline.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::num?;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract get x() → core::int*;
+  abstract get x() → core::int?;
 }
 class C extends self::B {
-  field core::int* x;
-  synthetic constructor •() → self::C*
+  field core::int? x;
+  synthetic constructor •() → self::C
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.transformed.expect
index c1a5df1..451d9f3 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.transformed.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::num?;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract get x() → core::int*;
+  abstract get x() → core::int?;
 }
 class C extends self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int? x = null;
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart
index 0354fe9..19e4303 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 abstract class A<T> {
-  List<T> get x;
-  void set y(List<T> value);
-  List<T> z;
+  List<T>? get x;
+  void set y(List<T>? value);
+  List<T>? z;
 }
 
 class B extends A<int> {
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.textual_outline.expect
index ea55ffc..273b28b 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 abstract class A<T> {
-  List<T> get x;
-  void set y(List<T> value);
-  List<T> z;
+  List<T>? get x;
+  void set y(List<T>? value);
+  List<T>? z;
 }
 
 class B extends A<int> {
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.textual_outline_modelled.expect
index 4ce74ba..25ccd18 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 abstract class A<T> {
-  List<T> get x;
-  List<T> z;
-  void set y(List<T> value);
+  List<T>? get x;
+  List<T>? z;
+  void set y(List<T>? value);
 }
 
 class B extends A<int> {
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.expect
index 7b26ea1..c7667ae 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field core::List<self::A::T*>* z = null;
-  synthetic constructor •() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field core::List<self::A::T%>? z = null;
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract get x() → core::List<self::A::T*>*;
-  abstract set y(covariant-by-class core::List<self::A::T*>* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::List<self::A::T%>?;
+  abstract set y(covariant-by-class core::List<self::A::T%>? value) → void;
 }
-class B extends self::A<core::int*> {
-  field core::List<core::int*>* x = null;
-  covariant-by-class field core::List<core::int*>* y = null;
-  covariant-by-class field core::List<core::int*>* z = null;
-  synthetic constructor •() → self::B*
+class B extends self::A<core::int> {
+  field core::List<core::int>? x = null;
+  covariant-by-class field core::List<core::int>? y = null;
+  covariant-by-class field core::List<core::int>? z = null;
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.modular.expect
index 7b26ea1..c7667ae 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.modular.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field core::List<self::A::T*>* z = null;
-  synthetic constructor •() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field core::List<self::A::T%>? z = null;
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract get x() → core::List<self::A::T*>*;
-  abstract set y(covariant-by-class core::List<self::A::T*>* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::List<self::A::T%>?;
+  abstract set y(covariant-by-class core::List<self::A::T%>? value) → void;
 }
-class B extends self::A<core::int*> {
-  field core::List<core::int*>* x = null;
-  covariant-by-class field core::List<core::int*>* y = null;
-  covariant-by-class field core::List<core::int*>* z = null;
-  synthetic constructor •() → self::B*
+class B extends self::A<core::int> {
+  field core::List<core::int>? x = null;
+  covariant-by-class field core::List<core::int>? y = null;
+  covariant-by-class field core::List<core::int>? z = null;
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.outline.expect
index b7a1c61..784a16d 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.outline.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field core::List<self::A::T*>* z;
-  synthetic constructor •() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field core::List<self::A::T%>? z;
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract get x() → core::List<self::A::T*>*;
-  abstract set y(covariant-by-class core::List<self::A::T*>* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::List<self::A::T%>?;
+  abstract set y(covariant-by-class core::List<self::A::T%>? value) → void;
 }
-class B extends self::A<core::int*> {
-  field core::List<core::int*>* x;
-  covariant-by-class field core::List<core::int*>* y;
-  covariant-by-class field core::List<core::int*>* z;
-  synthetic constructor •() → self::B*
+class B extends self::A<core::int> {
+  field core::List<core::int>? x;
+  covariant-by-class field core::List<core::int>? y;
+  covariant-by-class field core::List<core::int>? z;
+  synthetic constructor •() → self::B
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.transformed.expect
index 7b26ea1..c7667ae 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.transformed.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field core::List<self::A::T*>* z = null;
-  synthetic constructor •() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field core::List<self::A::T%>? z = null;
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract get x() → core::List<self::A::T*>*;
-  abstract set y(covariant-by-class core::List<self::A::T*>* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::List<self::A::T%>?;
+  abstract set y(covariant-by-class core::List<self::A::T%>? value) → void;
 }
-class B extends self::A<core::int*> {
-  field core::List<core::int*>* x = null;
-  covariant-by-class field core::List<core::int*>* y = null;
-  covariant-by-class field core::List<core::int*>* z = null;
-  synthetic constructor •() → self::B*
+class B extends self::A<core::int> {
+  field core::List<core::int>? x = null;
+  covariant-by-class field core::List<core::int>? y = null;
+  covariant-by-class field core::List<core::int>? z = null;
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart
index ee9b563..3fb5e10 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 abstract class A {
-  int get x;
+  int? get x;
 }
 
 class B {
-  int get x => 0;
+  int? get x => 0;
 }
 
 class C extends A {
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.textual_outline.expect
index be2698f..d6cce37 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
-  int get x;
+  int? get x;
 }
 
 class B {
-  int get x => 0;
+  int? get x => 0;
 }
 
 class C extends A {
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.textual_outline_modelled.expect
index be2698f..d6cce37 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
-  int get x;
+  int? get x;
 }
 
 class B {
-  int get x => 0;
+  int? get x => 0;
 }
 
 class C extends A {
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.expect
index c7c2a14..4afb53d 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.expect
@@ -1,104 +1,54 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int?
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int? x = null;
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 class D extends self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::D*
+  field core::int? x = null;
+  synthetic constructor •() → self::D
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::E*
+  field core::int? x = null;
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::F*
+  field core::int? x = null;
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&B = core::Object with self::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&B*
+  const synthetic constructor •() → self::_G&Object&B
     : super core::Object::•()
     ;
-  mixin-super-stub get x() → core::int*
+  mixin-super-stub get x() → core::int?
     return super.{self::B::x};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends self::_G&Object&B {
-  field core::int* x = null;
-  synthetic constructor •() → self::G*
+  field core::int? x = null;
+  synthetic constructor •() → self::G
     : super self::_G&Object&B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.modular.expect
index c7c2a14..4afb53d 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.modular.expect
@@ -1,104 +1,54 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int?
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int? x = null;
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 class D extends self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::D*
+  field core::int? x = null;
+  synthetic constructor •() → self::D
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::E*
+  field core::int? x = null;
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::F*
+  field core::int? x = null;
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&B = core::Object with self::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&B*
+  const synthetic constructor •() → self::_G&Object&B
     : super core::Object::•()
     ;
-  mixin-super-stub get x() → core::int*
+  mixin-super-stub get x() → core::int?
     return super.{self::B::x};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends self::_G&Object&B {
-  field core::int* x = null;
-  synthetic constructor •() → self::G*
+  field core::int? x = null;
+  synthetic constructor •() → self::G
     : super self::_G&Object&B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.outline.expect
index 1d43d47..011e3b6 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.outline.expect
@@ -1,98 +1,48 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get x() → core::int*
+  get x() → core::int?
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  field core::int* x;
-  synthetic constructor •() → self::C*
+  field core::int? x;
+  synthetic constructor •() → self::C
     ;
 }
 class D extends self::B {
-  field core::int* x;
-  synthetic constructor •() → self::D*
+  field core::int? x;
+  synthetic constructor •() → self::D
     ;
 }
 class E extends core::Object implements self::A {
-  field core::int* x;
-  synthetic constructor •() → self::E*
+  field core::int? x;
+  synthetic constructor •() → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object implements self::B {
-  field core::int* x;
-  synthetic constructor •() → self::F*
+  field core::int? x;
+  synthetic constructor •() → self::F
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&B = core::Object with self::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&B*
+  const synthetic constructor •() → self::_G&Object&B
     : super core::Object::•()
     ;
-  mixin-super-stub get x() → core::int*
+  mixin-super-stub get x() → core::int?
     return super.{self::B::x};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends self::_G&Object&B {
-  field core::int* x;
-  synthetic constructor •() → self::G*
+  field core::int? x;
+  synthetic constructor •() → self::G
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.transformed.expect
index 3341f60..435793a 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.transformed.expect
@@ -1,104 +1,54 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int?;
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int?
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int? x = null;
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 class D extends self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::D*
+  field core::int? x = null;
+  synthetic constructor •() → self::D
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::E*
+  field core::int? x = null;
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::F*
+  field core::int? x = null;
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&B extends core::Object implements self::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&B*
+  const synthetic constructor •() → self::_G&Object&B
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int?
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends self::_G&Object&B {
-  field core::int* x = null;
-  synthetic constructor •() → self::G*
+  field core::int? x = null;
+  synthetic constructor •() → self::G
     : super self::_G&Object&B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart
index bca74a2..5e9a8f0 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 abstract class A {
-  void set x(int value);
+  void set x(int? value);
 }
 
 class B {
-  void set x(int value) {}
+  void set x(int? value) {}
 }
 
 class C extends A {
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.textual_outline.expect
index 944b4fd..441c5f8 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
-  void set x(int value);
+  void set x(int? value);
 }
 
 class B {
-  void set x(int value) {}
+  void set x(int? value) {}
 }
 
 class C extends A {
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.textual_outline_modelled.expect
index 944b4fd..441c5f8 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
-  void set x(int value);
+  void set x(int? value);
 }
 
 class B {
-  void set x(int value) {}
+  void set x(int? value) {}
 }
 
 class C extends A {
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.expect
index 476388a..379ac21 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.expect
@@ -1,103 +1,53 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int? value) → void;
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int? value) → void {}
 }
 class C extends self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int? x = null;
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 class D extends self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::D*
+  field core::int? x = null;
+  synthetic constructor •() → self::D
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::E*
+  field core::int? x = null;
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::F*
+  field core::int? x = null;
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&B = core::Object with self::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&B*
+  const synthetic constructor •() → self::_G&Object&B
     : super core::Object::•()
     ;
-  mixin-super-stub set x(core::int* value) → void
+  mixin-super-stub set x(core::int? value) → void
     return super.{self::B::x} = value;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends self::_G&Object&B {
-  field core::int* x = null;
-  synthetic constructor •() → self::G*
+  field core::int? x = null;
+  synthetic constructor •() → self::G
     : super self::_G&Object&B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.modular.expect
index 476388a..379ac21 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.modular.expect
@@ -1,103 +1,53 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int? value) → void;
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int? value) → void {}
 }
 class C extends self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int? x = null;
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 class D extends self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::D*
+  field core::int? x = null;
+  synthetic constructor •() → self::D
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::E*
+  field core::int? x = null;
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::F*
+  field core::int? x = null;
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&B = core::Object with self::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&B*
+  const synthetic constructor •() → self::_G&Object&B
     : super core::Object::•()
     ;
-  mixin-super-stub set x(core::int* value) → void
+  mixin-super-stub set x(core::int? value) → void
     return super.{self::B::x} = value;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends self::_G&Object&B {
-  field core::int* x = null;
-  synthetic constructor •() → self::G*
+  field core::int? x = null;
+  synthetic constructor •() → self::G
     : super self::_G&Object&B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.outline.expect
index fa329d7..f37771e 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.outline.expect
@@ -1,98 +1,48 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int? value) → void;
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  set x(core::int* value) → void
+  set x(core::int? value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  field core::int* x;
-  synthetic constructor •() → self::C*
+  field core::int? x;
+  synthetic constructor •() → self::C
     ;
 }
 class D extends self::B {
-  field core::int* x;
-  synthetic constructor •() → self::D*
+  field core::int? x;
+  synthetic constructor •() → self::D
     ;
 }
 class E extends core::Object implements self::A {
-  field core::int* x;
-  synthetic constructor •() → self::E*
+  field core::int? x;
+  synthetic constructor •() → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object implements self::B {
-  field core::int* x;
-  synthetic constructor •() → self::F*
+  field core::int? x;
+  synthetic constructor •() → self::F
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&B = core::Object with self::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&B*
+  const synthetic constructor •() → self::_G&Object&B
     : super core::Object::•()
     ;
-  mixin-super-stub set x(core::int* value) → void
+  mixin-super-stub set x(core::int? value) → void
     return super.{self::B::x} = value;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends self::_G&Object&B {
-  field core::int* x;
-  synthetic constructor •() → self::G*
+  field core::int? x;
+  synthetic constructor •() → self::G
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.transformed.expect
index 34e2520..d733625 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.transformed.expect
@@ -1,102 +1,52 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int? value) → void;
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int? value) → void {}
 }
 class C extends self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int? x = null;
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
 class D extends self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::D*
+  field core::int? x = null;
+  synthetic constructor •() → self::D
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::E*
+  field core::int? x = null;
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object implements self::B {
-  field core::int* x = null;
-  synthetic constructor •() → self::F*
+  field core::int? x = null;
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&B extends core::Object implements self::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&B*
+  const synthetic constructor •() → self::_G&Object&B
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int? value) → void {}
 }
 class G extends self::_G&Object&B {
-  field core::int* x = null;
-  synthetic constructor •() → self::G*
+  field core::int? x = null;
+  synthetic constructor •() → self::G
     : super self::_G&Object&B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_static.dart b/pkg/front_end/testcases/inference/infer_field_static.dart
index 1ec1069..619762f 100644
--- a/pkg/front_end/testcases/inference/infer_field_static.dart
+++ b/pkg/front_end/testcases/inference/infer_field_static.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_field_static.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_field_static.dart.textual_outline.expect
index 59f212d..7a13d2a 100644
--- a/pkg/front_end/testcases/inference/infer_field_static.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_static.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 dynamic f() => null;
diff --git a/pkg/front_end/testcases/inference/infer_field_static.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_field_static.dart.textual_outline_modelled.expect
index dfd227e..a746ec3 100644
--- a/pkg/front_end/testcases/inference/infer_field_static.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_field_static.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_field_static.dart.weak.expect b/pkg/front_end/testcases/inference/infer_field_static.dart.weak.expect
index c785e64..252de66 100644
--- a/pkg/front_end/testcases/inference/infer_field_static.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_field_static.dart.weak.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  static get x() → core::int*
+  static get x() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
   static field dynamic x = self::f();
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::A {
   static field dynamic x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_static.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_static.dart.weak.modular.expect
index c785e64..252de66 100644
--- a/pkg/front_end/testcases/inference/infer_field_static.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_field_static.dart.weak.modular.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  static get x() → core::int*
+  static get x() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
   static field dynamic x = self::f();
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::A {
   static field dynamic x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_static.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_field_static.dart.weak.outline.expect
index 3134a2e..bc12f9e 100644
--- a/pkg/front_end/testcases/inference/infer_field_static.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_static.dart.weak.outline.expect
@@ -1,31 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  static get x() → core::int*
+  static get x() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
   static field dynamic x;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 class C extends self::A {
   static field dynamic x;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 static method f() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_static.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_field_static.dart.weak.transformed.expect
index c785e64..252de66 100644
--- a/pkg/front_end/testcases/inference/infer_field_static.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_static.dart.weak.transformed.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  static get x() → core::int*
+  static get x() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
   static field dynamic x = self::f();
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::A {
   static field dynamic x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart
index a5d800a..64260b8 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.textual_outline.expect
index 3b67644..2fcbeb6b 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.textual_outline_modelled.expect
index f8eb28d..226c18d 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.expect
index 3eab43e..18fd580 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.expect
@@ -1,15 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:9:11: Error: The type 'int' of the getter 'A.x' is not assignable to the type 'double' of the setter 'A.x'.
+// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:9:11: Error: The type 'int' of the getter 'A.x' is not a subtype of the type 'double' of the setter 'A.x'.
 //   int get x;
 //           ^
 // pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:10:12: Context: This is the declaration of the setter 'A.x'.
 //   void set x(double value) {}
 //            ^
 //
-// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:14:9: Error: The type 'int' of the field 'B.x' is not assignable to the type 'double' of the inherited setter 'A.x'.
+// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:14:9: Error: The type 'int' of the field 'B.x' is not a subtype of the type 'double' of the inherited setter 'A.x'.
 //   final x;
 //         ^
 // pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:10:12: Context: This is the declaration of the setter 'A.x'.
@@ -20,25 +20,15 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  set x(core::double* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
+  set x(core::double value) → void {}
 }
 class B extends self::A {
-  final field core::int* x;
-  constructor •(core::int* x) → self::B*
+  final field core::int x;
+  constructor •(core::int x) → self::B
     : self::B::x = x, super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.modular.expect
index 3eab43e..18fd580 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.modular.expect
@@ -1,15 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:9:11: Error: The type 'int' of the getter 'A.x' is not assignable to the type 'double' of the setter 'A.x'.
+// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:9:11: Error: The type 'int' of the getter 'A.x' is not a subtype of the type 'double' of the setter 'A.x'.
 //   int get x;
 //           ^
 // pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:10:12: Context: This is the declaration of the setter 'A.x'.
 //   void set x(double value) {}
 //            ^
 //
-// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:14:9: Error: The type 'int' of the field 'B.x' is not assignable to the type 'double' of the inherited setter 'A.x'.
+// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:14:9: Error: The type 'int' of the field 'B.x' is not a subtype of the type 'double' of the inherited setter 'A.x'.
 //   final x;
 //         ^
 // pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:10:12: Context: This is the declaration of the setter 'A.x'.
@@ -20,25 +20,15 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  set x(core::double* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
+  set x(core::double value) → void {}
 }
 class B extends self::A {
-  final field core::int* x;
-  constructor •(core::int* x) → self::B*
+  final field core::int x;
+  constructor •(core::int x) → self::B
     : self::B::x = x, super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.outline.expect
index b9c9e68..33f42e4 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.outline.expect
@@ -1,15 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:9:11: Error: The type 'int' of the getter 'A.x' is not assignable to the type 'double' of the setter 'A.x'.
+// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:9:11: Error: The type 'int' of the getter 'A.x' is not a subtype of the type 'double' of the setter 'A.x'.
 //   int get x;
 //           ^
 // pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:10:12: Context: This is the declaration of the setter 'A.x'.
 //   void set x(double value) {}
 //            ^
 //
-// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:14:9: Error: The type 'int' of the field 'B.x' is not assignable to the type 'double' of the inherited setter 'A.x'.
+// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:14:9: Error: The type 'int' of the field 'B.x' is not a subtype of the type 'double' of the inherited setter 'A.x'.
 //   final x;
 //         ^
 // pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:10:12: Context: This is the declaration of the setter 'A.x'.
@@ -20,25 +20,15 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract get x() → core::int*;
-  set x(core::double* value) → void
+  abstract get x() → core::int;
+  set x(core::double value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  final field core::int* x;
-  constructor •(core::int* x) → self::B*
+  final field core::int x;
+  constructor •(core::int x) → self::B
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.transformed.expect
index 3eab43e..18fd580 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.transformed.expect
@@ -1,15 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:9:11: Error: The type 'int' of the getter 'A.x' is not assignable to the type 'double' of the setter 'A.x'.
+// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:9:11: Error: The type 'int' of the getter 'A.x' is not a subtype of the type 'double' of the setter 'A.x'.
 //   int get x;
 //           ^
 // pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:10:12: Context: This is the declaration of the setter 'A.x'.
 //   void set x(double value) {}
 //            ^
 //
-// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:14:9: Error: The type 'int' of the field 'B.x' is not assignable to the type 'double' of the inherited setter 'A.x'.
+// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:14:9: Error: The type 'int' of the field 'B.x' is not a subtype of the type 'double' of the inherited setter 'A.x'.
 //   final x;
 //         ^
 // pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:10:12: Context: This is the declaration of the setter 'A.x'.
@@ -20,25 +20,15 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  set x(core::double* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
+  set x(core::double value) → void {}
 }
 class B extends self::A {
-  final field core::int* x;
-  constructor •(core::int* x) → self::B*
+  final field core::int x;
+  constructor •(core::int x) → self::B
     : self::B::x = x, super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart
index f9cbe1e..7f0c3b0 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.textual_outline.expect
index 74ecc5b8..98e63d7 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.textual_outline_modelled.expect
index 3a03700..2c719f5 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.expect
index 2668951..9cd70fa 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 class B extends self::A {
-  final field core::int* x;
-  constructor •(core::int* x) → self::B*
+  final field core::int x;
+  constructor •(core::int x) → self::B
     : self::B::x = x, super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.modular.expect
index 2668951..9cd70fa 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 class B extends self::A {
-  final field core::int* x;
-  constructor •(core::int* x) → self::B*
+  final field core::int x;
+  constructor •(core::int x) → self::B
     : self::B::x = x, super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.outline.expect
index 42f6a29..8236a2e 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 class B extends self::A {
-  final field core::int* x;
-  constructor •(core::int* x) → self::B*
+  final field core::int x;
+  constructor •(core::int x) → self::B
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.transformed.expect
index 2668951..9cd70fa 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 class B extends self::A {
-  final field core::int* x;
-  constructor •(core::int* x) → self::B*
+  final field core::int x;
+  constructor •(core::int x) → self::B
     : self::B::x = x, super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart
index 7fa3735..15aaf46 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.textual_outline.expect
index 6a7dbd3..e6b33d7 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.textual_outline_modelled.expect
index 03d1716..3b763af 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.expect
index 287066b..3bacb6f 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set x(core::double* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::double value) → void {}
 }
 class B extends self::A {
-  final field core::double* x;
-  constructor •(core::double* x) → self::B*
+  final field core::double x;
+  constructor •(core::double x) → self::B
     : self::B::x = x, super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.modular.expect
index 287066b..3bacb6f 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set x(core::double* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::double value) → void {}
 }
 class B extends self::A {
-  final field core::double* x;
-  constructor •(core::double* x) → self::B*
+  final field core::double x;
+  constructor •(core::double x) → self::B
     : self::B::x = x, super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.outline.expect
index 837fdff..270556d 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  set x(core::double* value) → void
+  set x(core::double value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  final field core::double* x;
-  constructor •(core::double* x) → self::B*
+  final field core::double x;
+  constructor •(core::double x) → self::B
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.transformed.expect
index 287066b..3bacb6f 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set x(core::double* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::double value) → void {}
 }
 class B extends self::A {
-  final field core::double* x;
-  constructor •(core::double* x) → self::B*
+  final field core::double x;
+  constructor •(core::double x) → self::B
     : self::B::x = x, super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart
index 7a1c5ba..8bb1adb 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A {
-  int x;
-  B operator +(other) => null;
+  int x = 0;
+  B operator +(other) => throw '';
 }
 
 class B extends A {
@@ -17,7 +17,7 @@
 var a = new A();
 // Note: it doesn't matter that some of these refer to 'x'.
 var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
-var c1 = /*@typeArgs=invalid-type*/ [
+var c1 = /*@typeArgs=dynamic*/ [
   /*error:UNDEFINED_IDENTIFIER*/ x
 ]; // list literals
 var c2 = /*@typeArgs=dynamic*/ const [];
@@ -37,7 +37,7 @@
   a = new B(3);
   b = /*error:INVALID_ASSIGNMENT*/ "hi";
   b = new B(3);
-  c1 = /*@typeArgs=invalid-type*/ [];
+  c1 = /*@typeArgs=dynamic*/ [];
   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
   c2 = /*@typeArgs=dynamic*/ [];
   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.textual_outline.expect
index 1d91038..066cecd 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class A {
-  int x;
-  B operator +(other) => null;
+  int x = 0;
+  B operator +(other) => throw '';
 }
 
 class B extends A {
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.textual_outline_modelled.expect
index 9d69b5f..f836e6d 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class A {
-  B operator +(other) => null;
-  int x;
+  B operator +(other) => throw '';
+  int x = 0;
 }
 
 class B extends A {
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.expect
index a18d682..6e181a8 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,7 +26,7 @@
 //   b = /*error:INVALID_ASSIGNMENT*/ "hi";
 //                                    ^
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<invalid-type>'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
 //  - 'Set' is from 'dart:core'.
 //  - 'List' is from 'dart:core'.
 //   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
@@ -78,111 +78,101 @@
 import "dart:collection" as col;
 
 class A extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::A*
+  field core::int x = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(dynamic other) → self::B*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(dynamic other) → self::B
+    return throw "";
 }
 class B extends self::A {
-  constructor •(dynamic ignore) → self::B*
+  constructor •(dynamic ignore) → self::B
     : super self::A::•()
     ;
 }
-static field self::A* a = new self::A::•();
-static field self::B* b = new self::B::•(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
+static field self::A a = new self::A::•();
+static field self::B b = new self::B::•(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
 var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
                                              ^");
-static field core::List<invalid-type>* c1 = <invalid-type>[invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
+static field core::List<dynamic> c1 = <dynamic>[invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
   /*error:UNDEFINED_IDENTIFIER*/ x
                                  ^"];
-static field core::List<dynamic>* c2 = #C1;
-static field core::Map<dynamic, dynamic>* d = <dynamic, dynamic>{"a": "b"};
-static field self::A* e = let final self::A* #t1 = new self::A::•() in block {
+static field core::List<dynamic> c2 = #C1;
+static field core::Map<dynamic, dynamic> d = <dynamic, dynamic>{"a": "b"};
+static field self::A e = let final self::A #t1 = new self::A::•() in block {
   #t1.{self::A::x} = 3;
 } =>#t1;
-static field core::int* f = 2.{core::num::+}(3){(core::num*) →* core::int*};
-static field core::int* g = 3.{core::int::unary-}(){() →* core::int*};
-static field self::B* h = new self::A::•().{self::A::+}(3){(dynamic) →* self::B*};
+static field core::int f = 2.{core::num::+}(3){(core::num) → core::int};
+static field core::int g = 3.{core::int::unary-}(){() → core::int};
+static field self::B h = new self::A::•().{self::A::+}(3){(dynamic) → self::B};
 static field dynamic i = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The operator 'unary-' isn't defined for the class 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 var i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
                                                          ^" in new self::A::•(){<unresolved>}.unary-();
-static field self::B* j = null as self::B*;
+static field self::B j = null as{ForNonNullableByDefault} self::B;
 static method test1() → dynamic {
   self::a = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:36:36: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} self::A*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} self::A;
   self::a = new self::B::•(3);
   self::b = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'String' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} self::B*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} self::B;
   self::b = new self::B::•(3);
-  self::c1 = <invalid-type>[];
-  self::c1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<invalid-type>'.
+  self::c1 = <dynamic>[];
+  self::c1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
  - 'Set' is from 'dart:core'.
  - 'List' is from 'dart:core'.
   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
                                                           ^" in ( block {
-    final core::Set<dynamic>* #t2 = col::LinkedHashSet::•<dynamic>();
-  } =>#t2) as{TypeError} core::List<invalid-type>*;
+    final core::Set<dynamic> #t2 = col::LinkedHashSet::•<dynamic>();
+  } =>#t2) as{TypeError,ForNonNullableByDefault} core::List<dynamic>;
   self::c2 = <dynamic>[];
   self::c2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
  - 'Set' is from 'dart:core'.
  - 'List' is from 'dart:core'.
   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
                                                           ^" in ( block {
-    final core::Set<dynamic>* #t3 = col::LinkedHashSet::•<dynamic>();
-  } =>#t3) as{TypeError} core::List<dynamic>*;
+    final core::Set<dynamic> #t3 = col::LinkedHashSet::•<dynamic>();
+  } =>#t3) as{TypeError,ForNonNullableByDefault} core::List<dynamic>;
   self::d = <dynamic, dynamic>{};
   self::d = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:36: Error: A value of type 'int' can't be assigned to a variable of type 'Map<dynamic, dynamic>'.
  - 'Map' is from 'dart:core'.
   d = /*error:INVALID_ASSIGNMENT*/ 3;
-                                   ^" in 3 as{TypeError} core::Map<dynamic, dynamic>*;
+                                   ^" in 3 as{TypeError,ForNonNullableByDefault} core::Map<dynamic, dynamic>;
   self::e = new self::A::•();
   self::e = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:67: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'A'.
  - 'Map' is from 'dart:core'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
-                                                                  ^" in <dynamic, dynamic>{} as{TypeError} self::A*;
+                                                                  ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} self::A;
   self::f = 3;
   self::f = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
   f = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in false as{TypeError} core::int*;
+                                   ^" in false as{TypeError,ForNonNullableByDefault} core::int;
   self::g = 1;
   self::g = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
   g = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in false as{TypeError} core::int*;
+                                   ^" in false as{TypeError,ForNonNullableByDefault} core::int;
   self::h = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:52:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   h = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in false as{TypeError} self::B*;
+                                   ^" in false as{TypeError,ForNonNullableByDefault} self::B;
   self::h = new self::B::•("b");
   self::i = false;
   self::j = new self::B::•("b");
   self::j = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:56:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   j = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in false as{TypeError} self::B*;
+                                   ^" in false as{TypeError,ForNonNullableByDefault} self::B;
   self::j = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:57:58: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'B'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
-                                                         ^" in <dynamic>[] as{TypeError} self::B*;
+                                                         ^" in <dynamic>[] as{TypeError,ForNonNullableByDefault} self::B;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.modular.expect
index a18d682..6e181a8 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,7 +26,7 @@
 //   b = /*error:INVALID_ASSIGNMENT*/ "hi";
 //                                    ^
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<invalid-type>'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
 //  - 'Set' is from 'dart:core'.
 //  - 'List' is from 'dart:core'.
 //   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
@@ -78,111 +78,101 @@
 import "dart:collection" as col;
 
 class A extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::A*
+  field core::int x = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(dynamic other) → self::B*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(dynamic other) → self::B
+    return throw "";
 }
 class B extends self::A {
-  constructor •(dynamic ignore) → self::B*
+  constructor •(dynamic ignore) → self::B
     : super self::A::•()
     ;
 }
-static field self::A* a = new self::A::•();
-static field self::B* b = new self::B::•(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
+static field self::A a = new self::A::•();
+static field self::B b = new self::B::•(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
 var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
                                              ^");
-static field core::List<invalid-type>* c1 = <invalid-type>[invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
+static field core::List<dynamic> c1 = <dynamic>[invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
   /*error:UNDEFINED_IDENTIFIER*/ x
                                  ^"];
-static field core::List<dynamic>* c2 = #C1;
-static field core::Map<dynamic, dynamic>* d = <dynamic, dynamic>{"a": "b"};
-static field self::A* e = let final self::A* #t1 = new self::A::•() in block {
+static field core::List<dynamic> c2 = #C1;
+static field core::Map<dynamic, dynamic> d = <dynamic, dynamic>{"a": "b"};
+static field self::A e = let final self::A #t1 = new self::A::•() in block {
   #t1.{self::A::x} = 3;
 } =>#t1;
-static field core::int* f = 2.{core::num::+}(3){(core::num*) →* core::int*};
-static field core::int* g = 3.{core::int::unary-}(){() →* core::int*};
-static field self::B* h = new self::A::•().{self::A::+}(3){(dynamic) →* self::B*};
+static field core::int f = 2.{core::num::+}(3){(core::num) → core::int};
+static field core::int g = 3.{core::int::unary-}(){() → core::int};
+static field self::B h = new self::A::•().{self::A::+}(3){(dynamic) → self::B};
 static field dynamic i = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The operator 'unary-' isn't defined for the class 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 var i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
                                                          ^" in new self::A::•(){<unresolved>}.unary-();
-static field self::B* j = null as self::B*;
+static field self::B j = null as{ForNonNullableByDefault} self::B;
 static method test1() → dynamic {
   self::a = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:36:36: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} self::A*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} self::A;
   self::a = new self::B::•(3);
   self::b = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'String' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} self::B*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} self::B;
   self::b = new self::B::•(3);
-  self::c1 = <invalid-type>[];
-  self::c1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<invalid-type>'.
+  self::c1 = <dynamic>[];
+  self::c1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
  - 'Set' is from 'dart:core'.
  - 'List' is from 'dart:core'.
   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
                                                           ^" in ( block {
-    final core::Set<dynamic>* #t2 = col::LinkedHashSet::•<dynamic>();
-  } =>#t2) as{TypeError} core::List<invalid-type>*;
+    final core::Set<dynamic> #t2 = col::LinkedHashSet::•<dynamic>();
+  } =>#t2) as{TypeError,ForNonNullableByDefault} core::List<dynamic>;
   self::c2 = <dynamic>[];
   self::c2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
  - 'Set' is from 'dart:core'.
  - 'List' is from 'dart:core'.
   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
                                                           ^" in ( block {
-    final core::Set<dynamic>* #t3 = col::LinkedHashSet::•<dynamic>();
-  } =>#t3) as{TypeError} core::List<dynamic>*;
+    final core::Set<dynamic> #t3 = col::LinkedHashSet::•<dynamic>();
+  } =>#t3) as{TypeError,ForNonNullableByDefault} core::List<dynamic>;
   self::d = <dynamic, dynamic>{};
   self::d = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:36: Error: A value of type 'int' can't be assigned to a variable of type 'Map<dynamic, dynamic>'.
  - 'Map' is from 'dart:core'.
   d = /*error:INVALID_ASSIGNMENT*/ 3;
-                                   ^" in 3 as{TypeError} core::Map<dynamic, dynamic>*;
+                                   ^" in 3 as{TypeError,ForNonNullableByDefault} core::Map<dynamic, dynamic>;
   self::e = new self::A::•();
   self::e = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:67: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'A'.
  - 'Map' is from 'dart:core'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
-                                                                  ^" in <dynamic, dynamic>{} as{TypeError} self::A*;
+                                                                  ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} self::A;
   self::f = 3;
   self::f = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
   f = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in false as{TypeError} core::int*;
+                                   ^" in false as{TypeError,ForNonNullableByDefault} core::int;
   self::g = 1;
   self::g = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
   g = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in false as{TypeError} core::int*;
+                                   ^" in false as{TypeError,ForNonNullableByDefault} core::int;
   self::h = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:52:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   h = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in false as{TypeError} self::B*;
+                                   ^" in false as{TypeError,ForNonNullableByDefault} self::B;
   self::h = new self::B::•("b");
   self::i = false;
   self::j = new self::B::•("b");
   self::j = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:56:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   j = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in false as{TypeError} self::B*;
+                                   ^" in false as{TypeError,ForNonNullableByDefault} self::B;
   self::j = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:57:58: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'B'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
-                                                         ^" in <dynamic>[] as{TypeError} self::B*;
+                                                         ^" in <dynamic>[] as{TypeError,ForNonNullableByDefault} self::B;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.outline.expect
index 413000a..89c8763 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,37 +14,27 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::A*
+  field core::int x;
+  synthetic constructor •() → self::A
     ;
-  operator +(dynamic other) → self::B*
+  operator +(dynamic other) → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  constructor •(dynamic ignore) → self::B*
+  constructor •(dynamic ignore) → self::B
     ;
 }
-static field self::A* a;
-static field self::B* b;
-static field core::List<invalid-type>* c1;
-static field core::List<dynamic>* c2;
-static field core::Map<dynamic, dynamic>* d;
-static field self::A* e;
-static field core::int* f;
-static field core::int* g;
-static field self::B* h;
+static field self::A a;
+static field self::B b;
+static field core::List<dynamic> c1;
+static field core::List<dynamic> c2;
+static field core::Map<dynamic, dynamic> d;
+static field self::A e;
+static field core::int f;
+static field core::int g;
+static field self::B h;
 static field dynamic i;
-static field self::B* j;
+static field self::B j;
 static method test1() → dynamic
   ;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.transformed.expect
index be878a0..d2f3381 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,7 +26,7 @@
 //   b = /*error:INVALID_ASSIGNMENT*/ "hi";
 //                                    ^
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<invalid-type>'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
 //  - 'Set' is from 'dart:core'.
 //  - 'List' is from 'dart:core'.
 //   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
@@ -78,111 +78,101 @@
 import "dart:collection" as col;
 
 class A extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::A*
+  field core::int x = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(dynamic other) → self::B*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(dynamic other) → self::B
+    return throw "";
 }
 class B extends self::A {
-  constructor •(dynamic ignore) → self::B*
+  constructor •(dynamic ignore) → self::B
     : super self::A::•()
     ;
 }
-static field self::A* a = new self::A::•();
-static field self::B* b = new self::B::•(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
+static field self::A a = new self::A::•();
+static field self::B b = new self::B::•(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
 var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
                                              ^");
-static field core::List<invalid-type>* c1 = core::_GrowableList::_literal1<invalid-type>(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
+static field core::List<dynamic> c1 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
   /*error:UNDEFINED_IDENTIFIER*/ x
                                  ^");
-static field core::List<dynamic>* c2 = #C1;
-static field core::Map<dynamic, dynamic>* d = <dynamic, dynamic>{"a": "b"};
-static field self::A* e = let final self::A* #t1 = new self::A::•() in block {
+static field core::List<dynamic> c2 = #C1;
+static field core::Map<dynamic, dynamic> d = <dynamic, dynamic>{"a": "b"};
+static field self::A e = let final self::A #t1 = new self::A::•() in block {
   #t1.{self::A::x} = 3;
 } =>#t1;
-static field core::int* f = 2.{core::num::+}(3){(core::num*) →* core::int*};
-static field core::int* g = 3.{core::int::unary-}(){() →* core::int*};
-static field self::B* h = new self::A::•().{self::A::+}(3){(dynamic) →* self::B*};
+static field core::int f = 2.{core::num::+}(3){(core::num) → core::int};
+static field core::int g = 3.{core::int::unary-}(){() → core::int};
+static field self::B h = new self::A::•().{self::A::+}(3){(dynamic) → self::B};
 static field dynamic i = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The operator 'unary-' isn't defined for the class 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 var i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
                                                          ^" in new self::A::•(){<unresolved>}.unary-();
-static field self::B* j = null;
+static field self::B j = null;
 static method test1() → dynamic {
   self::a = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:36:36: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} self::A*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} self::A;
   self::a = new self::B::•(3);
   self::b = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'String' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} self::B*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} self::B;
   self::b = new self::B::•(3);
-  self::c1 = core::_GrowableList::•<invalid-type>(0);
-  self::c1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<invalid-type>'.
+  self::c1 = core::_GrowableList::•<dynamic>(0);
+  self::c1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
  - 'Set' is from 'dart:core'.
  - 'List' is from 'dart:core'.
   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
                                                           ^" in ( block {
-    final core::Set<dynamic>* #t2 = new col::_CompactLinkedHashSet::•<dynamic>();
-  } =>#t2) as{TypeError} core::List<invalid-type>*;
+    final core::Set<dynamic> #t2 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t2) as{TypeError,ForNonNullableByDefault} core::List<dynamic>;
   self::c2 = core::_GrowableList::•<dynamic>(0);
   self::c2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
  - 'Set' is from 'dart:core'.
  - 'List' is from 'dart:core'.
   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
                                                           ^" in ( block {
-    final core::Set<dynamic>* #t3 = new col::_CompactLinkedHashSet::•<dynamic>();
-  } =>#t3) as{TypeError} core::List<dynamic>*;
+    final core::Set<dynamic> #t3 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t3) as{TypeError,ForNonNullableByDefault} core::List<dynamic>;
   self::d = <dynamic, dynamic>{};
   self::d = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:36: Error: A value of type 'int' can't be assigned to a variable of type 'Map<dynamic, dynamic>'.
  - 'Map' is from 'dart:core'.
   d = /*error:INVALID_ASSIGNMENT*/ 3;
-                                   ^" in 3 as{TypeError} core::Map<dynamic, dynamic>*;
+                                   ^" in 3 as{TypeError,ForNonNullableByDefault} core::Map<dynamic, dynamic>;
   self::e = new self::A::•();
   self::e = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:67: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'A'.
  - 'Map' is from 'dart:core'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
-                                                                  ^" in <dynamic, dynamic>{} as{TypeError} self::A*;
+                                                                  ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} self::A;
   self::f = 3;
   self::f = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
   f = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in false as{TypeError} core::int*;
+                                   ^" in false as{TypeError,ForNonNullableByDefault} core::int;
   self::g = 1;
   self::g = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
   g = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in false as{TypeError} core::int*;
+                                   ^" in false as{TypeError,ForNonNullableByDefault} core::int;
   self::h = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:52:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   h = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in false as{TypeError} self::B*;
+                                   ^" in false as{TypeError,ForNonNullableByDefault} self::B;
   self::h = new self::B::•("b");
   self::i = false;
   self::j = new self::B::•("b");
   self::j = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:56:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   j = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in false as{TypeError} self::B*;
+                                   ^" in false as{TypeError,ForNonNullableByDefault} self::B;
   self::j = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:57:58: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'B'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
   j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
-                                                         ^" in core::_GrowableList::•<dynamic>(0) as{TypeError} self::B*;
+                                                         ^" in core::_GrowableList::•<dynamic>(0) as{TypeError,ForNonNullableByDefault} self::B;
 }
 static method main() → dynamic {}
 
@@ -193,4 +183,4 @@
 Extra constant evaluation status:
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_from_complex_expressions_if_outer_most_value_is_precise.dart:27:25 -> IntConstant(5)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_from_complex_expressions_if_outer_most_value_is_precise.dart:30:32 -> IntConstant(-3)
-Extra constant evaluation: evaluated: 44, effectively constant: 2
+Extra constant evaluation: evaluated: 45, effectively constant: 2
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart
index 1cad910..20d13e8 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.textual_outline.expect
index 632fe6f..34ce1a3 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.textual_outline_modelled.expect
index 632fe6f..34ce1a3 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.expect
index 8b4fa52..022bf2b 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic x = null;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
   field dynamic x = 2;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  core::String y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.modular.expect
index 8b4fa52..022bf2b 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.modular.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic x = null;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
   field dynamic x = 2;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  core::String y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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.weak.outline.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.outline.expect
index 64c769f..f361099 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.outline.expect
@@ -1,36 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic x;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
   field dynamic x;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.transformed.expect
index 8b4fa52..022bf2b 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.transformed.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic x = null;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
   field dynamic x = 2;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  core::String y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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 b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart
index 91c9c24..f365cfa 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.textual_outline.expect
index b67f00d..aa0f066 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.textual_outline_modelled.expect
index b67f00d..aa0f066 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.expect
index d5127a5..ef90ba2 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   final field dynamic x = null;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
   final field dynamic x = 2;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  core::String y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.modular.expect
index d5127a5..ef90ba2 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.modular.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   final field dynamic x = null;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
   final field dynamic x = 2;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  core::String y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} 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.weak.outline.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.outline.expect
index 209a893..252f1d2 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.outline.expect
@@ -1,36 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   final field dynamic x;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
   final field dynamic x;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.transformed.expect
index d5127a5..ef90ba2 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.transformed.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   final field dynamic x = null;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
   final field dynamic x = 2;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  core::String y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart
index 5f77042..9943823 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.textual_outline.expect
index be84fde..d492a1f 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.textual_outline_modelled.expect
index 6e37725..7f49eac 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.expect
index 79f52e7..eb157c3 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.expect
@@ -1,28 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart" as inf;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart";
 
-static field core::int* y = inf::x;
+static field core::int y = inf::x;
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = inf::x;
   t = self::y;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
-static field core::int* x = 2;
+static field core::int x = 2;
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as inf2;
@@ -30,48 +30,28 @@
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = inf2::A::x;
-  synthetic constructor •() → self2::B*
+  static field core::int y = inf2::A::x;
+  synthetic constructor •() → self2::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = inf2::A::x;
   t = self2::B::y;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → inf2::A*
+  static field core::int x = 2;
+  synthetic constructor •() → inf2::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.modular.expect
index 79f52e7..eb157c3 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.modular.expect
@@ -1,28 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart" as inf;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart";
 
-static field core::int* y = inf::x;
+static field core::int y = inf::x;
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = inf::x;
   t = self::y;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
-static field core::int* x = 2;
+static field core::int x = 2;
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as inf2;
@@ -30,48 +30,28 @@
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = inf2::A::x;
-  synthetic constructor •() → self2::B*
+  static field core::int y = inf2::A::x;
+  synthetic constructor •() → self2::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = inf2::A::x;
   t = self2::B::y;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → inf2::A*
+  static field core::int x = 2;
+  synthetic constructor •() → inf2::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.outline.expect
index 0173e80..22ed76a 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.outline.expect
@@ -1,71 +1,51 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart";
 
-static field core::int* y;
+static field core::int y;
 static method test1() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
-static field core::int* x;
+static field core::int x;
 static method main() → dynamic
   ;
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self3::B*
+  static field core::int y;
+  synthetic constructor •() → self3::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self4;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x;
-  synthetic constructor •() → self4::A*
+  static field core::int x;
+  synthetic constructor •() → self4::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.transformed.expect
index 79f52e7..eb157c3 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.transformed.expect
@@ -1,28 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart" as inf;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart";
 
-static field core::int* y = inf::x;
+static field core::int y = inf::x;
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = inf::x;
   t = self::y;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
-static field core::int* x = 2;
+static field core::int x = 2;
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as inf2;
@@ -30,48 +30,28 @@
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = inf2::A::x;
-  synthetic constructor •() → self2::B*
+  static field core::int y = inf2::A::x;
+  synthetic constructor •() → self2::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = inf2::A::x;
   t = self2::B::y;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → inf2::A*
+  static field core::int x = 2;
+  synthetic constructor •() → inf2::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart
index 72d7556..59b8aa8 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.textual_outline.expect
index 8e52181..88b9f22 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.textual_outline_modelled.expect
index b130d1d..d1c629e 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.expect
index fb74297..2fda76e 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as inf;
@@ -6,48 +6,28 @@
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = inf::A::x;
-  synthetic constructor •() → self::B*
+  static field core::int y = inf::A::x;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = inf::A::x;
   t = self::B::y;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → inf::A*
+  static field core::int x = 2;
+  synthetic constructor •() → inf::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.modular.expect
index fb74297..2fda76e 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as inf;
@@ -6,48 +6,28 @@
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = inf::A::x;
-  synthetic constructor •() → self::B*
+  static field core::int y = inf::A::x;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = inf::A::x;
   t = self::B::y;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → inf::A*
+  static field core::int x = 2;
+  synthetic constructor •() → inf::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.outline.expect
index 62f76a0..7adbdc8 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.outline.expect
@@ -1,49 +1,29 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self::B*
+  static field core::int y;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x;
-  synthetic constructor •() → self2::A*
+  static field core::int x;
+  synthetic constructor •() → self2::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.transformed.expect
index fb74297..2fda76e 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as inf;
@@ -6,48 +6,28 @@
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = inf::A::x;
-  synthetic constructor •() → self::B*
+  static field core::int y = inf::A::x;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = inf::A::x;
   t = self::B::y;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → inf::A*
+  static field core::int x = 2;
+  synthetic constructor •() → inf::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart
index 8357e05..cc5d086 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 import 'infer_from_variables_in_cycle_libs_when_flag_is_on2.dart';
 
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.textual_outline.expect
index b281143..4506b1e 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_from_variables_in_cycle_libs_when_flag_is_on2.dart';
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.textual_outline_modelled.expect
index b281143..4506b1e 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_from_variables_in_cycle_libs_when_flag_is_on2.dart';
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.expect
index da8a870..1a24220 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  static field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as self;
@@ -30,23 +20,13 @@
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = self::A::x;
-  synthetic constructor •() → self2::B*
+  static field core::int y = self::A::x;
+  synthetic constructor •() → self2::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = self::A::x;
   t = self2::B::y;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.modular.expect
index da8a870..1a24220 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  static field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as self;
@@ -30,23 +20,13 @@
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = self::A::x;
-  synthetic constructor •() → self2::B*
+  static field core::int y = self::A::x;
+  synthetic constructor •() → self2::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = self::A::x;
   t = self2::B::y;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.outline.expect
index 2756314..cf6226b 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.outline.expect
@@ -1,47 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x;
-  synthetic constructor •() → self::A*
+  static field core::int x;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::B*
+  static field core::int y;
+  synthetic constructor •() → self2::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.transformed.expect
index da8a870..1a24220 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.transformed.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  static field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as self;
@@ -30,23 +20,13 @@
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = self::A::x;
-  synthetic constructor •() → self2::B*
+  static field core::int y = self::A::x;
+  synthetic constructor •() → self2::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = self::A::x;
   t = self2::B::y;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart
index 5d9ab51..e0f359b 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 import 'infer_from_variables_in_cycle_libs_when_flag_is_on2.dart';
 
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.textual_outline.expect
index 7f33e9c..b6179eb 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_from_variables_in_cycle_libs_when_flag_is_on2.dart';
 
 var x = 2;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.textual_outline_modelled.expect
index 9684c8a..7bbfa38 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_from_variables_in_cycle_libs_when_flag_is_on2.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.expect
index 7e9fca5..3b154f0 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
-static field core::int* x = 2;
+static field core::int x = 2;
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as inf;
@@ -15,48 +15,28 @@
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = inf::A::x;
-  synthetic constructor •() → self2::B*
+  static field core::int y = inf::A::x;
+  synthetic constructor •() → self2::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = inf::A::x;
   t = self2::B::y;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → inf::A*
+  static field core::int x = 2;
+  synthetic constructor •() → inf::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.modular.expect
index 7e9fca5..3b154f0 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
-static field core::int* x = 2;
+static field core::int x = 2;
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as inf;
@@ -15,48 +15,28 @@
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = inf::A::x;
-  synthetic constructor •() → self2::B*
+  static field core::int y = inf::A::x;
+  synthetic constructor •() → self2::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = inf::A::x;
   t = self2::B::y;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → inf::A*
+  static field core::int x = 2;
+  synthetic constructor •() → inf::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.outline.expect
index a454f7e..261bc51 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.outline.expect
@@ -1,59 +1,39 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
-static field core::int* x;
+static field core::int x;
 static method main() → dynamic
   ;
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::B*
+  static field core::int y;
+  synthetic constructor •() → self2::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x;
-  synthetic constructor •() → self3::A*
+  static field core::int x;
+  synthetic constructor •() → self3::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.transformed.expect
index 7e9fca5..3b154f0 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
-static field core::int* x = 2;
+static field core::int x = 2;
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as inf;
@@ -15,48 +15,28 @@
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = inf::A::x;
-  synthetic constructor •() → self2::B*
+  static field core::int y = inf::A::x;
+  synthetic constructor •() → self2::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
-  core::int* t = 3;
+  core::int t = 3;
   t = inf::A::x;
   t = self2::B::y;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → inf::A*
+  static field core::int x = 2;
+  synthetic constructor •() → inf::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart
index 9c87a81..4b54811 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.textual_outline.expect
index 1d27b7a..3866c4e 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_from_variables_in_non_cycle_imports_with_flag_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.textual_outline_modelled.expect
index 8ee5c5b..bc53ea1 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_from_variables_in_non_cycle_imports_with_flag_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.expect
index cfb8761..e9eff50 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,22 +16,22 @@
 
 import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag_a.dart";
 
-static field core::int* y = inf::x;
+static field core::int y = inf::x;
 static method test1() → dynamic {
   inf::x = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   self::y = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static field core::int* x = 2;
+static field core::int x = 2;
 static method main() → dynamic {
   inf::x;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.modular.expect
index cfb8761..e9eff50 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,22 +16,22 @@
 
 import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag_a.dart";
 
-static field core::int* y = inf::x;
+static field core::int y = inf::x;
 static method test1() → dynamic {
   inf::x = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   self::y = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static field core::int* x = 2;
+static field core::int x = 2;
 static method main() → dynamic {
   inf::x;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.outline.expect
index a618e67..5a52ffa 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.outline.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag_a.dart";
 
-static field core::int* y;
+static field core::int y;
 static method test1() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-static field core::int* x;
+static field core::int x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.transformed.expect
index cfb8761..e9eff50 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,22 +16,22 @@
 
 import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag_a.dart";
 
-static field core::int* y = inf::x;
+static field core::int y = inf::x;
 static method test1() → dynamic {
   inf::x = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   self::y = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static field core::int* x = 2;
+static field core::int x = 2;
 static method main() → dynamic {
   inf::x;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart
index 98b37c6..f7bb1b1 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.textual_outline.expect
index b0fc3be..7aa039a 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_from_variables_in_non_cycle_imports_with_flag2_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.textual_outline_modelled.expect
index ac30718..5077b56 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_from_variables_in_non_cycle_imports_with_flag2_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.expect
index 74f640c..5a49ec5 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,49 +17,29 @@
 import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = inf::A::x;
-  synthetic constructor •() → self::B*
+  static field core::int y = inf::A::x;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
   inf::A::x = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   self::B::y = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → inf::A*
+  static field core::int x = 2;
+  synthetic constructor •() → inf::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.modular.expect
index 74f640c..5a49ec5 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,49 +17,29 @@
 import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = inf::A::x;
-  synthetic constructor •() → self::B*
+  static field core::int y = inf::A::x;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
   inf::A::x = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   self::B::y = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → inf::A*
+  static field core::int x = 2;
+  synthetic constructor •() → inf::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.outline.expect
index a555792..2c094e9 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.outline.expect
@@ -1,47 +1,27 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self::B*
+  static field core::int y;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field core::int* x;
-  synthetic constructor •() → self2::A*
+  static field core::int x;
+  synthetic constructor •() → self2::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.transformed.expect
index 74f640c..5a49ec5 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,49 +17,29 @@
 import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag2_a.dart";
 
 class B extends core::Object {
-  static field core::int* y = inf::A::x;
-  synthetic constructor •() → self::B*
+  static field core::int y = inf::A::x;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1() → dynamic {
   inf::A::x = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   self::B::y = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → inf::A*
+  static field core::int x = 2;
+  synthetic constructor •() → inf::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart
index 7980507..906f8d8 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 class A {
   static var x = 2;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.textual_outline.expect
index 342f1dc..7525c2b 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   static var x = 2;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.textual_outline_modelled.expect
index 342f1dc..7525c2b 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   static var x = 2;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.expect
index 81376fe..ff7906f3 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  static field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.modular.expect
index 81376fe..ff7906f3 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  static field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.outline.expect
index 3e977a3..c92c720 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field core::int* x;
-  synthetic constructor •() → self::A*
+  static field core::int x;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.transformed.expect
index 81376fe..ff7906f3 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  static field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart
index aa1a3de..1aa8c0a 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 var x = 2;
 
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.textual_outline.expect
index 4fc8cda..bd89adb 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 var x = 2;
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.textual_outline_modelled.expect
index e76f6ad..a415471 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 var x = 2;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.expect
index 298b12b..d211ba0 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* x = 2;
+static field core::int x = 2;
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.modular.expect
index 298b12b..d211ba0 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* x = 2;
+static field core::int x = 2;
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.outline.expect
index 59f6600..685c2cd 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* x;
+static field core::int x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.transformed.expect
index 298b12b..d211ba0 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* x = 2;
+static field core::int x = 2;
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/infer_generic_field_types.dart b/pkg/front_end/testcases/inference/infer_generic_field_types.dart
index 7dd1393..25970c7 100644
--- a/pkg/front_end/testcases/inference/infer_generic_field_types.dart
+++ b/pkg/front_end/testcases/inference/infer_generic_field_types.dart
@@ -1,9 +1,11 @@
 // 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.
-// @dart=2.9
+
 class A<X> {
   X field;
+
+  A(this.field);
 }
 
 abstract class B<Y> implements A<Y> {
diff --git a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.textual_outline.expect
index 758c19b..12b3533 100644
--- a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.textual_outline.expect
@@ -1,6 +1,6 @@
-// @dart = 2.9
 class A<X> {
   X field;
+  A(this.field);
 }
 
 abstract class B<Y> implements A<Y> {
diff --git a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.textual_outline_modelled.expect
index fe80651..0f3ceeb 100644
--- a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class B<Y> implements A<Y> {
   get field;
   set field(value);
@@ -10,6 +9,7 @@
 }
 
 class A<X> {
+  A(this.field);
   X field;
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.expect b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.expect
index 91d941e..ac14e89 100644
--- a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.expect
@@ -1,55 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A::X* field = null;
-  synthetic constructor •() → self::A<self::A::X*>*
-    : super core::Object::•()
+class A<X extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::X% field;
+  constructor •(self::A::X% field) → self::A<self::A::X%>
+    : self::A::field = field, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
-  synthetic constructor •() → self::B<self::B::Y*>*
+abstract class B<Y extends core::Object? = dynamic> extends core::Object implements self::A<self::B::Y%> {
+  synthetic constructor •() → self::B<self::B::Y%>
     : super core::Object::•()
     ;
-  abstract get field() → self::B::Y*;
-  abstract set field(covariant-by-class self::B::Y* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get field() → self::B::Y%;
+  abstract set field(covariant-by-class self::B::Y% value) → void;
 }
-abstract class C extends core::Object implements self::A<core::int*> {
-  synthetic constructor •() → self::C*
+abstract class C extends core::Object implements self::A<core::int> {
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get field() → core::int*;
-  abstract set field(covariant-by-class core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get field() → core::int;
+  abstract set field(covariant-by-class core::int value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.modular.expect
index 91d941e..ac14e89 100644
--- a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.modular.expect
@@ -1,55 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A::X* field = null;
-  synthetic constructor •() → self::A<self::A::X*>*
-    : super core::Object::•()
+class A<X extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::X% field;
+  constructor •(self::A::X% field) → self::A<self::A::X%>
+    : self::A::field = field, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
-  synthetic constructor •() → self::B<self::B::Y*>*
+abstract class B<Y extends core::Object? = dynamic> extends core::Object implements self::A<self::B::Y%> {
+  synthetic constructor •() → self::B<self::B::Y%>
     : super core::Object::•()
     ;
-  abstract get field() → self::B::Y*;
-  abstract set field(covariant-by-class self::B::Y* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get field() → self::B::Y%;
+  abstract set field(covariant-by-class self::B::Y% value) → void;
 }
-abstract class C extends core::Object implements self::A<core::int*> {
-  synthetic constructor •() → self::C*
+abstract class C extends core::Object implements self::A<core::int> {
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get field() → core::int*;
-  abstract set field(covariant-by-class core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get field() → core::int;
+  abstract set field(covariant-by-class core::int value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.outline.expect
index cc52187..504d184 100644
--- a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.outline.expect
@@ -1,53 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A::X* field;
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::X% field;
+  constructor •(self::A::X% field) → self::A<self::A::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
-  synthetic constructor •() → self::B<self::B::Y*>*
+abstract class B<Y extends core::Object? = dynamic> extends core::Object implements self::A<self::B::Y%> {
+  synthetic constructor •() → self::B<self::B::Y%>
     ;
-  abstract get field() → self::B::Y*;
-  abstract set field(covariant-by-class self::B::Y* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get field() → self::B::Y%;
+  abstract set field(covariant-by-class self::B::Y% value) → void;
 }
-abstract class C extends core::Object implements self::A<core::int*> {
-  synthetic constructor •() → self::C*
+abstract class C extends core::Object implements self::A<core::int> {
+  synthetic constructor •() → self::C
     ;
-  abstract get field() → core::int*;
-  abstract set field(covariant-by-class core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get field() → core::int;
+  abstract set field(covariant-by-class core::int value) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.transformed.expect
index 91d941e..ac14e89 100644
--- a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.transformed.expect
@@ -1,55 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A::X* field = null;
-  synthetic constructor •() → self::A<self::A::X*>*
-    : super core::Object::•()
+class A<X extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::X% field;
+  constructor •(self::A::X% field) → self::A<self::A::X%>
+    : self::A::field = field, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
-  synthetic constructor •() → self::B<self::B::Y*>*
+abstract class B<Y extends core::Object? = dynamic> extends core::Object implements self::A<self::B::Y%> {
+  synthetic constructor •() → self::B<self::B::Y%>
     : super core::Object::•()
     ;
-  abstract get field() → self::B::Y*;
-  abstract set field(covariant-by-class self::B::Y* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get field() → self::B::Y%;
+  abstract set field(covariant-by-class self::B::Y% value) → void;
 }
-abstract class C extends core::Object implements self::A<core::int*> {
-  synthetic constructor •() → self::C*
+abstract class C extends core::Object implements self::A<core::int> {
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get field() → core::int*;
-  abstract set field(covariant-by-class core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get field() → core::int;
+  abstract set field(covariant-by-class core::int value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart
index f75c979..49a950a 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  T m<T>(int a, {String b, T c}) => null;
+  T m<T>(int a, {required String b, required T c}) => throw '';
 }
 
-main() {
-  var /*@ type=double* */ y =
-      new C(). /*@ typeArgs=double* */ /*@target=C.m*/ m(1, b: 'bbb', c: 2.0);
+test() {
+  var /*@type=double*/ y =
+      new C(). /*@typeArgs=double*/ /*@target=C.m*/ m(1, b: 'bbb', c: 2.0);
 }
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.textual_outline.expect
index cc2c7b6..8932217 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C {
-  T m<T>(int a, {String b, T c}) => null;
+  T m<T>(int a, {required String b, required T c}) => throw '';
 }
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.textual_outline_modelled.expect
index cc2c7b6..8932217 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C {
-  T m<T>(int a, {String b, T c}) => null;
+  T m<T>(int a, {required String b, required T c}) => throw '';
 }
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.expect
index 6d31625..d38b941 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, {core::String* b = #C1, self::C::m::T* c = #C1}) → self::C::m::T*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m<T extends core::Object? = dynamic>(core::int a, {required core::String b = #C1, required self::C::m::T% c = #C1}) → self::C::m::T%
+    return throw "";
 }
-static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, b: "bbb", c: 2.0){(core::int*, {b: core::String*, c: core::double*}) →* core::double*};
+static method test() → dynamic {
+  core::double y = new self::C::•().{self::C::m}<core::double>(1, b: "bbb", c: 2.0){(core::int, {required b: core::String, required c: core::double}) → core::double};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.modular.expect
index 6d31625..d38b941 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, {core::String* b = #C1, self::C::m::T* c = #C1}) → self::C::m::T*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m<T extends core::Object? = dynamic>(core::int a, {required core::String b = #C1, required self::C::m::T% c = #C1}) → self::C::m::T%
+    return throw "";
 }
-static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, b: "bbb", c: 2.0){(core::int*, {b: core::String*, c: core::double*}) →* core::double*};
+static method test() → dynamic {
+  core::double y = new self::C::•().{self::C::m}<core::double>(1, b: "bbb", c: 2.0){(core::int, {required b: core::String, required c: core::double}) → core::double};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.outline.expect
index 01a5825..9fe32d8 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, {core::String* b = null, self::C::m::T* c = null}) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(core::int a, {required core::String b = null, required self::C::m::T% c = null}) → self::C::m::T%
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.transformed.expect
index 6d31625..d38b941 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, {core::String* b = #C1, self::C::m::T* c = #C1}) → self::C::m::T*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m<T extends core::Object? = dynamic>(core::int a, {required core::String b = #C1, required self::C::m::T% c = #C1}) → self::C::m::T%
+    return throw "";
 }
-static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, b: "bbb", c: 2.0){(core::int*, {b: core::String*, c: core::double*}) →* core::double*};
+static method test() → dynamic {
+  core::double y = new self::C::•().{self::C::m}<core::double>(1, b: "bbb", c: 2.0){(core::int, {required b: core::String, required c: core::double}) → core::double};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart
index be42411..3c797a5 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  T m<T>(int a, [T b]) => null;
+  T m<T>(int a, [T? b]) => throw '';
 }
 
-main() {
-  var /*@ type=double* */ y =
-      new C(). /*@ typeArgs=double* */ /*@target=C.m*/ m(1, 2.0);
+test() {
+  var /*@type=double*/ y =
+      new C(). /*@typeArgs=double*/ /*@target=C.m*/ m(1, 2.0);
 }
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.textual_outline.expect
index 20477ee..b3adf6c 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C {
-  T m<T>(int a, [T b]) => null;
+  T m<T>(int a, [T? b]) => throw '';
 }
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.textual_outline_modelled.expect
index 20477ee..b3adf6c 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C {
-  T m<T>(int a, [T b]) => null;
+  T m<T>(int a, [T? b]) => throw '';
 }
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.expect
index 5c86982..0a80fac2 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, [self::C::m::T* b = #C1]) → self::C::m::T*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m<T extends core::Object? = dynamic>(core::int a, [self::C::m::T? b = #C1]) → self::C::m::T%
+    return throw "";
 }
-static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, 2.0){(core::int*, [core::double*]) →* core::double*};
+static method test() → dynamic {
+  core::double y = new self::C::•().{self::C::m}<core::double>(1, 2.0){(core::int, [core::double?]) → core::double};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.modular.expect
index 5c86982..0a80fac2 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, [self::C::m::T* b = #C1]) → self::C::m::T*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m<T extends core::Object? = dynamic>(core::int a, [self::C::m::T? b = #C1]) → self::C::m::T%
+    return throw "";
 }
-static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, 2.0){(core::int*, [core::double*]) →* core::double*};
+static method test() → dynamic {
+  core::double y = new self::C::•().{self::C::m}<core::double>(1, 2.0){(core::int, [core::double?]) → core::double};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.outline.expect
index 5e7e617..eb619b2 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, [self::C::m::T* b = null]) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(core::int a, [self::C::m::T? b = null]) → self::C::m::T%
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.transformed.expect
index 5c86982..0a80fac2 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, [self::C::m::T* b = #C1]) → self::C::m::T*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m<T extends core::Object? = dynamic>(core::int a, [self::C::m::T? b = #C1]) → self::C::m::T%
+    return throw "";
 }
-static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, 2.0){(core::int*, [core::double*]) →* core::double*};
+static method test() → dynamic {
+  core::double y = new self::C::•().{self::C::m}<core::double>(1, 2.0){(core::int, [core::double?]) → core::double};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart
index dee5df5..a0bd876 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  T m<T>(int a, [String b, T c]) => null;
+  T m<T>(int a, [String? b, T? c]) => throw '';
 }
 
-main() {
-  var /*@ type=double* */ y =
-      new C(). /*@ typeArgs=double* */ /*@target=C.m*/ m(1, 'bbb', 2.0);
+test() {
+  var /*@type=double*/ y =
+      new C(). /*@typeArgs=double*/ /*@target=C.m*/ m(1, 'bbb', 2.0);
 }
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.textual_outline.expect
index 618f63f..fe4e827 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C {
-  T m<T>(int a, [String b, T c]) => null;
+  T m<T>(int a, [String? b, T? c]) => throw '';
 }
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.textual_outline_modelled.expect
index 618f63f..fe4e827 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C {
-  T m<T>(int a, [String b, T c]) => null;
+  T m<T>(int a, [String? b, T? c]) => throw '';
 }
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.expect
index 7af5aa7..85f0d40 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, [core::String* b = #C1, self::C::m::T* c = #C1]) → self::C::m::T*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m<T extends core::Object? = dynamic>(core::int a, [core::String? b = #C1, self::C::m::T? c = #C1]) → self::C::m::T%
+    return throw "";
 }
-static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, "bbb", 2.0){(core::int*, [core::String*, core::double*]) →* core::double*};
+static method test() → dynamic {
+  core::double y = new self::C::•().{self::C::m}<core::double>(1, "bbb", 2.0){(core::int, [core::String?, core::double?]) → core::double};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.modular.expect
index 7af5aa7..85f0d40 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, [core::String* b = #C1, self::C::m::T* c = #C1]) → self::C::m::T*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m<T extends core::Object? = dynamic>(core::int a, [core::String? b = #C1, self::C::m::T? c = #C1]) → self::C::m::T%
+    return throw "";
 }
-static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, "bbb", 2.0){(core::int*, [core::String*, core::double*]) →* core::double*};
+static method test() → dynamic {
+  core::double y = new self::C::•().{self::C::m}<core::double>(1, "bbb", 2.0){(core::int, [core::String?, core::double?]) → core::double};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.outline.expect
index 0ed9a74..5a11eb2 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, [core::String* b = null, self::C::m::T* c = null]) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(core::int a, [core::String? b = null, self::C::m::T? c = null]) → self::C::m::T%
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.transformed.expect
index 7af5aa7..85f0d40 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, [core::String* b = #C1, self::C::m::T* c = #C1]) → self::C::m::T*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method m<T extends core::Object? = dynamic>(core::int a, [core::String? b = #C1, self::C::m::T? c = #C1]) → self::C::m::T%
+    return throw "";
 }
-static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, "bbb", 2.0){(core::int*, [core::String*, core::double*]) →* core::double*};
+static method test() → dynamic {
+  core::double y = new self::C::•().{self::C::m}<core::double>(1, "bbb", 2.0){(core::int, [core::String?, core::double?]) → core::double};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart
index de8a733..7a05aeb 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,5 +10,5 @@
 }
 
 main() {
-  var /*@ type=int* */ y = new C(). /*@ typeArgs=int* */ /*@target=C.m*/ m(42);
+  var /*@type=int*/ y = new C(). /*@typeArgs=int*/ /*@target=C.m*/ m(42);
 }
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.textual_outline.expect
index f8fd8be..62d0c61 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.textual_outline_modelled.expect
index f8fd8be..62d0c61 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.expect
index 4435be3..b159909 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(self::C::m::T% x) → self::C::m::T%
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::int* y = new self::C::•().{self::C::m}<core::int*>(42){(core::int*) →* core::int*};
+  core::int y = new self::C::•().{self::C::m}<core::int>(42){(core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.modular.expect
index 4435be3..b159909 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.modular.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(self::C::m::T% x) → self::C::m::T%
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::int* y = new self::C::•().{self::C::m}<core::int*>(42){(core::int*) →* core::int*};
+  core::int y = new self::C::•().{self::C::m}<core::int>(42){(core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.outline.expect
index 0fac54e..a976944 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(self::C::m::T% x) → self::C::m::T%
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.transformed.expect
index 4435be3..b159909 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.transformed.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+  method m<T extends core::Object? = dynamic>(self::C::m::T% x) → self::C::m::T%
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::int* y = new self::C::•().{self::C::m}<core::int*>(42){(core::int*) →* core::int*};
+  core::int y = new self::C::•().{self::C::m}<core::int>(42){(core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart
index 4d1bac2..203adfa 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.textual_outline.expect
index d41ad8c..110bf8d 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.textual_outline_modelled.expect
index d41ad8c..110bf8d 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.expect
index b45aed1..308bbb2 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(core::double* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::double value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract get x() → core::double*;
+  abstract get x() → core::double;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.modular.expect
index b45aed1..308bbb2 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(core::double* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::double value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract get x() → core::double*;
+  abstract get x() → core::double;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.outline.expect
index 72b9d57..5183c8a 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract set x(core::double* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::double value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract get x() → core::double*;
+  abstract get x() → core::double;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.transformed.expect
index b45aed1..308bbb2 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(core::double* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::double value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract get x() → core::double*;
+  abstract get x() → core::double;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart
index 9643e6d..7469d08 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.textual_outline.expect
index d31cc08..32a29d8 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A implements B {
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.textual_outline_modelled.expect
index 4c03b67..1b7bfe1 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class B implements C {
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.expect
index a1ce381..13d57b1 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get x() → core::int*
-    return self::f() as{TypeError,ForDynamic} core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get x() → core::int
+    return self::f() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 static method f() → dynamic
   return null;
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.modular.expect
index a1ce381..13d57b1 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.modular.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get x() → core::int*
-    return self::f() as{TypeError,ForDynamic} core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get x() → core::int
+    return self::f() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 static method f() → dynamic
   return null;
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.outline.expect
index 0295989..079c7dd 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.outline.expect
@@ -1,52 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 static method f() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.transformed.expect
index a1ce381..13d57b1 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.transformed.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get x() → core::int*
-    return self::f() as{TypeError,ForDynamic} core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get x() → core::int
+    return self::f() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 static method f() → dynamic
   return null;
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart
index 7bee8a2..7154a49 100644
--- a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -35,8 +37,8 @@
     },
   ];
   // Instance creation too
-  var /*@ type=Foo<List<Folder*>*>* */ foo = new Foo<List<Folder>>(
-      /*@ typeArgs=Folder* */ [
-        /*info:DOWN_CAST_IMPLICIT*/ getResource('/pkgA/lib/')
-      ]);
+  var /*@ type=Foo<List<Folder*>*>* */ foo =
+      new Foo<List<Folder>>(/*@ typeArgs=Folder* */ [
+    /*info:DOWN_CAST_IMPLICIT*/ getResource('/pkgA/lib/')
+  ]);
 }
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart
new file mode 100644
index 0000000..8c5c380
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart
@@ -0,0 +1,32 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class Folder {}
+
+class Resource extends Folder {}
+
+Resource getResource(String str) => throw '';
+
+class Foo<T> {
+  Foo(T t);
+}
+
+test() {
+  // List inside map
+  var /*@type=Map<String, List<Folder>>*/ map = <String, List<Folder>>{
+    'pkgA': /*@typeArgs=Folder*/ [getResource('/pkgA/lib/')],
+    'pkgB': /*@typeArgs=Folder*/ [getResource('/pkgB/lib/')]
+  };
+  // Also try map inside list
+  var /*@type=List<Map<String, Folder>>*/ list = <Map<String, Folder>>[
+    /*@typeArgs=String, Folder*/ {'pkgA': getResource('/pkgA/lib/')},
+    /*@typeArgs=String, Folder*/ {'pkgB': getResource('/pkgB/lib/')},
+  ];
+  // Instance creation too
+  var /*@type=Foo<List<Folder>>*/ foo =
+      new Foo<List<Folder>>(/*@typeArgs=Folder*/ [getResource('/pkgA/lib/')]);
+}
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.textual_outline.expect
new file mode 100644
index 0000000..d40d59e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+library test;
+
+class Folder {}
+
+class Resource extends Folder {}
+
+Resource getResource(String str) => throw '';
+
+class Foo<T> {
+  Foo(T t);
+}
+
+test() {}
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..30e3e71
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+library test;
+
+Resource getResource(String str) => throw '';
+
+class Folder {}
+
+class Foo<T> {
+  Foo(T t);
+}
+
+class Resource extends Folder {}
+
+test() {}
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.weak.expect
new file mode 100644
index 0000000..332cfc7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.weak.expect
@@ -0,0 +1,26 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Folder extends core::Object {
+  synthetic constructor •() → self::Folder
+    : super core::Object::•()
+    ;
+}
+class Resource extends self::Folder {
+  synthetic constructor •() → self::Resource
+    : super self::Folder::•()
+    ;
+}
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::Foo::T% t) → self::Foo<self::Foo::T%>
+    : super core::Object::•()
+    ;
+}
+static method getResource(core::String str) → self::Resource
+  return throw "";
+static method test() → dynamic {
+  core::Map<core::String, core::List<self::Folder>> map = <core::String, core::List<self::Folder>>{"pkgA": <self::Folder>[self::getResource("/pkgA/lib/")], "pkgB": <self::Folder>[self::getResource("/pkgB/lib/")]};
+  core::List<core::Map<core::String, self::Folder>> list = <core::Map<core::String, self::Folder>>[<core::String, self::Folder>{"pkgA": self::getResource("/pkgA/lib/")}, <core::String, self::Folder>{"pkgB": self::getResource("/pkgB/lib/")}];
+  self::Foo<core::List<self::Folder>> foo = new self::Foo::•<core::List<self::Folder>>(<self::Folder>[self::getResource("/pkgA/lib/")]);
+}
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.weak.modular.expect
new file mode 100644
index 0000000..332cfc7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Folder extends core::Object {
+  synthetic constructor •() → self::Folder
+    : super core::Object::•()
+    ;
+}
+class Resource extends self::Folder {
+  synthetic constructor •() → self::Resource
+    : super self::Folder::•()
+    ;
+}
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::Foo::T% t) → self::Foo<self::Foo::T%>
+    : super core::Object::•()
+    ;
+}
+static method getResource(core::String str) → self::Resource
+  return throw "";
+static method test() → dynamic {
+  core::Map<core::String, core::List<self::Folder>> map = <core::String, core::List<self::Folder>>{"pkgA": <self::Folder>[self::getResource("/pkgA/lib/")], "pkgB": <self::Folder>[self::getResource("/pkgB/lib/")]};
+  core::List<core::Map<core::String, self::Folder>> list = <core::Map<core::String, self::Folder>>[<core::String, self::Folder>{"pkgA": self::getResource("/pkgA/lib/")}, <core::String, self::Folder>{"pkgB": self::getResource("/pkgB/lib/")}];
+  self::Foo<core::List<self::Folder>> foo = new self::Foo::•<core::List<self::Folder>>(<self::Folder>[self::getResource("/pkgA/lib/")]);
+}
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.weak.outline.expect
new file mode 100644
index 0000000..38c9050
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.weak.outline.expect
@@ -0,0 +1,20 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Folder extends core::Object {
+  synthetic constructor •() → self::Folder
+    ;
+}
+class Resource extends self::Folder {
+  synthetic constructor •() → self::Resource
+    ;
+}
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::Foo::T% t) → self::Foo<self::Foo::T%>
+    ;
+}
+static method getResource(core::String str) → self::Resource
+  ;
+static method test() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.weak.transformed.expect
new file mode 100644
index 0000000..8ae7d0a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal2.dart.weak.transformed.expect
@@ -0,0 +1,26 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Folder extends core::Object {
+  synthetic constructor •() → self::Folder
+    : super core::Object::•()
+    ;
+}
+class Resource extends self::Folder {
+  synthetic constructor •() → self::Resource
+    : super self::Folder::•()
+    ;
+}
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::Foo::T% t) → self::Foo<self::Foo::T%>
+    : super core::Object::•()
+    ;
+}
+static method getResource(core::String str) → self::Resource
+  return throw "";
+static method test() → dynamic {
+  core::Map<core::String, core::List<self::Folder>> map = <core::String, core::List<self::Folder>>{"pkgA": core::_GrowableList::_literal1<self::Folder>(self::getResource("/pkgA/lib/")), "pkgB": core::_GrowableList::_literal1<self::Folder>(self::getResource("/pkgB/lib/"))};
+  core::List<core::Map<core::String, self::Folder>> list = core::_GrowableList::_literal2<core::Map<core::String, self::Folder>>(<core::String, self::Folder>{"pkgA": self::getResource("/pkgA/lib/")}, <core::String, self::Folder>{"pkgB": self::getResource("/pkgB/lib/")});
+  self::Foo<core::List<self::Folder>> foo = new self::Foo::•<core::List<self::Folder>>(core::_GrowableList::_literal1<self::Folder>(self::getResource("/pkgA/lib/")));
+}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart
index 4cb24f0..8629ddc 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -14,7 +14,7 @@
   g() => 0;
   /*@testedFeatures=inference*/
 
-  var /*@type=() ->* invalid-type*/ v = f;
+  var /*@type=() -> invalid-type*/ v = f;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.textual_outline.expect
index 84bb5b3..c70c84a 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 test() {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.textual_outline_modelled.expect
index 630ead4..10819ea 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.expect
index 588ca83..5d0e6d4 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,9 +25,9 @@
     invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
   g() => 0;
   ^";
-    function g() → core::int*
+    function g() → core::int
       return 0;
   }
-  () →* invalid-type v = f;
+  () → invalid-type v = f;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.modular.expect
index 588ca83..5d0e6d4 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,9 +25,9 @@
     invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
   g() => 0;
   ^";
-    function g() → core::int*
+    function g() → core::int
       return 0;
   }
-  () →* invalid-type v = f;
+  () → invalid-type v = f;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.outline.expect
index 8e85697..100b8e9 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.transformed.expect
index 588ca83..5d0e6d4 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,9 +25,9 @@
     invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
   g() => 0;
   ^";
-    function g() → core::int*
+    function g() → core::int
       return 0;
   }
-  () →* invalid-type v = f;
+  () → invalid-type v = f;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart
index dc8025f..aa5b7c5 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart
@@ -1,44 +1,44 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 test() {
-  /*@ returnType=int* */ f0() => 42;
-  /*@ returnType=Future<int*>* */ f1() async => 42;
+  /*@returnType=int*/ f0() => 42;
+  /*@returnType=Future<int>*/ f1() async => 42;
 
-  /*@ returnType=int* */ f2() {
+  /*@returnType=int*/ f2() {
     return 42;
   }
 
-  /*@ returnType=Future<int*>* */ f3() async {
+  /*@returnType=Future<int>*/ f3() async {
     return 42;
   }
 
-  /*@ returnType=Iterable<int*>* */ f4() sync* {
+  /*@returnType=Iterable<int>*/ f4() sync* {
     yield 42;
   }
 
-  /*@ returnType=Stream<int*>* */ f5() async* {
+  /*@returnType=Stream<int>*/ f5() async* {
     yield 42;
   }
 
   num f6() => 42;
 
   /*@ returnType=dynamic */ f7() => f7();
-  /*@ returnType=Stream<int*>* */ f8() => f5();
+  /*@returnType=Stream<int>*/ f8() => f5();
 
-  var /*@ type=() ->* int* */ v0 = f0;
-  var /*@ type=() ->* Future<int*>* */ v1 = f1;
-  var /*@ type=() ->* int* */ v2 = f2;
-  var /*@ type=() ->* Future<int*>* */ v3 = f3;
-  var /*@ type=() ->* Iterable<int*>* */ v4 = f4;
-  var /*@ type=() ->* Stream<int*>* */ v5 = f5;
-  var /*@ type=() ->* num* */ v6 = f6;
-  var /*@ type=() ->* dynamic */ v7 = f7;
-  var /*@ type=() ->* Stream<int*>* */ v8 = f8;
+  var /*@type=() -> int*/ v0 = f0;
+  var /*@type=() -> Future<int>*/ v1 = f1;
+  var /*@type=() -> int*/ v2 = f2;
+  var /*@type=() -> Future<int>*/ v3 = f3;
+  var /*@type=() -> Iterable<int>*/ v4 = f4;
+  var /*@type=() -> Stream<int>*/ v5 = f5;
+  var /*@type=() -> num*/ v6 = f6;
+  var /*@type=() -> dynamic*/ v7 = f7;
+  var /*@type=() -> Stream<int>*/ v8 = f8;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.textual_outline.expect
index 84bb5b3..c70c84a 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 test() {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.textual_outline_modelled.expect
index 630ead4..10819ea 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.expect
index 9486b2b..837b3c1 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.expect
@@ -1,39 +1,39 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 static method test() → dynamic {
-  function f0() → core::int*
+  function f0() → core::int
     return 42;
-  function f1() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
+  function f1() → asy::Future<core::int> async /* futureValueType= core::int */ 
     return 42;
-  function f2() → core::int* {
+  function f2() → core::int {
     return 42;
   }
-  function f3() → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+  function f3() → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 42;
   }
-  function f4() → core::Iterable<core::int*>* sync* {
+  function f4() → core::Iterable<core::int> sync* {
     yield 42;
   }
-  function f5() → asy::Stream<core::int*>* async* {
+  function f5() → asy::Stream<core::int> async* {
     yield 42;
   }
-  function f6() → core::num*
+  function f6() → core::num
     return 42;
   function f7() → dynamic
-    return f7(){() →* dynamic};
-  function f8() → asy::Stream<core::int*>*
-    return f5(){() →* asy::Stream<core::int*>*};
-  () →* core::int* v0 = f0;
-  () →* asy::Future<core::int*>* v1 = f1;
-  () →* core::int* v2 = f2;
-  () →* asy::Future<core::int*>* v3 = f3;
-  () →* core::Iterable<core::int*>* v4 = f4;
-  () →* asy::Stream<core::int*>* v5 = f5;
-  () →* core::num* v6 = f6;
-  () →* dynamic v7 = f7;
-  () →* asy::Stream<core::int*>* v8 = f8;
+    return f7(){() → dynamic};
+  function f8() → asy::Stream<core::int>
+    return f5(){() → asy::Stream<core::int>};
+  () → core::int v0 = f0;
+  () → asy::Future<core::int> v1 = f1;
+  () → core::int v2 = f2;
+  () → asy::Future<core::int> v3 = f3;
+  () → core::Iterable<core::int> v4 = f4;
+  () → asy::Stream<core::int> v5 = f5;
+  () → core::num v6 = f6;
+  () → dynamic v7 = f7;
+  () → asy::Stream<core::int> v8 = f8;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.modular.expect
index 9486b2b..837b3c1 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.modular.expect
@@ -1,39 +1,39 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 static method test() → dynamic {
-  function f0() → core::int*
+  function f0() → core::int
     return 42;
-  function f1() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
+  function f1() → asy::Future<core::int> async /* futureValueType= core::int */ 
     return 42;
-  function f2() → core::int* {
+  function f2() → core::int {
     return 42;
   }
-  function f3() → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+  function f3() → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 42;
   }
-  function f4() → core::Iterable<core::int*>* sync* {
+  function f4() → core::Iterable<core::int> sync* {
     yield 42;
   }
-  function f5() → asy::Stream<core::int*>* async* {
+  function f5() → asy::Stream<core::int> async* {
     yield 42;
   }
-  function f6() → core::num*
+  function f6() → core::num
     return 42;
   function f7() → dynamic
-    return f7(){() →* dynamic};
-  function f8() → asy::Stream<core::int*>*
-    return f5(){() →* asy::Stream<core::int*>*};
-  () →* core::int* v0 = f0;
-  () →* asy::Future<core::int*>* v1 = f1;
-  () →* core::int* v2 = f2;
-  () →* asy::Future<core::int*>* v3 = f3;
-  () →* core::Iterable<core::int*>* v4 = f4;
-  () →* asy::Stream<core::int*>* v5 = f5;
-  () →* core::num* v6 = f6;
-  () →* dynamic v7 = f7;
-  () →* asy::Stream<core::int*>* v8 = f8;
+    return f7(){() → dynamic};
+  function f8() → asy::Stream<core::int>
+    return f5(){() → asy::Stream<core::int>};
+  () → core::int v0 = f0;
+  () → asy::Future<core::int> v1 = f1;
+  () → core::int v2 = f2;
+  () → asy::Future<core::int> v3 = f3;
+  () → core::Iterable<core::int> v4 = f4;
+  () → asy::Stream<core::int> v5 = f5;
+  () → core::num v6 = f6;
+  () → dynamic v7 = f7;
+  () → asy::Stream<core::int> v8 = f8;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.outline.expect
index 8e85697..100b8e9 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
index 9486b2b..837b3c1 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
@@ -1,39 +1,39 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 static method test() → dynamic {
-  function f0() → core::int*
+  function f0() → core::int
     return 42;
-  function f1() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
+  function f1() → asy::Future<core::int> async /* futureValueType= core::int */ 
     return 42;
-  function f2() → core::int* {
+  function f2() → core::int {
     return 42;
   }
-  function f3() → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+  function f3() → asy::Future<core::int> async /* futureValueType= core::int */ {
     return 42;
   }
-  function f4() → core::Iterable<core::int*>* sync* {
+  function f4() → core::Iterable<core::int> sync* {
     yield 42;
   }
-  function f5() → asy::Stream<core::int*>* async* {
+  function f5() → asy::Stream<core::int> async* {
     yield 42;
   }
-  function f6() → core::num*
+  function f6() → core::num
     return 42;
   function f7() → dynamic
-    return f7(){() →* dynamic};
-  function f8() → asy::Stream<core::int*>*
-    return f5(){() →* asy::Stream<core::int*>*};
-  () →* core::int* v0 = f0;
-  () →* asy::Future<core::int*>* v1 = f1;
-  () →* core::int* v2 = f2;
-  () →* asy::Future<core::int*>* v3 = f3;
-  () →* core::Iterable<core::int*>* v4 = f4;
-  () →* asy::Stream<core::int*>* v5 = f5;
-  () →* core::num* v6 = f6;
-  () →* dynamic v7 = f7;
-  () →* asy::Stream<core::int*>* v8 = f8;
+    return f7(){() → dynamic};
+  function f8() → asy::Stream<core::int>
+    return f5(){() → asy::Stream<core::int>};
+  () → core::int v0 = f0;
+  () → asy::Future<core::int> v1 = f1;
+  () → core::int v2 = f2;
+  () → asy::Future<core::int> v3 = f3;
+  () → core::Iterable<core::int> v4 = f4;
+  () → asy::Stream<core::int> v5 = f5;
+  () → core::num v6 = f6;
+  () → dynamic v7 = f7;
+  () → asy::Stream<core::int> v8 = f8;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart b/pkg/front_end/testcases/inference/infer_method_function_typed.dart
index b4737e8..80bab39 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -18,10 +18,10 @@
   void x(value());
 }
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 g(B b) {
-  b. /*@target=B.x*/ x(/*@ typeArgs=() ->* dynamic */ f());
+  b. /*@target=B.x*/ x(/*@typeArgs=() -> dynamic*/ f());
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.textual_outline.expect
index 498cc31..68c40ee 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef int F();
@@ -11,6 +10,6 @@
   void x(value());
 }
 
-T f<T>() => null;
+T f<T>() => throw '';
 g(B b) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.textual_outline_modelled.expect
index 331b1e1..c368f39 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 abstract class A {
   void x(F value);
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.expect
index abae228..53547a8 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract method x(() →* core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract method x(() →* dynamic value) → void;
+  abstract method x(() → dynamic value) → void;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method g(self::B* b) → dynamic {
-  b.{self::B::x}(self::f<() →* dynamic>()){(() →* dynamic) →* void};
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method g(self::B b) → dynamic {
+  b.{self::B::x}(self::f<() → dynamic>()){(() → dynamic) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.modular.expect
index abae228..53547a8 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.modular.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract method x(() →* core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract method x(() →* dynamic value) → void;
+  abstract method x(() → dynamic value) → void;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method g(self::B* b) → dynamic {
-  b.{self::B::x}(self::f<() →* dynamic>()){(() →* dynamic) →* void};
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method g(self::B b) → dynamic {
+  b.{self::B::x}(self::f<() → dynamic>()){(() → dynamic) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.outline.expect
index 70becba..b551b90 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.outline.expect
@@ -1,31 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract method x(() →* core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract method x(() →* dynamic value) → void;
+  abstract method x(() → dynamic value) → void;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
-static method g(self::B* b) → dynamic
+static method g(self::B b) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.transformed.expect
index abae228..53547a8 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.transformed.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract method x(() →* core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract method x(() →* dynamic value) → void;
+  abstract method x(() → dynamic value) → void;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method g(self::B* b) → dynamic {
-  b.{self::B::x}(self::f<() →* dynamic>()){(() →* dynamic) →* void};
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method g(self::B b) → dynamic {
+  b.{self::B::x}(self::f<() → dynamic>()){(() → dynamic) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart b/pkg/front_end/testcases/inference/infer_method_missing_params.dart
index d82dc58..ef8130c 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.textual_outline.expect
index 31a8b23..25f7d42 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.textual_outline_modelled.expect
index 31a8b23..25f7d42 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.expect
index 4b3051b..591eef0 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -35,61 +35,31 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract method f(core::int* x, core::int* y) → core::int*;
-  abstract method g(core::int* x, [core::int* y = #C1]) → core::int*;
-  abstract method h(core::int* x, {core::int* y = #C1}) → core::int*;
-  abstract method i(core::int* x, {core::int* y = #C1}) → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x, core::int y) → core::int;
+  abstract method g(core::int x, [core::int y = #C1]) → core::int;
+  abstract method h(core::int x, {core::int y = #C1}) → core::int;
+  abstract method i(core::int x, {core::int y = #C1}) → core::int;
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method f(core::int* x) → core::int*;
-  abstract method g(core::int* x) → core::int*;
-  abstract method h(core::int* x) → core::int*;
-  abstract method i(core::int* x, {core::int* z = #C1}) → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x) → core::int;
+  abstract method g(core::int x) → core::int;
+  abstract method h(core::int x) → core::int;
+  abstract method i(core::int x, {core::int z = #C1}) → core::int;
 }
 abstract class C extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   abstract method f(invalid-type x, invalid-type y) → invalid-type;
-  abstract method g(core::int* x, [core::int* y = #C1]) → core::int*;
-  abstract method h(core::int* x, {core::int* y = #C1}) → core::int*;
+  abstract method g(core::int x, [core::int y = #C1]) → core::int;
+  abstract method h(core::int x, {core::int y = #C1}) → core::int;
   abstract method i(invalid-type x, {invalid-type y = #C1, invalid-type z = #C1}) → invalid-type;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.modular.expect
index 4b3051b..591eef0 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -35,61 +35,31 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract method f(core::int* x, core::int* y) → core::int*;
-  abstract method g(core::int* x, [core::int* y = #C1]) → core::int*;
-  abstract method h(core::int* x, {core::int* y = #C1}) → core::int*;
-  abstract method i(core::int* x, {core::int* y = #C1}) → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x, core::int y) → core::int;
+  abstract method g(core::int x, [core::int y = #C1]) → core::int;
+  abstract method h(core::int x, {core::int y = #C1}) → core::int;
+  abstract method i(core::int x, {core::int y = #C1}) → core::int;
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method f(core::int* x) → core::int*;
-  abstract method g(core::int* x) → core::int*;
-  abstract method h(core::int* x) → core::int*;
-  abstract method i(core::int* x, {core::int* z = #C1}) → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x) → core::int;
+  abstract method g(core::int x) → core::int;
+  abstract method h(core::int x) → core::int;
+  abstract method i(core::int x, {core::int z = #C1}) → core::int;
 }
 abstract class C extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   abstract method f(invalid-type x, invalid-type y) → invalid-type;
-  abstract method g(core::int* x, [core::int* y = #C1]) → core::int*;
-  abstract method h(core::int* x, {core::int* y = #C1}) → core::int*;
+  abstract method g(core::int x, [core::int y = #C1]) → core::int;
+  abstract method h(core::int x, {core::int y = #C1}) → core::int;
   abstract method i(invalid-type x, {invalid-type y = #C1, invalid-type z = #C1}) → invalid-type;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.outline.expect
index a063f88..96f4708 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -35,58 +35,28 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract method f(core::int* x, core::int* y) → core::int*;
-  abstract method g(core::int* x, [core::int* y = null]) → core::int*;
-  abstract method h(core::int* x, {core::int* y = null}) → core::int*;
-  abstract method i(core::int* x, {core::int* y = null}) → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x, core::int y) → core::int;
+  abstract method g(core::int x, [core::int y = null]) → core::int;
+  abstract method h(core::int x, {core::int y = null}) → core::int;
+  abstract method i(core::int x, {core::int y = null}) → core::int;
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract method f(core::int* x) → core::int*;
-  abstract method g(core::int* x) → core::int*;
-  abstract method h(core::int* x) → core::int*;
-  abstract method i(core::int* x, {core::int* z = null}) → core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int x) → core::int;
+  abstract method g(core::int x) → core::int;
+  abstract method h(core::int x) → core::int;
+  abstract method i(core::int x, {core::int z = null}) → core::int;
 }
 abstract class C extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   abstract method f(invalid-type x, invalid-type y) → invalid-type;
-  abstract method g(core::int* x, [core::int* y = null]) → core::int*;
-  abstract method h(core::int* x, {core::int* y = null}) → core::int*;
+  abstract method g(core::int x, [core::int y = null]) → core::int;
+  abstract method h(core::int x, {core::int y = null}) → core::int;
   abstract method i(invalid-type x, {invalid-type y = null, invalid-type z = null}) → invalid-type;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart
index 61fccbe..dd844e2 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,7 +10,7 @@
 }
 
 class D {
-  int foo;
+  int foo = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.textual_outline.expect
index f1a6b35..c1ea0af 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C extends D {
@@ -6,7 +5,7 @@
 }
 
 class D {
-  int foo;
+  int foo = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.textual_outline_modelled.expect
index f1a6b35..c1ea0af 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C extends D {
@@ -6,7 +5,7 @@
 }
 
 class D {
-  int foo;
+  int foo = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.expect
index 516ea9a..814f5b1 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::D {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::D::•()
     ;
-  set foo(core::int* x) → void {}
+  set foo(core::int x) → void {}
 }
 class D extends core::Object {
-  field core::int* foo = null;
-  synthetic constructor •() → self::D*
+  field core::int foo = 0;
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.modular.expect
index 516ea9a..814f5b1 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::D {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::D::•()
     ;
-  set foo(core::int* x) → void {}
+  set foo(core::int x) → void {}
 }
 class D extends core::Object {
-  field core::int* foo = null;
-  synthetic constructor •() → self::D*
+  field core::int foo = 0;
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.outline.expect
index 2749c8b..39aa391 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::D {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  set foo(core::int* x) → void
+  set foo(core::int x) → void
     ;
 }
 class D extends core::Object {
-  field core::int* foo;
-  synthetic constructor •() → self::D*
+  field core::int foo;
+  synthetic constructor •() → self::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.transformed.expect
index 516ea9a..814f5b1 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::D {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::D::•()
     ;
-  set foo(core::int* x) → void {}
+  set foo(core::int x) → void {}
 }
 class D extends core::Object {
-  field core::int* foo = null;
-  synthetic constructor •() → self::D*
+  field core::int foo = 0;
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart
index d018cc5..bee5d20 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.textual_outline.expect
index 6305716..275351d 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C extends D {
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.textual_outline_modelled.expect
index 6305716..275351d 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C extends D {
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.expect
index 84b9408..3c221c2 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::D {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::D::•()
     ;
-  set foo(core::int* x) → void {}
+  set foo(core::int x) → void {}
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  set foo(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set foo(core::int x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.modular.expect
index 84b9408..3c221c2 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::D {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::D::•()
     ;
-  set foo(core::int* x) → void {}
+  set foo(core::int x) → void {}
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  set foo(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set foo(core::int x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.outline.expect
index f6cb05c..ac9ecfb 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.outline.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::D {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  set foo(core::int* x) → void
+  set foo(core::int x) → void
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  set foo(core::int* x) → void
+  set foo(core::int x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.transformed.expect
index 84b9408..3c221c2 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::D {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::D::•()
     ;
-  set foo(core::int* x) → void {}
+  set foo(core::int x) → void {}
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  set foo(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set foo(core::int x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression.dart b/pkg/front_end/testcases/inference/infer_prefix_expression.dart
index e560aca..5c06bcc 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression.dart
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.textual_outline.expect
index 5b25c8a..a4602b1 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var a_not = !true;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.textual_outline_modelled.expect
index 6b119bc..927498a 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.expect b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.expect
index ec7b742..1609795 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_not = !true;
-static field core::int* a_complement = 1.{core::int::~}(){() →* core::int*};
-static field core::int* a_negate = 1.{core::int::unary-}(){() →* core::int*};
+static field core::bool a_not = !true;
+static field core::int a_complement = 1.{core::int::~}(){() → core::int};
+static field core::int a_negate = 1.{core::int::unary-}(){() → core::int};
 static method main() → dynamic {
   self::a_not;
   self::a_complement;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.modular.expect
index ec7b742..1609795 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_not = !true;
-static field core::int* a_complement = 1.{core::int::~}(){() →* core::int*};
-static field core::int* a_negate = 1.{core::int::unary-}(){() →* core::int*};
+static field core::bool a_not = !true;
+static field core::int a_complement = 1.{core::int::~}(){() → core::int};
+static field core::int a_negate = 1.{core::int::unary-}(){() → core::int};
 static method main() → dynamic {
   self::a_not;
   self::a_complement;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.outline.expect
index 5594f99..4f90aa6 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_not;
-static field core::int* a_complement;
-static field core::int* a_negate;
+static field core::bool a_not;
+static field core::int a_complement;
+static field core::int a_negate;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.transformed.expect
index 23ef7a8..991b4b8 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_not = !true;
-static field core::int* a_complement = 1.{core::int::~}(){() →* core::int*};
-static field core::int* a_negate = 1.{core::int::unary-}(){() →* core::int*};
+static field core::bool a_not = !true;
+static field core::int a_complement = 1.{core::int::~}(){() → core::int};
+static field core::int a_negate = 1.{core::int::unary-}(){() → core::int};
 static method main() → dynamic {
   self::a_not;
   self::a_complement;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart
index d12427a..e0ac0b7 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.textual_outline.expect
index dc28335..c9d8c68 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.textual_outline_modelled.expect
index 5d232fa..1cedf13 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.expect b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.expect
index 2c6f832..dc773dd 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •() → self::A*
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ~() → core::int*
+  operator ~() → core::int
     return 1;
-  operator unary-() → core::double*
+  operator unary-() → core::double
     return 2.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field core::int* v_complement = self::a.{self::A::~}(){() →* core::int*};
-static field core::double* v_negate = self::a.{self::A::unary-}(){() →* core::double*};
+static field self::A a = new self::A::•();
+static field core::int v_complement = self::a.{self::A::~}(){() → core::int};
+static field core::double v_negate = self::a.{self::A::unary-}(){() → core::double};
 static method main() → dynamic {
   self::a;
   self::v_complement;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.modular.expect
index 2c6f832..dc773dd 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.modular.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •() → self::A*
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ~() → core::int*
+  operator ~() → core::int
     return 1;
-  operator unary-() → core::double*
+  operator unary-() → core::double
     return 2.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field core::int* v_complement = self::a.{self::A::~}(){() →* core::int*};
-static field core::double* v_negate = self::a.{self::A::unary-}(){() →* core::double*};
+static field self::A a = new self::A::•();
+static field core::int v_complement = self::a.{self::A::~}(){() → core::int};
+static field core::double v_negate = self::a.{self::A::unary-}(){() → core::double};
 static method main() → dynamic {
   self::a;
   self::v_complement;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.outline.expect
index c5878c4..c9843a1 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •() → self::A*
+  constructor •() → self::A
     ;
-  operator ~() → core::int*
+  operator ~() → core::int
     ;
-  operator unary-() → core::double*
+  operator unary-() → core::double
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a;
-static field core::int* v_complement;
-static field core::double* v_negate;
+static field self::A a;
+static field core::int v_complement;
+static field core::double v_negate;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.transformed.expect
index 2c6f832..dc773dd 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.transformed.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •() → self::A*
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ~() → core::int*
+  operator ~() → core::int
     return 1;
-  operator unary-() → core::double*
+  operator unary-() → core::double
     return 2.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field core::int* v_complement = self::a.{self::A::~}(){() →* core::int*};
-static field core::double* v_negate = self::a.{self::A::unary-}(){() →* core::double*};
+static field self::A a = new self::A::•();
+static field core::int v_complement = self::a.{self::A::~}(){() → core::int};
+static field core::double v_negate = self::a.{self::A::unary-}(){() → core::double};
 static method main() → dynamic {
   self::a;
   self::v_complement;
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart b/pkg/front_end/testcases/inference/infer_rethrow.dart
index e5b6dde..429181b 100644
--- a/pkg/front_end/testcases/inference/infer_rethrow.dart
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_rethrow.dart.textual_outline.expect
index c2a28c2..a3b6c53 100644
--- a/pkg/front_end/testcases/inference/infer_rethrow.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 test(f(), g()) {}
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_rethrow.dart.textual_outline_modelled.expect
index d2b8e93..8a9809c 100644
--- a/pkg/front_end/testcases/inference/infer_rethrow.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.expect b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.expect
index 1e36c8b..ff8d755 100644
--- a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.expect
@@ -1,12 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method test(() →* dynamic f, () →* dynamic g) → dynamic {
+static method test(() → dynamic f, () → dynamic g) → dynamic {
   try {
-    f(){() →* dynamic};
+    f(){() → dynamic};
   }
-  on dynamic catch(final dynamic _) {
-    g(){() →* dynamic};
+  on core::Object catch(final core::Object _) {
+    g(){() → dynamic};
     rethrow;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.modular.expect
index 1e36c8b..ff8d755 100644
--- a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.modular.expect
@@ -1,12 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method test(() →* dynamic f, () →* dynamic g) → dynamic {
+static method test(() → dynamic f, () → dynamic g) → dynamic {
   try {
-    f(){() →* dynamic};
+    f(){() → dynamic};
   }
-  on dynamic catch(final dynamic _) {
-    g(){() →* dynamic};
+  on core::Object catch(final core::Object _) {
+    g(){() → dynamic};
     rethrow;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.outline.expect
index f5034cd..bee51fa 100644
--- a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
-static method test(() →* dynamic f, () →* dynamic g) → dynamic
+static method test(() → dynamic f, () → dynamic g) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.transformed.expect
index 1e36c8b..ff8d755 100644
--- a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.transformed.expect
@@ -1,12 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method test(() →* dynamic f, () →* dynamic g) → dynamic {
+static method test(() → dynamic f, () → dynamic g) → dynamic {
   try {
-    f(){() →* dynamic};
+    f(){() → dynamic};
   }
-  on dynamic catch(final dynamic _) {
-    g(){() →* dynamic};
+  on core::Object catch(final core::Object _) {
+    g(){() → dynamic};
     rethrow;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart
index 3c3b35d..7b200b6 100644
--- a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart
+++ b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 List<String> strings() {
-  var /*@ type=Iterable<String*>* */ stuff = /*@ typeArgs=dynamic */ []
-      . /*@ typeArgs=String* */ /*@target=Iterable.expand*/ expand(
-          /*@ returnType=List<String*>* */ (/*@ type=dynamic */ i) {
+  var /*@type=Iterable<String>*/ stuff = /*@ typeArgs=dynamic */ []
+      . /*@typeArgs=String*/ /*@target=Iterable.expand*/ expand(
+          /*@returnType=List<String>*/ (/*@ type=dynamic */ i) {
     return <String>[];
   });
   return stuff. /*@target=Iterable.toList*/ toList();
diff --git a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.textual_outline.expect
index c48500e..4707e1b 100644
--- a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<String> strings() {}
diff --git a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.textual_outline_modelled.expect
index c48500e..4707e1b 100644
--- a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<String> strings() {}
diff --git a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.expect b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.expect
index cdbf9e5..b89f5a9 100644
--- a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method strings() → core::List<core::String*>* {
-  core::Iterable<core::String*>* stuff = <dynamic>[].{core::Iterable::expand}<core::String*>((dynamic i) → core::List<core::String*>* {
-    return <core::String*>[];
-  }){((dynamic) →* core::Iterable<core::String*>*) →* core::Iterable<core::String*>*};
-  return stuff.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+static method strings() → core::List<core::String> {
+  core::Iterable<core::String> stuff = <dynamic>[].{core::Iterable::expand}<core::String>((dynamic i) → core::List<core::String> {
+    return <core::String>[];
+  }){((dynamic) → core::Iterable<core::String>) → core::Iterable<core::String>};
+  return stuff.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::String>};
 }
 static method main() → dynamic {
   self::strings();
diff --git a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.modular.expect
index cdbf9e5..b89f5a9 100644
--- a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method strings() → core::List<core::String*>* {
-  core::Iterable<core::String*>* stuff = <dynamic>[].{core::Iterable::expand}<core::String*>((dynamic i) → core::List<core::String*>* {
-    return <core::String*>[];
-  }){((dynamic) →* core::Iterable<core::String*>*) →* core::Iterable<core::String*>*};
-  return stuff.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+static method strings() → core::List<core::String> {
+  core::Iterable<core::String> stuff = <dynamic>[].{core::Iterable::expand}<core::String>((dynamic i) → core::List<core::String> {
+    return <core::String>[];
+  }){((dynamic) → core::Iterable<core::String>) → core::Iterable<core::String>};
+  return stuff.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::String>};
 }
 static method main() → dynamic {
   self::strings();
diff --git a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.outline.expect
index 628cf39..a8ce442 100644
--- a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method strings() → core::List<core::String*>*
+static method strings() → core::List<core::String>
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.transformed.expect
index 02da645..d2ce584 100644
--- a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method strings() → core::List<core::String*>* {
-  core::Iterable<core::String*>* stuff = core::_GrowableList::•<dynamic>(0).{core::Iterable::expand}<core::String*>((dynamic i) → core::List<core::String*>* {
-    return core::_GrowableList::•<core::String*>(0);
-  }){((dynamic) →* core::Iterable<core::String*>*) →* core::Iterable<core::String*>*};
-  return stuff.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+static method strings() → core::List<core::String> {
+  core::Iterable<core::String> stuff = core::_GrowableList::•<dynamic>(0).{core::Iterable::expand}<core::String>((dynamic i) → core::List<core::String> {
+    return core::_GrowableList::•<core::String>(0);
+  }){((dynamic) → core::Iterable<core::String>) → core::Iterable<core::String>};
+  return stuff.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::String>};
 }
 static method main() → dynamic {
   self::strings();
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart
index eecbe3e..972b299 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.textual_outline.expect
index 11143e3..659aede 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.textual_outline_modelled.expect
index 2ae53a8..5e7be8e 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.expect
index 3259075..c782bb9 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static set foo(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static set foo(core::int x) → void {}
 }
-static set bar(core::int* x) → void {}
+static set bar(core::int x) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.modular.expect
index 3259075..c782bb9 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.modular.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static set foo(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static set foo(core::int x) → void {}
 }
-static set bar(core::int* x) → void {}
+static set bar(core::int x) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.outline.expect
index a04ec21..00ebe98 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  static set foo(core::int* x) → void
+  static set foo(core::int x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static set bar(core::int* x) → void
+static set bar(core::int x) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.transformed.expect
index 3259075..c782bb9 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.transformed.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static set foo(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static set foo(core::int x) → void {}
 }
-static set bar(core::int* x) → void {}
+static set bar(core::int x) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart
index e2d45c7..219dca0 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.textual_outline.expect
index 2c75d8f..250fada 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.textual_outline_modelled.expect
index 2c75d8f..250fada 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.expect
index 8778884..3b99533 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::double*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::double;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract set x(core::double* value) → void;
+  abstract set x(core::double value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.modular.expect
index 8778884..3b99533 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::double*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::double;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract set x(core::double* value) → void;
+  abstract set x(core::double value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.outline.expect
index 666671e..9bf49dc 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract get x() → core::double*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::double;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract set x(core::double* value) → void;
+  abstract set x(core::double value) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.transformed.expect
index 8778884..3b99533 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::double*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::double;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract set x(core::double* value) → void;
+  abstract set x(core::double value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart
index 0b5e995..c0ae645 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.textual_outline.expect
index acb59bc..9f48a64 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A implements B {
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.textual_outline_modelled.expect
index bc86501..c70b4f6 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class B implements C {
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.expect
index 70ec7fa..11e507b 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int value) → void {}
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int value) → void;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.modular.expect
index 70ec7fa..11e507b 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.modular.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int value) → void {}
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int value) → void;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.outline.expect
index 9618de0..8627281 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.outline.expect
@@ -1,52 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  set x(core::int* value) → void
+  set x(core::int value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int value) → void;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int value) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.transformed.expect
index 70ec7fa..11e507b 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.transformed.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int value) → void {}
 }
 abstract class B extends core::Object implements self::C {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int value) → void;
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract set x(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::int value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart
index 7cc3567..6559900 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -18,10 +18,10 @@
   void set x(value());
 }
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 g(B b) {
-  b. /*@target=B.x*/ x = /*@ typeArgs=() ->* dynamic */ f();
+  b. /*@target=B.x*/ x = /*@typeArgs=() -> dynamic*/ f();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.textual_outline.expect
index 3ab13ad..209314b 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef int F();
@@ -11,6 +10,6 @@
   void set x(value());
 }
 
-T f<T>() => null;
+T f<T>() => throw '';
 g(B b) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.textual_outline_modelled.expect
index 80b45c3..02a7aa4 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 abstract class A {
   void set x(F value);
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.expect
index 6c97fd8..bd97f3e 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(() →* core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract set x(() →* dynamic value) → void;
+  abstract set x(() → dynamic value) → void;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method g(self::B* b) → dynamic {
-  b.{self::B::x} = self::f<() →* dynamic>();
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method g(self::B b) → dynamic {
+  b.{self::B::x} = self::f<() → dynamic>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.modular.expect
index 6c97fd8..bd97f3e 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.modular.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(() →* core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract set x(() →* dynamic value) → void;
+  abstract set x(() → dynamic value) → void;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method g(self::B* b) → dynamic {
-  b.{self::B::x} = self::f<() →* dynamic>();
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method g(self::B b) → dynamic {
+  b.{self::B::x} = self::f<() → dynamic>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.outline.expect
index f027c5f..1f38275 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.outline.expect
@@ -1,31 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract set x(() →* core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract set x(() →* dynamic value) → void;
+  abstract set x(() → dynamic value) → void;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
-static method g(self::B* b) → dynamic
+static method g(self::B b) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.transformed.expect
index 6c97fd8..bd97f3e 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.transformed.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(() →* core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract set x(() →* dynamic value) → void;
+  abstract set x(() → dynamic value) → void;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method g(self::B* b) → dynamic {
-  b.{self::B::x} = self::f<() →* dynamic>();
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method g(self::B b) → dynamic {
+  b.{self::B::x} = self::f<() → dynamic>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart
index 86fd389..b8c2734 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.textual_outline.expect
index 831f785..eb6e1ec 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.textual_outline_modelled.expect
index 831f785..eb6e1ec 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.expect
index a14272b..1576c76 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set x(core::int* i) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int i) → void {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  set x(core::Object* o) → void {}
+  set x(core::Object o) → void {}
 }
 static method main() → dynamic {
   new self::B::•().{self::B::x} = "hello";
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.modular.expect
index a14272b..1576c76 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set x(core::int* i) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int i) → void {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  set x(core::Object* o) → void {}
+  set x(core::Object o) → void {}
 }
 static method main() → dynamic {
   new self::B::•().{self::B::x} = "hello";
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.outline.expect
index 2a7cb8a..667399f 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  set x(core::int* i) → void
+  set x(core::int i) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  set x(core::Object* o) → void
+  set x(core::Object o) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.transformed.expect
index a14272b..1576c76 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.transformed.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  set x(core::int* i) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int i) → void {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  set x(core::Object* o) → void {}
+  set x(core::Object o) → void {}
 }
 static method main() → dynamic {
   new self::B::•().{self::B::x} = "hello";
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively.dart b/pkg/front_end/testcases/inference/infer_statics_transitively.dart
index d1876c3..8c3c5d0 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively.dart
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.textual_outline.expect
index a053287..a2adc8c 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_statics_transitively_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.textual_outline_modelled.expect
index a053287..a2adc8c 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_statics_transitively_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.expect b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.expect
index 445bbcb..f67a543b 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_transitively_a.dart" as inf;
 
 import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
 
-static final field core::int* m1 = inf::a1;
-static final field core::int* m2 = inf::A::a2;
+static final field core::int m1 = inf::a1;
+static final field core::int m2 = inf::A::a2;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = self::m1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 import "infer_statics_transitively_b.dart" as inf2;
@@ -23,29 +23,19 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2 = inf2::b1;
-  synthetic constructor •() → inf::A*
+  static final field core::int a2 = inf2::b1;
+  synthetic constructor •() → inf::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1 = self::m2;
+static final field core::int a1 = self::m2;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf2;
 import "dart:core" as core;
 
-static final field core::int* b1 = 2;
+static final field core::int b1 = 2;
 static method main() → dynamic {
   inf2::b1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.modular.expect
index 445bbcb..f67a543b 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.modular.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_transitively_a.dart" as inf;
 
 import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
 
-static final field core::int* m1 = inf::a1;
-static final field core::int* m2 = inf::A::a2;
+static final field core::int m1 = inf::a1;
+static final field core::int m2 = inf::A::a2;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = self::m1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 import "infer_statics_transitively_b.dart" as inf2;
@@ -23,29 +23,19 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2 = inf2::b1;
-  synthetic constructor •() → inf::A*
+  static final field core::int a2 = inf2::b1;
+  synthetic constructor •() → inf::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1 = self::m2;
+static final field core::int a1 = self::m2;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf2;
 import "dart:core" as core;
 
-static final field core::int* b1 = 2;
+static final field core::int b1 = 2;
 static method main() → dynamic {
   inf2::b1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.outline.expect
index 2813b54..eaa3baf 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.outline.expect
@@ -1,17 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
 
-static final field core::int* m1;
-static final field core::int* m2;
+static final field core::int m1;
+static final field core::int m2;
 static method foo() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
@@ -19,28 +19,18 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2;
-  synthetic constructor •() → self2::A*
+  static final field core::int a2;
+  synthetic constructor •() → self2::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1;
+static final field core::int a1;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static final field core::int* b1;
+static final field core::int b1;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.transformed.expect
index 445bbcb..f67a543b 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.transformed.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_transitively_a.dart" as inf;
 
 import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
 
-static final field core::int* m1 = inf::a1;
-static final field core::int* m2 = inf::A::a2;
+static final field core::int m1 = inf::a1;
+static final field core::int m2 = inf::A::a2;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = self::m1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 import "infer_statics_transitively_b.dart" as inf2;
@@ -23,29 +23,19 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2 = inf2::b1;
-  synthetic constructor •() → inf::A*
+  static final field core::int a2 = inf2::b1;
+  synthetic constructor •() → inf::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1 = self::m2;
+static final field core::int a1 = self::m2;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf2;
 import "dart:core" as core;
 
-static final field core::int* b1 = 2;
+static final field core::int b1 = 2;
 static method main() → dynamic {
   inf2::b1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart
index dac96b8..40dbc28 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.textual_outline.expect
index 4dfa0fa..3c1f88e 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 const x1 = 1;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.textual_outline_modelled.expect
index 4dfa0fa..3c1f88e 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 const x1 = 1;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.expect
index a530b9e..9bc4861 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* x1 = #C1;
-static final field core::int* x2 = 1;
-static final field core::int* y1 = #C1;
-static final field core::int* y2 = self::x2;
+static const field core::int x1 = #C1;
+static final field core::int x2 = 1;
+static final field core::int y1 = #C1;
+static final field core::int y2 = self::x2;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = self::y1;
   i = self::y2;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.modular.expect
index a530b9e..9bc4861 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* x1 = #C1;
-static final field core::int* x2 = 1;
-static final field core::int* y1 = #C1;
-static final field core::int* y2 = self::x2;
+static const field core::int x1 = #C1;
+static final field core::int x2 = 1;
+static final field core::int y1 = #C1;
+static final field core::int y2 = self::x2;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = self::y1;
   i = self::y2;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.outline.expect
index 376e563..ecb9a0b 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* x1 = 1;
-static final field core::int* x2;
-static final field core::int* y1;
-static final field core::int* y2;
+static const field core::int x1 = 1;
+static final field core::int x2;
+static final field core::int y1;
+static final field core::int y2;
 static method foo() → dynamic
   ;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.transformed.expect
index a530b9e..9bc4861 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* x1 = #C1;
-static final field core::int* x2 = 1;
-static final field core::int* y1 = #C1;
-static final field core::int* y2 = self::x2;
+static const field core::int x1 = #C1;
+static final field core::int x2 = 1;
+static final field core::int y1 = #C1;
+static final field core::int y2 = self::x2;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = self::y1;
   i = self::y2;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart
index 0d8a590..16e92d1 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.textual_outline.expect
index 0a748e0..3ff7fa6 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_statics_transitively3_a.dart' show a1, A;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.textual_outline_modelled.expect
index 8276300..d1e56fa 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_statics_transitively3_a.dart' as p show A, a2;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.expect
index 0f736d7..8b9a4f0 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.expect
@@ -1,18 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_statics_transitively3_a.dart" show a1, A;
 import "org-dartlang-testcase:///infer_statics_transitively3_a.dart" as p show a2, A;
 
-static const field core::int* t1 = #C1;
-static const field core::int* t2 = #C1;
-static const field core::int* t3 = #C2;
-static const field core::int* t4 = #C3;
+static const field core::int t1 = #C1;
+static const field core::int t2 = #C1;
+static const field core::int t3 = #C2;
+static const field core::int t4 = #C3;
 static const field dynamic t5 = #C4;
 static const field dynamic t6 = #C4;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = #C1;
   i = #C1;
   i = #C2;
@@ -20,28 +20,18 @@
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class A extends core::Object {
   static const field dynamic a3 = #C4;
-  synthetic constructor •() → self2::A*
+  synthetic constructor •() → self2::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* a1 = #C2;
-static const field core::int* a2 = #C3;
+static const field core::int a1 = #C2;
+static const field core::int a2 = #C3;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.modular.expect
index 0f736d7..8b9a4f0 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.modular.expect
@@ -1,18 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_statics_transitively3_a.dart" show a1, A;
 import "org-dartlang-testcase:///infer_statics_transitively3_a.dart" as p show a2, A;
 
-static const field core::int* t1 = #C1;
-static const field core::int* t2 = #C1;
-static const field core::int* t3 = #C2;
-static const field core::int* t4 = #C3;
+static const field core::int t1 = #C1;
+static const field core::int t2 = #C1;
+static const field core::int t3 = #C2;
+static const field core::int t4 = #C3;
 static const field dynamic t5 = #C4;
 static const field dynamic t6 = #C4;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = #C1;
   i = #C1;
   i = #C2;
@@ -20,28 +20,18 @@
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class A extends core::Object {
   static const field dynamic a3 = #C4;
-  synthetic constructor •() → self2::A*
+  synthetic constructor •() → self2::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* a1 = #C2;
-static const field core::int* a2 = #C3;
+static const field core::int a1 = #C2;
+static const field core::int a2 = #C3;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.outline.expect
index f02cb50..b6d51b5 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_transitively3_a.dart" as inf;
@@ -6,10 +6,10 @@
 import "org-dartlang-testcase:///infer_statics_transitively3_a.dart" show a1, A;
 import "org-dartlang-testcase:///infer_statics_transitively3_a.dart" as p show a2, A;
 
-static const field core::int* t1 = 1;
-static const field core::int* t2 = self::t1;
-static const field core::int* t3 = inf::a1;
-static const field core::int* t4 = inf::a2;
+static const field core::int t1 = 1;
+static const field core::int t2 = self::t1;
+static const field core::int t3 = inf::a1;
+static const field core::int t4 = inf::a2;
 static const field dynamic t5 = inf::A::a3;
 static const field dynamic t6 = inf::A::a3;
 static method foo() → dynamic
@@ -17,27 +17,17 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
 class A extends core::Object {
   static const field dynamic a3 = null;
-  synthetic constructor •() → inf::A*
+  synthetic constructor •() → inf::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* a1 = 3;
-static const field core::int* a2 = 4;
+static const field core::int a1 = 3;
+static const field core::int a2 = 4;
 static method main() → dynamic
   ;
 
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.transformed.expect
index 0f736d7..8b9a4f0 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.transformed.expect
@@ -1,18 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_statics_transitively3_a.dart" show a1, A;
 import "org-dartlang-testcase:///infer_statics_transitively3_a.dart" as p show a2, A;
 
-static const field core::int* t1 = #C1;
-static const field core::int* t2 = #C1;
-static const field core::int* t3 = #C2;
-static const field core::int* t4 = #C3;
+static const field core::int t1 = #C1;
+static const field core::int t2 = #C1;
+static const field core::int t3 = #C2;
+static const field core::int t4 = #C3;
 static const field dynamic t5 = #C4;
 static const field dynamic t6 = #C4;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = #C1;
   i = #C1;
   i = #C2;
@@ -20,28 +20,18 @@
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class A extends core::Object {
   static const field dynamic a3 = #C4;
-  synthetic constructor •() → self2::A*
+  synthetic constructor •() → self2::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* a1 = #C2;
-static const field core::int* a2 = #C3;
+static const field core::int a1 = #C2;
+static const field core::int a2 = #C3;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart
index 043ae72..e9a10e1 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 const a1 = 3;
 const a2 = 4;
 
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.textual_outline.expect
index f8bf78c..ef4e7b4 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const a1 = 3;
 const a2 = 4;
 
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.textual_outline_modelled.expect
index d6bc2b5..594222f 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   static const a3 = null;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.expect
index a54e7ab..b7c7d52 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   static const field dynamic a3 = #C1;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* a1 = #C2;
-static const field core::int* a2 = #C3;
+static const field core::int a1 = #C2;
+static const field core::int a2 = #C3;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.modular.expect
index a54e7ab..b7c7d52 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   static const field dynamic a3 = #C1;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* a1 = #C2;
-static const field core::int* a2 = #C3;
+static const field core::int a1 = #C2;
+static const field core::int a2 = #C3;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.outline.expect
index 6924590..71c7f18 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   static const field dynamic a3 = null;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* a1 = 3;
-static const field core::int* a2 = 4;
+static const field core::int a1 = 3;
+static const field core::int a2 = 4;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.transformed.expect
index a54e7ab..b7c7d52 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   static const field dynamic a3 = #C1;
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* a1 = #C2;
-static const field core::int* a2 = #C3;
+static const field core::int a1 = #C2;
+static const field core::int a2 = #C3;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart
index 219c150..90fd29c 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 import 'infer_statics_transitively.dart';
 import 'infer_statics_transitively_b.dart';
 
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.textual_outline.expect
index d83406f..905ce2e 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_statics_transitively.dart';
 import 'infer_statics_transitively_b.dart';
 
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.textual_outline_modelled.expect
index 5e1b884..e6e4d7e 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_statics_transitively.dart';
 import 'infer_statics_transitively_b.dart';
 
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.expect
index 54b40b9..a292144 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_transitively_b.dart" as inf;
@@ -8,51 +8,41 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2 = inf::b1;
-  synthetic constructor •() → self::A*
+  static final field core::int a2 = inf::b1;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1 = test::m2;
+static final field core::int a1 = test::m2;
 static method main() → dynamic {
   self::a1;
 }
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as test;
 import "dart:core" as core;
 import "infer_statics_transitively_a.dart" as inf2;
 
 import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
 
-static final field core::int* m1 = inf2::a1;
-static final field core::int* m2 = inf2::A::a2;
+static final field core::int m1 = inf2::a1;
+static final field core::int m2 = inf2::A::a2;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = test::m1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static final field core::int* b1 = 2;
+static final field core::int b1 = 2;
 static method main() → dynamic {
   inf::b1;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf2;
 import "dart:core" as core;
 import "infer_statics_transitively_b.dart" as inf;
@@ -62,20 +52,10 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2 = inf::b1;
-  synthetic constructor •() → inf2::A*
+  static final field core::int a2 = inf::b1;
+  synthetic constructor •() → inf2::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1 = test::m2;
+static final field core::int a1 = test::m2;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.modular.expect
index 54b40b9..a292144 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_transitively_b.dart" as inf;
@@ -8,51 +8,41 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2 = inf::b1;
-  synthetic constructor •() → self::A*
+  static final field core::int a2 = inf::b1;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1 = test::m2;
+static final field core::int a1 = test::m2;
 static method main() → dynamic {
   self::a1;
 }
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as test;
 import "dart:core" as core;
 import "infer_statics_transitively_a.dart" as inf2;
 
 import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
 
-static final field core::int* m1 = inf2::a1;
-static final field core::int* m2 = inf2::A::a2;
+static final field core::int m1 = inf2::a1;
+static final field core::int m2 = inf2::A::a2;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = test::m1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static final field core::int* b1 = 2;
+static final field core::int b1 = 2;
 static method main() → dynamic {
   inf::b1;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf2;
 import "dart:core" as core;
 import "infer_statics_transitively_b.dart" as inf;
@@ -62,20 +52,10 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2 = inf::b1;
-  synthetic constructor •() → inf2::A*
+  static final field core::int a2 = inf::b1;
+  synthetic constructor •() → inf2::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1 = test::m2;
+static final field core::int a1 = test::m2;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.outline.expect
index 0130840..8fe9220 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -6,46 +6,36 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2;
-  synthetic constructor •() → self::A*
+  static final field core::int a2;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1;
+static final field core::int a1;
 static method main() → dynamic
   ;
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
 
-static final field core::int* m1;
-static final field core::int* m2;
+static final field core::int m1;
+static final field core::int m2;
 static method foo() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static final field core::int* b1;
+static final field core::int b1;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self4;
 import "dart:core" as core;
 
@@ -53,20 +43,10 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2;
-  synthetic constructor •() → self4::A*
+  static final field core::int a2;
+  synthetic constructor •() → self4::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1;
+static final field core::int a1;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.transformed.expect
index 54b40b9..a292144 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_transitively_b.dart" as inf;
@@ -8,51 +8,41 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2 = inf::b1;
-  synthetic constructor •() → self::A*
+  static final field core::int a2 = inf::b1;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1 = test::m2;
+static final field core::int a1 = test::m2;
 static method main() → dynamic {
   self::a1;
 }
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as test;
 import "dart:core" as core;
 import "infer_statics_transitively_a.dart" as inf2;
 
 import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
 
-static final field core::int* m1 = inf2::a1;
-static final field core::int* m2 = inf2::A::a2;
+static final field core::int m1 = inf2::a1;
+static final field core::int m2 = inf2::A::a2;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = test::m1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static final field core::int* b1 = 2;
+static final field core::int b1 = 2;
 static method main() → dynamic {
   inf::b1;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf2;
 import "dart:core" as core;
 import "infer_statics_transitively_b.dart" as inf;
@@ -62,20 +52,10 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2 = inf::b1;
-  synthetic constructor •() → inf2::A*
+  static final field core::int a2 = inf::b1;
+  synthetic constructor •() → inf2::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1 = test::m2;
+static final field core::int a1 = test::m2;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart
index de0a388..a7b6d9e 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 
 import 'infer_statics_transitively.dart';
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.textual_outline.expect
index d83406f..905ce2e 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_statics_transitively.dart';
 import 'infer_statics_transitively_b.dart';
 
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.textual_outline_modelled.expect
index 5e1b884..e6e4d7e 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_statics_transitively.dart';
 import 'infer_statics_transitively_b.dart';
 
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.expect
index 327bcc1..894b7a6 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_transitively_b.dart" as inf;
@@ -8,44 +8,34 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2 = inf::b1;
-  synthetic constructor •() → self::A*
+  static final field core::int a2 = inf::b1;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1 = test::m2;
+static final field core::int a1 = test::m2;
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as test;
 import "dart:core" as core;
 import "infer_statics_transitively_a.dart" as self;
 
 import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
 
-static final field core::int* m1 = self::a1;
-static final field core::int* m2 = self::A::a2;
+static final field core::int m1 = self::a1;
+static final field core::int m2 = self::A::a2;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = test::m1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static final field core::int* b1 = 2;
+static final field core::int b1 = 2;
 static method main() → dynamic {
   inf::b1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.modular.expect
index 327bcc1..894b7a6 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_transitively_b.dart" as inf;
@@ -8,44 +8,34 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2 = inf::b1;
-  synthetic constructor •() → self::A*
+  static final field core::int a2 = inf::b1;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1 = test::m2;
+static final field core::int a1 = test::m2;
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as test;
 import "dart:core" as core;
 import "infer_statics_transitively_a.dart" as self;
 
 import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
 
-static final field core::int* m1 = self::a1;
-static final field core::int* m2 = self::A::a2;
+static final field core::int m1 = self::a1;
+static final field core::int m2 = self::A::a2;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = test::m1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static final field core::int* b1 = 2;
+static final field core::int b1 = 2;
 static method main() → dynamic {
   inf::b1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.outline.expect
index beab73f..a6d298c 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -6,41 +6,31 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2;
-  synthetic constructor •() → self::A*
+  static final field core::int a2;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1;
+static final field core::int a1;
 static method main() → dynamic
   ;
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
 
-static final field core::int* m1;
-static final field core::int* m2;
+static final field core::int m1;
+static final field core::int m2;
 static method foo() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static final field core::int* b1;
+static final field core::int b1;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.transformed.expect
index 327bcc1..894b7a6 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_transitively_b.dart" as inf;
@@ -8,44 +8,34 @@
 import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
 
 class A extends core::Object {
-  static final field core::int* a2 = inf::b1;
-  synthetic constructor •() → self::A*
+  static final field core::int a2 = inf::b1;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::int* a1 = test::m2;
+static final field core::int a1 = test::m2;
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as test;
 import "dart:core" as core;
 import "infer_statics_transitively_a.dart" as self;
 
 import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
 
-static final field core::int* m1 = self::a1;
-static final field core::int* m2 = self::A::a2;
+static final field core::int m1 = self::a1;
+static final field core::int m2 = self::A::a2;
 static method foo() → dynamic {
-  core::int* i;
+  core::int i;
   i = test::m1;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static final field core::int* b1 = 2;
+static final field core::int b1 = 2;
 static method main() → dynamic {
   inf::b1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart
index ea876ed..4ae476c 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 final b1 = 2;
 
 main() {
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.textual_outline.expect
index d14bcfe..01611d6 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 final b1 = 2;
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.textual_outline_modelled.expect
index d14bcfe..01611d6 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 final b1 = 2;
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.expect
index 8c80bfe..ce01e0b 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static final field core::int* b1 = 2;
+static final field core::int b1 = 2;
 static method main() → dynamic {
   self::b1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.modular.expect
index 8c80bfe..ce01e0b 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static final field core::int* b1 = 2;
+static final field core::int b1 = 2;
 static method main() → dynamic {
   self::b1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.outline.expect
index 1634bbb..43194a7 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static final field core::int* b1;
+static final field core::int b1;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.transformed.expect
index 8c80bfe..ce01e0b 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static final field core::int* b1 = 2;
+static final field core::int b1 = 2;
 static method main() → dynamic {
   self::b1;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart
index 85c5145..faf3aa3 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,7 +10,7 @@
 class T {
   static final T foo = m1(m2(m3('', '')));
   static T m1(String m) {
-    return null;
+    return throw '';
   }
 
   static String m2(e) {
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.textual_outline.expect
index 9a6079b..d3d25f6 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_statics_with_method_invocations_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.textual_outline_modelled.expect
index 73b2ef7..bdbc3a1 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_statics_with_method_invocations_a.dart';
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.expect
index 4a992cd..d992be6 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_with_method_invocations_a.dart" as inf;
@@ -6,34 +6,24 @@
 import "org-dartlang-testcase:///infer_statics_with_method_invocations_a.dart";
 
 class T extends core::Object {
-  static final field self::T* foo = self::T::m1(self::T::m2(inf::m3("", "")));
-  synthetic constructor •() → self::T*
+  static final field self::T foo = self::T::m1(self::T::m2(inf::m3("", "")));
+  synthetic constructor •() → self::T
     : super core::Object::•()
     ;
-  static method m1(core::String* m) → self::T* {
-    return null;
+  static method m1(core::String m) → self::T {
+    return throw "";
   }
-  static method m2(dynamic e) → core::String* {
+  static method m2(dynamic e) → core::String {
     return "";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static method m3(core::String* a, core::String* b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
+static method m3(core::String a, core::String b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.modular.expect
index 4a992cd..d992be6 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_with_method_invocations_a.dart" as inf;
@@ -6,34 +6,24 @@
 import "org-dartlang-testcase:///infer_statics_with_method_invocations_a.dart";
 
 class T extends core::Object {
-  static final field self::T* foo = self::T::m1(self::T::m2(inf::m3("", "")));
-  synthetic constructor •() → self::T*
+  static final field self::T foo = self::T::m1(self::T::m2(inf::m3("", "")));
+  synthetic constructor •() → self::T
     : super core::Object::•()
     ;
-  static method m1(core::String* m) → self::T* {
-    return null;
+  static method m1(core::String m) → self::T {
+    return throw "";
   }
-  static method m2(dynamic e) → core::String* {
+  static method m2(dynamic e) → core::String {
     return "";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static method m3(core::String* a, core::String* b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
+static method m3(core::String a, core::String b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.outline.expect
index 68c5138..96b1ccb 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.outline.expect
@@ -1,36 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///infer_statics_with_method_invocations_a.dart";
 
 class T extends core::Object {
-  static final field self::T* foo;
-  synthetic constructor •() → self::T*
+  static final field self::T foo;
+  synthetic constructor •() → self::T
     ;
-  static method m1(core::String* m) → self::T*
+  static method m1(core::String m) → self::T
     ;
-  static method m2(dynamic e) → core::String*
+  static method m2(dynamic e) → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-static method m3(core::String* a, core::String* b, [dynamic a1, dynamic a2]) → dynamic
+static method m3(core::String a, core::String b, [dynamic a1, dynamic a2]) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.transformed.expect
index 4a992cd..d992be6 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_statics_with_method_invocations_a.dart" as inf;
@@ -6,34 +6,24 @@
 import "org-dartlang-testcase:///infer_statics_with_method_invocations_a.dart";
 
 class T extends core::Object {
-  static final field self::T* foo = self::T::m1(self::T::m2(inf::m3("", "")));
-  synthetic constructor •() → self::T*
+  static final field self::T foo = self::T::m1(self::T::m2(inf::m3("", "")));
+  synthetic constructor •() → self::T
     : super core::Object::•()
     ;
-  static method m1(core::String* m) → self::T* {
-    return null;
+  static method m1(core::String m) → self::T {
+    return throw "";
   }
-  static method m2(dynamic e) → core::String* {
+  static method m2(dynamic e) → core::String {
     return "";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 
-static method m3(core::String* a, core::String* b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
+static method m3(core::String a, core::String b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart
index 14eef051..c9acde0 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 m3(String a, String b, [a1, a2]) {}
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.textual_outline.expect
index 9013a73..9908614 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 m3(String a, String b, [a1, a2]) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.textual_outline_modelled.expect
index 9013a73..9908614 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 m3(String a, String b, [a1, a2]) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.expect
index e864516..facde66 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method m3(core::String* a, core::String* b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
+static method m3(core::String a, core::String b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.modular.expect
index e864516..facde66 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method m3(core::String* a, core::String* b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
+static method m3(core::String a, core::String b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.outline.expect
index 92e6635..f577f25 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method m3(core::String* a, core::String* b, [dynamic a1, dynamic a2]) → dynamic
+static method m3(core::String a, core::String b, [dynamic a1, dynamic a2]) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.transformed.expect
index e864516..facde66 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method m3(core::String* a, core::String* b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
+static method m3(core::String a, core::String b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_throw.dart b/pkg/front_end/testcases/inference/infer_throw.dart
index 673ec4e..53940dc 100644
--- a/pkg/front_end/testcases/inference/infer_throw.dart
+++ b/pkg/front_end/testcases/inference/infer_throw.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_throw.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_throw.dart.textual_outline.expect
index e2abaf8..7a172c4 100644
--- a/pkg/front_end/testcases/inference/infer_throw.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_throw.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var t = true;
diff --git a/pkg/front_end/testcases/inference/infer_throw.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_throw.dart.textual_outline_modelled.expect
index f00cd7c..5b649fd 100644
--- a/pkg/front_end/testcases/inference/infer_throw.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_throw.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_throw.dart.weak.expect b/pkg/front_end/testcases/inference/infer_throw.dart.weak.expect
index 8f6f2b1..c0fb5cf 100644
--- a/pkg/front_end/testcases/inference/infer_throw.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_throw.dart.weak.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* t = true;
-static field dynamic a = throw 0;
-static field core::int* b = (throw 0) ?{core::int*} 1 : 2;
-static field core::int* c = self::t ?{core::int*} throw 1 : 2;
-static field core::int* d = self::t ?{core::int*} 1 : throw 2;
+static field core::bool t = true;
+static field Never a = throw 0;
+static field core::int b = (throw 0) ?{core::int} 1 : 2;
+static field core::int c = self::t ?{core::int} throw 1 : 2;
+static field core::int d = self::t ?{core::int} 1 : throw 2;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_throw.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_throw.dart.weak.modular.expect
index 8f6f2b1..c0fb5cf 100644
--- a/pkg/front_end/testcases/inference/infer_throw.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_throw.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* t = true;
-static field dynamic a = throw 0;
-static field core::int* b = (throw 0) ?{core::int*} 1 : 2;
-static field core::int* c = self::t ?{core::int*} throw 1 : 2;
-static field core::int* d = self::t ?{core::int*} 1 : throw 2;
+static field core::bool t = true;
+static field Never a = throw 0;
+static field core::int b = (throw 0) ?{core::int} 1 : 2;
+static field core::int c = self::t ?{core::int} throw 1 : 2;
+static field core::int d = self::t ?{core::int} 1 : throw 2;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_throw.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_throw.dart.weak.outline.expect
index a26c77f..eccf26e 100644
--- a/pkg/front_end/testcases/inference/infer_throw.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_throw.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* t;
-static field dynamic a;
-static field core::int* b;
-static field core::int* c;
-static field core::int* d;
+static field core::bool t;
+static field Never a;
+static field core::int b;
+static field core::int c;
+static field core::int d;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_throw.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_throw.dart.weak.transformed.expect
index 8f6f2b1..c0fb5cf 100644
--- a/pkg/front_end/testcases/inference/infer_throw.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_throw.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* t = true;
-static field dynamic a = throw 0;
-static field core::int* b = (throw 0) ?{core::int*} 1 : 2;
-static field core::int* c = self::t ?{core::int*} throw 1 : 2;
-static field core::int* d = self::t ?{core::int*} 1 : throw 2;
+static field core::bool t = true;
+static field Never a = throw 0;
+static field core::int b = (throw 0) ?{core::int} 1 : 2;
+static field core::int c = self::t ?{core::int} throw 1 : 2;
+static field core::int d = self::t ?{core::int} 1 : throw 2;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart b/pkg/front_end/testcases/inference/infer_throw_downwards.dart
index 937e7e4..c8bf995 100644
--- a/pkg/front_end/testcases/inference/infer_throw_downwards.dart
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 var x = throw /*@typeArgs=dynamic*/ f();
 
 void g() {
-  var /*@type=dynamic */ x = throw /*@typeArgs=dynamic*/ f();
+  var /*@type=Never*/ x = throw /*@typeArgs=dynamic*/ f();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.textual_outline.expect
index 7867ecf..653ae5c 100644
--- a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 var x = throw f();
 void g() {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.textual_outline_modelled.expect
index b75972f..a09c11a 100644
--- a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 main() {}
 var x = throw f();
 void g() {}
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.expect
index e583c2a..9195452 100644
--- a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field dynamic x = throw self::f<dynamic>();
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static field Never x = throw self::f<dynamic>();
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method g() → void {
-  dynamic x = throw self::f<dynamic>();
+  Never x = throw self::f<dynamic>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.modular.expect
index e583c2a..9195452 100644
--- a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field dynamic x = throw self::f<dynamic>();
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static field Never x = throw self::f<dynamic>();
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method g() → void {
-  dynamic x = throw self::f<dynamic>();
+  Never x = throw self::f<dynamic>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.outline.expect
index 1ba01ea..10378d3 100644
--- a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field dynamic x;
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static field Never x;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method g() → void
   ;
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.transformed.expect
index e583c2a..9195452 100644
--- a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field dynamic x = throw self::f<dynamic>();
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static field Never x = throw self::f<dynamic>();
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method g() → void {
-  dynamic x = throw self::f<dynamic>();
+  Never x = throw self::f<dynamic>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart
index ede9fbe..9d13c19 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.textual_outline.expect
index 27e82683..18f8608 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.textual_outline_modelled.expect
index 27e82683..18f8608 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.expect
index 454f2de..d24070d 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,32 +10,22 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 3;
 }
 static method foo() → dynamic {
-  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{core::int*};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.modular.expect
index 454f2de..d24070d 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,32 +10,22 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 3;
 }
 static method foo() → dynamic {
-  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{core::int*};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.outline.expect
index 35d6c84..408d60b 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::A*
+  field core::int x;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
 }
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.transformed.expect
index 454f2de..d24070d 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,32 +10,22 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 3;
 }
 static method foo() → dynamic {
-  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{core::int*};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart
index 853e6a9..b8d1dcc 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.textual_outline.expect
index 5f086e4..29aa0a4 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.textual_outline_modelled.expect
index 5f086e4..29aa0a4 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.expect
index a8b5b21..e7a76c7 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,42 +10,22 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  final field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 3;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{core::int*};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.modular.expect
index a8b5b21..e7a76c7 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,42 +10,22 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  final field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 3;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{core::int*};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.outline.expect
index 09e3891..2b975b5 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.outline.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x;
-  synthetic constructor •() → self::A*
+  final field core::int x;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.transformed.expect
index a8b5b21..e7a76c7 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,42 +10,22 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  final field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 3;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{core::int*};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart b/pkg/front_end/testcases/inference/infer_type_on_var.dart
index b3df35a..6da1e5d 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.textual_outline.expect
index f75f219..a73b3f8 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 test1() {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.textual_outline_modelled.expect
index b1f0123..128ffb9 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.expect
index be69c0e..9d99b6e 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,9 +10,9 @@
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::int* x = 3;
+  core::int x = 3;
   x = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.modular.expect
index be69c0e..9d99b6e 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,9 +10,9 @@
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::int* x = 3;
+  core::int x = 3;
   x = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.outline.expect
index 3619892..c7a3436 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test1() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.transformed.expect
index be69c0e..9d99b6e 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,9 +10,9 @@
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::int* x = 3;
+  core::int x = 3;
   x = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart b/pkg/front_end/testcases/inference/infer_type_on_var2.dart
index b88af94..1b576ce 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 test2() {
-  var /*@ type=int* */ x = 3;
+  var /*@type=int*/ x = 3;
   x = /*error:INVALID_ASSIGNMENT*/ "hi";
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.textual_outline.expect
index 64ead70..715fb78 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 test2() {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.textual_outline_modelled.expect
index f83e884..c5447d1 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.expect
index 318a2d0..ae6e2b2 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,9 +10,9 @@
 import "dart:core" as core;
 
 static method test2() → dynamic {
-  core::int* x = 3;
+  core::int x = 3;
   x = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.modular.expect
index 318a2d0..ae6e2b2 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,9 +10,9 @@
 import "dart:core" as core;
 
 static method test2() → dynamic {
-  core::int* x = 3;
+  core::int x = 3;
   x = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.outline.expect
index 59396ab..6f6dfb3 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test2() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.transformed.expect
index 318a2d0..ae6e2b2 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,9 +10,9 @@
 import "dart:core" as core;
 
 static method test2() → dynamic {
-  core::int* x = 3;
+  core::int x = 3;
   x = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart
index abb3f47..b368ee0 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,18 +9,18 @@
   int x = 0;
 
   test1() {
-    var /*@ type=int* */ a = /*@target=A.x*/ x;
+    var /*@type=int*/ a = /*@target=A.x*/ x;
     a = /*error:INVALID_ASSIGNMENT*/ "hi";
     a = 3;
-    var /*@ type=int* */ b = /*@target=A.y*/ y;
+    var /*@type=int*/ b = /*@target=A.y*/ y;
     b = /*error:INVALID_ASSIGNMENT*/ "hi";
     b = 4;
-    var /*@ type=int* */ c = /*@target=A.z*/ z;
+    var /*@type=int*/ c = /*@target=A.z*/ z;
     c = /*error:INVALID_ASSIGNMENT*/ "hi";
     c = 4;
   }
 
-  int y; // field def after use
+  int y = throw ''; // field def after use
   final z = 42; // should infer `int`
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.textual_outline.expect
index 4ad24eb..33086f4 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 class A {
   int x = 0;
   test1() {}
-  int y;
+  int y = throw '';
   final z = 42;
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.textual_outline_modelled.expect
index 241cd75..57a9484 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 class A {
   final z = 42;
   int x = 0;
-  int y;
+  int y = throw '';
   test1() {}
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.expect
index f622139..233d4de 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,38 +18,28 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 0;
-  field core::int* y = null;
-  final field core::int* z = 42;
-  synthetic constructor •() → self::A*
+  field core::int x = 0;
+  field core::int y = throw "";
+  final field core::int z = 42;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method test1() → dynamic {
-    core::int* a = this.{self::A::x}{core::int*};
+    core::int a = this.{self::A::x}{core::int};
     a = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
     a = 3;
-    core::int* b = this.{self::A::y}{core::int*};
+    core::int b = this.{self::A::y}{core::int};
     b = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
     b = 4;
-    core::int* c = this.{self::A::z}{core::int*};
+    core::int c = this.{self::A::z}{core::int};
     c = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
     c = 4;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.modular.expect
index f622139..233d4de 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,38 +18,28 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 0;
-  field core::int* y = null;
-  final field core::int* z = 42;
-  synthetic constructor •() → self::A*
+  field core::int x = 0;
+  field core::int y = throw "";
+  final field core::int z = 42;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method test1() → dynamic {
-    core::int* a = this.{self::A::x}{core::int*};
+    core::int a = this.{self::A::x}{core::int};
     a = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
     a = 3;
-    core::int* b = this.{self::A::y}{core::int*};
+    core::int b = this.{self::A::y}{core::int};
     b = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
     b = 4;
-    core::int* c = this.{self::A::z}{core::int*};
+    core::int c = this.{self::A::z}{core::int};
     c = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
     c = 4;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.outline.expect
index 00baffd..046ea46 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x;
-  field core::int* y;
-  final field core::int* z;
-  synthetic constructor •() → self::A*
+  field core::int x;
+  field core::int y;
+  final field core::int z;
+  synthetic constructor •() → self::A
     ;
   method test1() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.transformed.expect
index f622139..233d4de 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,38 +18,28 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 0;
-  field core::int* y = null;
-  final field core::int* z = 42;
-  synthetic constructor •() → self::A*
+  field core::int x = 0;
+  field core::int y = throw "";
+  final field core::int z = 42;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method test1() → dynamic {
-    core::int* a = this.{self::A::x}{core::int*};
+    core::int a = this.{self::A::x}{core::int};
     a = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
     a = 3;
-    core::int* b = this.{self::A::y}{core::int*};
+    core::int b = this.{self::A::y}{core::int};
     b = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
     b = 4;
-    core::int* c = this.{self::A::z}{core::int*};
+    core::int c = this.{self::A::z}{core::int};
     c = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in "hi" as{TypeError} core::int*;
+                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
     c = 4;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart
index 4d61853..6b971b5 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart
@@ -1,20 +1,20 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 int x = 0;
 
 test1() {
-  var /*@ type=int* */ a = x;
+  var /*@type=int*/ a = x;
   a = /*error:INVALID_ASSIGNMENT*/ "hi";
   a = 3;
-  var /*@ type=int* */ b = y;
+  var /*@type=int*/ b = y;
   b = /*error:INVALID_ASSIGNMENT*/ "hi";
   b = 4;
-  var /*@ type=int* */ c = z;
+  var /*@type=int*/ c = z;
   c = /*error:INVALID_ASSIGNMENT*/ "hi";
   c = 4;
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.textual_outline.expect
index eb7d93e..fdb603c 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 int x = 0;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.textual_outline_modelled.expect
index 6a81cd1..9ad86a2 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 final z = 42;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.expect
index 63aa12a..3b940a8 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,24 +17,24 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* x = 0;
-static field core::int* y = 0;
-static final field core::int* z = 42;
+static field core::int x = 0;
+static field core::int y = 0;
+static final field core::int z = 42;
 static method test1() → dynamic {
-  core::int* a = self::x;
+  core::int a = self::x;
   a = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   a = 3;
-  core::int* b = self::y;
+  core::int b = self::y;
   b = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   b = 4;
-  core::int* c = self::z;
+  core::int c = self::z;
   c = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   c = 4;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.modular.expect
index 63aa12a..3b940a8 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,24 +17,24 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* x = 0;
-static field core::int* y = 0;
-static final field core::int* z = 42;
+static field core::int x = 0;
+static field core::int y = 0;
+static final field core::int z = 42;
 static method test1() → dynamic {
-  core::int* a = self::x;
+  core::int a = self::x;
   a = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   a = 3;
-  core::int* b = self::y;
+  core::int b = self::y;
   b = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   b = 4;
-  core::int* c = self::z;
+  core::int c = self::z;
   c = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   c = 4;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.outline.expect
index 818f5f5e..fc6b54e 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* x;
-static field core::int* y;
-static final field core::int* z;
+static field core::int x;
+static field core::int y;
+static final field core::int z;
 static method test1() → dynamic
   ;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.transformed.expect
index 63aa12a..3b940a8 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,24 +17,24 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* x = 0;
-static field core::int* y = 0;
-static final field core::int* z = 42;
+static field core::int x = 0;
+static field core::int y = 0;
+static final field core::int z = 42;
 static method test1() → dynamic {
-  core::int* a = self::x;
+  core::int a = self::x;
   a = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   a = 3;
-  core::int* b = self::y;
+  core::int b = self::y;
   b = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   b = 4;
-  core::int* c = self::z;
+  core::int c = self::z;
   c = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in "hi" as{TypeError} core::int*;
+                                   ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
   c = 4;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart
index 4a7604a..8c49d22 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'infer_type_regardless_of_declaration_order_or_cycles_b.dart';
 
 class C extends B {
-  get x => null;
+  get x => throw '';
 }
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.textual_outline.expect
index 7b0b110..d5f28ce 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 import 'infer_type_regardless_of_declaration_order_or_cycles_b.dart';
 
 class C extends B {
-  get x => null;
+  get x => throw '';
 }
 
 class A {
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.textual_outline_modelled.expect
index 7b738b7..212e986 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'infer_type_regardless_of_declaration_order_or_cycles_b.dart';
@@ -8,7 +7,7 @@
 }
 
 class C extends B {
-  get x => null;
+  get x => throw '';
 }
 
 foo() {}
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.expect
index dced83d..cfb865f 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,47 +13,37 @@
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
 
 class C extends inf::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super inf::B::•()
     ;
-  get x() → core::int*
-    return null;
+  get x() → core::int
+    return throw "";
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::int* y = new self::C::•().{self::C::x}{core::int*};
-  core::String* z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::int y = new self::C::•().{self::C::x}{core::int};
+  core::String z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
-                                                                   ^" in new self::C::•().{self::C::x}{core::int*} as{TypeError} core::String*;
+                                                                   ^" in new self::C::•().{self::C::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
 }
 static method main() → dynamic {
   self::foo();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "infer_type_regardless_of_declaration_order_or_cycles.dart" as self;
 
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
 
 class B extends self::A {
-  synthetic constructor •() → inf::B*
+  synthetic constructor •() → inf::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.modular.expect
index dced83d..cfb865f 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,47 +13,37 @@
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
 
 class C extends inf::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super inf::B::•()
     ;
-  get x() → core::int*
-    return null;
+  get x() → core::int
+    return throw "";
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::int* y = new self::C::•().{self::C::x}{core::int*};
-  core::String* z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::int y = new self::C::•().{self::C::x}{core::int};
+  core::String z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
-                                                                   ^" in new self::C::•().{self::C::x}{core::int*} as{TypeError} core::String*;
+                                                                   ^" in new self::C::•().{self::C::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
 }
 static method main() → dynamic {
   self::foo();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "infer_type_regardless_of_declaration_order_or_cycles.dart" as self;
 
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
 
 class B extends self::A {
-  synthetic constructor •() → inf::B*
+  synthetic constructor •() → inf::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.outline.expect
index 1f42db6..315f872 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "infer_type_regardless_of_declaration_order_or_cycles_b.dart" as inf;
 import "dart:core" as core;
@@ -6,40 +6,30 @@
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
 
 class C extends inf::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "infer_type_regardless_of_declaration_order_or_cycles.dart" as self;
 
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
 
 class B extends self::A {
-  synthetic constructor •() → inf::B*
+  synthetic constructor •() → inf::B
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.transformed.expect
index dced83d..cfb865f 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,47 +13,37 @@
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
 
 class C extends inf::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super inf::B::•()
     ;
-  get x() → core::int*
-    return null;
+  get x() → core::int
+    return throw "";
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::int* y = new self::C::•().{self::C::x}{core::int*};
-  core::String* z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::int y = new self::C::•().{self::C::x}{core::int};
+  core::String z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
-                                                                   ^" in new self::C::•().{self::C::x}{core::int*} as{TypeError} core::String*;
+                                                                   ^" in new self::C::•().{self::C::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
 }
 static method main() → dynamic {
   self::foo();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "infer_type_regardless_of_declaration_order_or_cycles.dart" as self;
 
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
 
 class B extends self::A {
-  synthetic constructor •() → inf::B*
+  synthetic constructor •() → inf::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart
index e46cfe9..e7cdfcb 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 import 'infer_type_regardless_of_declaration_order_or_cycles.dart';
 
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.textual_outline.expect
index 26c0dad..0c9213c 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_type_regardless_of_declaration_order_or_cycles.dart';
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.textual_outline_modelled.expect
index 26c0dad..0c9213c 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_type_regardless_of_declaration_order_or_cycles.dart';
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.expect
index 0acdfbf..1b47b04 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "infer_type_regardless_of_declaration_order_or_cycles.dart" as test;
 
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
 
 class B extends test::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super test::A::•()
     ;
 }
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,34 +26,24 @@
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
 
 class C extends self::B {
-  synthetic constructor •() → test::C*
+  synthetic constructor •() → test::C
     : super self::B::•()
     ;
-  get x() → core::int*
-    return null;
+  get x() → core::int
+    return throw "";
 }
 class A extends core::Object {
-  synthetic constructor •() → test::A*
+  synthetic constructor •() → test::A
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::int* y = new test::C::•().{test::C::x}{core::int*};
-  core::String* z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::int y = new test::C::•().{test::C::x}{core::int};
+  core::String z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
-                                                                   ^" in new test::C::•().{test::C::x}{core::int*} as{TypeError} core::String*;
+                                                                   ^" in new test::C::•().{test::C::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
 }
 static method main() → dynamic {
   test::foo();
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.modular.expect
index 0acdfbf..1b47b04 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.modular.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "infer_type_regardless_of_declaration_order_or_cycles.dart" as test;
 
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
 
 class B extends test::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super test::A::•()
     ;
 }
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,34 +26,24 @@
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
 
 class C extends self::B {
-  synthetic constructor •() → test::C*
+  synthetic constructor •() → test::C
     : super self::B::•()
     ;
-  get x() → core::int*
-    return null;
+  get x() → core::int
+    return throw "";
 }
 class A extends core::Object {
-  synthetic constructor •() → test::A*
+  synthetic constructor •() → test::A
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::int* y = new test::C::•().{test::C::x}{core::int*};
-  core::String* z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::int y = new test::C::•().{test::C::x}{core::int};
+  core::String z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
-                                                                   ^" in new test::C::•().{test::C::x}{core::int*} as{TypeError} core::String*;
+                                                                   ^" in new test::C::•().{test::C::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
 }
 static method main() → dynamic {
   test::foo();
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.outline.expect
index d9a40c1..a6bf1ca 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.outline.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "infer_type_regardless_of_declaration_order_or_cycles.dart" as test;
 
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
 
 class B extends test::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 static method main() → dynamic
   ;
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as test;
 import "infer_type_regardless_of_declaration_order_or_cycles_b.dart" as self;
 import "dart:core" as core;
@@ -19,26 +19,16 @@
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
 
 class C extends self::B {
-  synthetic constructor •() → test::C*
+  synthetic constructor •() → test::C
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
 }
 class A extends core::Object {
-  synthetic constructor •() → test::A*
+  synthetic constructor •() → test::A
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.transformed.expect
index 0acdfbf..1b47b04 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.transformed.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "infer_type_regardless_of_declaration_order_or_cycles.dart" as test;
 
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
 
 class B extends test::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super test::A::•()
     ;
 }
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,34 +26,24 @@
 import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
 
 class C extends self::B {
-  synthetic constructor •() → test::C*
+  synthetic constructor •() → test::C
     : super self::B::•()
     ;
-  get x() → core::int*
-    return null;
+  get x() → core::int
+    return throw "";
 }
 class A extends core::Object {
-  synthetic constructor •() → test::A*
+  synthetic constructor •() → test::A
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::int* y = new test::C::•().{test::C::x}{core::int*};
-  core::String* z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::int y = new test::C::•().{test::C::x}{core::int};
+  core::String z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
-                                                                   ^" in new test::C::•().{test::C::x}{core::int*} as{TypeError} core::String*;
+                                                                   ^" in new test::C::•().{test::C::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
 }
 static method main() → dynamic {
   test::foo();
diff --git a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart
index dafcec3..03bad8b 100644
--- a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart
+++ b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.textual_outline.expect
index 12d51c1..36cd503 100644
--- a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var a = <int, String>{0: 'aaa', 1: 'bbb'};
diff --git a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.textual_outline_modelled.expect
index e4c9ecd..4531ba6 100644
--- a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.expect b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.expect
index a416db2..13e9723 100644
--- a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::Map<core::int*, core::String*>* a = <core::int*, core::String*>{0: "aaa", 1: "bbb"};
-static field core::Map<core::double*, core::int*>* b = <core::double*, core::int*>{1.1: 1, 2.2: 2};
-static field core::Map<core::List<core::int*>*, core::Map<core::String*, core::double*>*>* c = <core::List<core::int*>*, core::Map<core::String*, core::double*>*>{};
-static field core::Map<core::int*, dynamic>* d = <core::int*, dynamic>{};
-static field core::Map<dynamic, core::int*>* e = <dynamic, core::int*>{};
-static field core::Map<dynamic, dynamic>* f = <dynamic, dynamic>{};
+static field core::Map<core::int, core::String> a = <core::int, core::String>{0: "aaa", 1: "bbb"};
+static field core::Map<core::double, core::int> b = <core::double, core::int>{1.1: 1, 2.2: 2};
+static field core::Map<core::List<core::int>, core::Map<core::String, core::double>> c = <core::List<core::int>, core::Map<core::String, core::double>>{};
+static field core::Map<core::int, dynamic> d = <core::int, dynamic>{};
+static field core::Map<dynamic, core::int> e = <dynamic, core::int>{};
+static field core::Map<dynamic, dynamic> f = <dynamic, dynamic>{};
 static method main() → dynamic {
   self::a;
   self::b;
diff --git a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.modular.expect
index a416db2..13e9723 100644
--- a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::Map<core::int*, core::String*>* a = <core::int*, core::String*>{0: "aaa", 1: "bbb"};
-static field core::Map<core::double*, core::int*>* b = <core::double*, core::int*>{1.1: 1, 2.2: 2};
-static field core::Map<core::List<core::int*>*, core::Map<core::String*, core::double*>*>* c = <core::List<core::int*>*, core::Map<core::String*, core::double*>*>{};
-static field core::Map<core::int*, dynamic>* d = <core::int*, dynamic>{};
-static field core::Map<dynamic, core::int*>* e = <dynamic, core::int*>{};
-static field core::Map<dynamic, dynamic>* f = <dynamic, dynamic>{};
+static field core::Map<core::int, core::String> a = <core::int, core::String>{0: "aaa", 1: "bbb"};
+static field core::Map<core::double, core::int> b = <core::double, core::int>{1.1: 1, 2.2: 2};
+static field core::Map<core::List<core::int>, core::Map<core::String, core::double>> c = <core::List<core::int>, core::Map<core::String, core::double>>{};
+static field core::Map<core::int, dynamic> d = <core::int, dynamic>{};
+static field core::Map<dynamic, core::int> e = <dynamic, core::int>{};
+static field core::Map<dynamic, dynamic> f = <dynamic, dynamic>{};
 static method main() → dynamic {
   self::a;
   self::b;
diff --git a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.outline.expect
index de41e4b..119adba 100644
--- a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.outline.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::Map<core::int*, core::String*>* a;
-static field core::Map<core::double*, core::int*>* b;
-static field core::Map<core::List<core::int*>*, core::Map<core::String*, core::double*>*>* c;
-static field core::Map<core::int*, dynamic>* d;
-static field core::Map<dynamic, core::int*>* e;
-static field core::Map<dynamic, dynamic>* f;
+static field core::Map<core::int, core::String> a;
+static field core::Map<core::double, core::int> b;
+static field core::Map<core::List<core::int>, core::Map<core::String, core::double>> c;
+static field core::Map<core::int, dynamic> d;
+static field core::Map<dynamic, core::int> e;
+static field core::Map<dynamic, dynamic> f;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.transformed.expect
index a416db2..13e9723 100644
--- a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::Map<core::int*, core::String*>* a = <core::int*, core::String*>{0: "aaa", 1: "bbb"};
-static field core::Map<core::double*, core::int*>* b = <core::double*, core::int*>{1.1: 1, 2.2: 2};
-static field core::Map<core::List<core::int*>*, core::Map<core::String*, core::double*>*>* c = <core::List<core::int*>*, core::Map<core::String*, core::double*>*>{};
-static field core::Map<core::int*, dynamic>* d = <core::int*, dynamic>{};
-static field core::Map<dynamic, core::int*>* e = <dynamic, core::int*>{};
-static field core::Map<dynamic, dynamic>* f = <dynamic, dynamic>{};
+static field core::Map<core::int, core::String> a = <core::int, core::String>{0: "aaa", 1: "bbb"};
+static field core::Map<core::double, core::int> b = <core::double, core::int>{1.1: 1, 2.2: 2};
+static field core::Map<core::List<core::int>, core::Map<core::String, core::double>> c = <core::List<core::int>, core::Map<core::String, core::double>>{};
+static field core::Map<core::int, dynamic> d = <core::int, dynamic>{};
+static field core::Map<dynamic, core::int> e = <dynamic, core::int>{};
+static field core::Map<dynamic, dynamic> f = <dynamic, dynamic>{};
 static method main() → dynamic {
   self::a;
   self::b;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart
index 4ea86c0..ffaddf4 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A<T> {
-  final T x = null;
-  final T w = null;
+  final T x = throw '';
+  final T w = throw '';
 }
 
 class B implements A<int> {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.textual_outline.expect
index 2fd1e40..ad7509c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
-  final T x = null;
-  final T w = null;
+  final T x = throw '';
+  final T w = throw '';
 }
 
 class B implements A<int> {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.textual_outline_modelled.expect
index 06fb6ed..48638ba 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
-  final T w = null;
-  final T x = null;
+  final T w = throw '';
+  final T x = throw '';
 }
 
 class B implements A<int> {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.expect
index a263f07..b6766ce 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be returned from a function with return type 'int'.
 //   get w => /*error:RETURN_OF_INVALID_TYPE*/ "hello";
 //                                             ^
 //
@@ -13,48 +13,28 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  final field self::A::T* x = null;
-  final field self::A::T* w = null;
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  final field self::A::T% x = throw "";
+  final field self::A::T% w = throw "";
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B extends core::Object implements self::A<core::int*> {
-  synthetic constructor •() → self::B*
+class B extends core::Object implements self::A<core::int> {
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 3;
-  get w() → core::int*
-    return invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  get w() → core::int
+    return invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be returned from a function with return type 'int'.
   get w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";
-                                            ^" in "hello" as{TypeError} core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method foo() → dynamic {
-  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{core::int*};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.modular.expect
index a263f07..b6766ce 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be returned from a function with return type 'int'.
 //   get w => /*error:RETURN_OF_INVALID_TYPE*/ "hello";
 //                                             ^
 //
@@ -13,48 +13,28 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  final field self::A::T* x = null;
-  final field self::A::T* w = null;
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  final field self::A::T% x = throw "";
+  final field self::A::T% w = throw "";
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B extends core::Object implements self::A<core::int*> {
-  synthetic constructor •() → self::B*
+class B extends core::Object implements self::A<core::int> {
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 3;
-  get w() → core::int*
-    return invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  get w() → core::int
+    return invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be returned from a function with return type 'int'.
   get w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";
-                                            ^" in "hello" as{TypeError} core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method foo() → dynamic {
-  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{core::int*};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.outline.expect
index f40fbc7..993531e 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.outline.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  final field self::A::T* x;
-  final field self::A::T* w;
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  final field self::A::T% x;
+  final field self::A::T% w;
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B extends core::Object implements self::A<core::int*> {
-  synthetic constructor •() → self::B*
+class B extends core::Object implements self::A<core::int> {
+  synthetic constructor •() → self::B
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
-  get w() → core::int*
+  get w() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.transformed.expect
index a263f07..b6766ce 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be returned from a function with return type 'int'.
 //   get w => /*error:RETURN_OF_INVALID_TYPE*/ "hello";
 //                                             ^
 //
@@ -13,48 +13,28 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  final field self::A::T* x = null;
-  final field self::A::T* w = null;
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  final field self::A::T% x = throw "";
+  final field self::A::T% w = throw "";
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B extends core::Object implements self::A<core::int*> {
-  synthetic constructor •() → self::B*
+class B extends core::Object implements self::A<core::int> {
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 3;
-  get w() → core::int*
-    return invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  get w() → core::int
+    return invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be returned from a function with return type 'int'.
   get w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";
-                                            ^" in "hello" as{TypeError} core::int*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+                                            ^" in "hello" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method foo() → dynamic {
-  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{core::int*};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int} as{TypeError,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart
index 3db5d08..46a9b0e 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A<T> {
-  T x;
+  T x = throw '';
 }
 
 class B<E> extends A<E> {
-  E y;
+  E y = throw '';
   get x => /*@target=B.y*/ y;
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.textual_outline.expect
index 9ddab96..1684bf5 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
-  T x;
+  T x = throw '';
 }
 
 class B<E> extends A<E> {
-  E y;
+  E y = throw '';
   get x => y;
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.textual_outline_modelled.expect
index 9ddab96..1684bf5 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
-  T x;
+  T x = throw '';
 }
 
 class B<E> extends A<E> {
-  E y;
+  E y = throw '';
   get x => y;
 }
 
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect
index 4e199e1..44304fd 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,35 +9,25 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A::T* x = null;
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::T% x = throw "";
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> {
-  covariant-by-class field self::B::E* y = null;
-  synthetic constructor •() → self::B<self::B::E*>*
+class B<E extends core::Object? = dynamic> extends self::A<self::B::E%> {
+  covariant-by-class field self::B::E% y = throw "";
+  synthetic constructor •() → self::B<self::B::E%>
     : super self::A::•()
     ;
-  get x() → self::B::E*
-    return this.{self::B::y}{self::B::E*};
+  get x() → self::B::E%
+    return this.{self::B::y}{self::B::E%};
 }
 static method foo() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B.x*/ x;
-                                                                        ^" in new self::B::•<core::String*>().{self::B::x}{core::String*} as{TypeError} core::int*;
-  core::String* z = new self::B::•<core::String*>().{self::B::x}{core::String*};
+                                                                        ^" in new self::B::•<core::String>().{self::B::x}{core::String} as{TypeError,ForNonNullableByDefault} core::int;
+  core::String z = new self::B::•<core::String>().{self::B::x}{core::String};
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.modular.expect
index 4e199e1..44304fd 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,35 +9,25 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A::T* x = null;
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::T% x = throw "";
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> {
-  covariant-by-class field self::B::E* y = null;
-  synthetic constructor •() → self::B<self::B::E*>*
+class B<E extends core::Object? = dynamic> extends self::A<self::B::E%> {
+  covariant-by-class field self::B::E% y = throw "";
+  synthetic constructor •() → self::B<self::B::E%>
     : super self::A::•()
     ;
-  get x() → self::B::E*
-    return this.{self::B::y}{self::B::E*};
+  get x() → self::B::E%
+    return this.{self::B::y}{self::B::E%};
 }
 static method foo() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B.x*/ x;
-                                                                        ^" in new self::B::•<core::String*>().{self::B::x}{core::String*} as{TypeError} core::int*;
-  core::String* z = new self::B::•<core::String*>().{self::B::x}{core::String*};
+                                                                        ^" in new self::B::•<core::String>().{self::B::x}{core::String} as{TypeError,ForNonNullableByDefault} core::int;
+  core::String z = new self::B::•<core::String>().{self::B::x}{core::String};
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.outline.expect
index 6bff580..467fab3 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A::T* x;
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::T% x;
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> {
-  covariant-by-class field self::B::E* y;
-  synthetic constructor •() → self::B<self::B::E*>*
+class B<E extends core::Object? = dynamic> extends self::A<self::B::E%> {
+  covariant-by-class field self::B::E% y;
+  synthetic constructor •() → self::B<self::B::E%>
     ;
-  get x() → self::B::E*
+  get x() → self::B::E%
     ;
 }
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect
index 4e199e1..44304fd 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,35 +9,25 @@
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::A::T* x = null;
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::T% x = throw "";
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> {
-  covariant-by-class field self::B::E* y = null;
-  synthetic constructor •() → self::B<self::B::E*>*
+class B<E extends core::Object? = dynamic> extends self::A<self::B::E%> {
+  covariant-by-class field self::B::E% y = throw "";
+  synthetic constructor •() → self::B<self::B::E%>
     : super self::A::•()
     ;
-  get x() → self::B::E*
-    return this.{self::B::y}{self::B::E*};
+  get x() → self::B::E%
+    return this.{self::B::y}{self::B::E%};
 }
 static method foo() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B.x*/ x;
-                                                                        ^" in new self::B::•<core::String*>().{self::B::x}{core::String*} as{TypeError} core::int*;
-  core::String* z = new self::B::•<core::String*>().{self::B::x}{core::String*};
+                                                                        ^" in new self::B::•<core::String>().{self::B::x}{core::String} as{TypeError,ForNonNullableByDefault} core::int;
+  core::String z = new self::B::•<core::String>().{self::B::x}{core::String};
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart
index 19b24b0..e38dadb 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -22,13 +22,14 @@
   const B();
   int get y => 0;
 
-  m(a, f(v, E e)) {}
+  m(a, f(v, E e)) => throw '';
 }
 
 foo() {
   int y = /*error:INVALID_ASSIGNMENT*/ new /*@typeArgs=dynamic*/ B()
-      . /*@target=B.m*/ m(null, null);
-  String z = new /*@typeArgs=dynamic*/ B(). /*@target=B.m*/ m(null, null);
+      . /*@target=B.m*/ m(throw '', throw '');
+  String z =
+      new /*@typeArgs=dynamic*/ B(). /*@target=B.m*/ m(throw '', throw '');
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.textual_outline.expect
index 51601a7..278abf3 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I<E> {
@@ -17,7 +16,7 @@
 class B<E> extends A<E> implements M {
   const B();
   int get y => 0;
-  m(a, f(v, E e)) {}
+  m(a, f(v, E e)) => throw '';
 }
 
 foo() {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.textual_outline_modelled.expect
index b277dd6..3a903ba 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A<E> implements I<E> {
@@ -17,7 +16,7 @@
 class B<E> extends A<E> implements M {
   const B();
   int get y => 0;
-  m(a, f(v, E e)) {}
+  m(a, f(v, E e)) => throw '';
 }
 
 foo() {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.expect
index 5b19a39..d2e0a0f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.expect
@@ -1,74 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       . /*@target=B.m*/ m(null, null);
+//       . /*@target=B.m*/ m(throw '', throw '');
 //                         ^
 //
 import self as self;
 import "dart:core" as core;
 
-abstract class I<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::E*>*
+abstract class I<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, self::I::E*) →* core::String* f) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, self::I::E%) → core::String f) → core::String;
 }
-abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<self::A::E*> /*hasConstConstructor*/  {
-  const constructor •() → self::A<self::A::E*>*
+abstract class A<E extends core::Object? = dynamic> extends core::Object implements self::I<self::A::E%> /*hasConstConstructor*/  {
+  const constructor •() → self::A<self::A::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, self::A::E*) →* core::String* f) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, self::A::E%) → core::String f) → core::String;
 }
 abstract class M extends core::Object {
-  final field core::int* y = 0;
-  synthetic constructor •() → self::M*
+  final field core::int y = 0;
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M /*hasConstConstructor*/  {
-  const constructor •() → self::B<self::B::E*>*
+class B<E extends core::Object? = dynamic> extends self::A<self::B::E%> implements self::M /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::E%>
     : super self::A::•()
     ;
-  get y() → core::int*
+  get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, self::B::E*) →* dynamic f) → core::String* {}
+  method m(dynamic a, (dynamic, self::B::E%) → dynamic f) → core::String
+    return throw "";
 }
 static method foo() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      . /*@target=B.m*/ m(null, null);
-                        ^" in new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*} as{TypeError} core::int*;
-  core::String* z = new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*};
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      . /*@target=B.m*/ m(throw '', throw '');
+                        ^" in new self::B::•<dynamic>().{self::B::m}(throw "", throw ""){(dynamic, (dynamic, dynamic) → dynamic) → core::String} as{TypeError,ForNonNullableByDefault} core::int;
+  core::String z = new self::B::•<dynamic>().{self::B::m}(throw "", throw ""){(dynamic, (dynamic, dynamic) → dynamic) → core::String};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.modular.expect
index 5b19a39..d2e0a0f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.modular.expect
@@ -1,74 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       . /*@target=B.m*/ m(null, null);
+//       . /*@target=B.m*/ m(throw '', throw '');
 //                         ^
 //
 import self as self;
 import "dart:core" as core;
 
-abstract class I<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::E*>*
+abstract class I<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, self::I::E*) →* core::String* f) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, self::I::E%) → core::String f) → core::String;
 }
-abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<self::A::E*> /*hasConstConstructor*/  {
-  const constructor •() → self::A<self::A::E*>*
+abstract class A<E extends core::Object? = dynamic> extends core::Object implements self::I<self::A::E%> /*hasConstConstructor*/  {
+  const constructor •() → self::A<self::A::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, self::A::E*) →* core::String* f) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, self::A::E%) → core::String f) → core::String;
 }
 abstract class M extends core::Object {
-  final field core::int* y = 0;
-  synthetic constructor •() → self::M*
+  final field core::int y = 0;
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M /*hasConstConstructor*/  {
-  const constructor •() → self::B<self::B::E*>*
+class B<E extends core::Object? = dynamic> extends self::A<self::B::E%> implements self::M /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::E%>
     : super self::A::•()
     ;
-  get y() → core::int*
+  get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, self::B::E*) →* dynamic f) → core::String* {}
+  method m(dynamic a, (dynamic, self::B::E%) → dynamic f) → core::String
+    return throw "";
 }
 static method foo() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      . /*@target=B.m*/ m(null, null);
-                        ^" in new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*} as{TypeError} core::int*;
-  core::String* z = new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*};
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      . /*@target=B.m*/ m(throw '', throw '');
+                        ^" in new self::B::•<dynamic>().{self::B::m}(throw "", throw ""){(dynamic, (dynamic, dynamic) → dynamic) → core::String} as{TypeError,ForNonNullableByDefault} core::int;
+  core::String z = new self::B::•<dynamic>().{self::B::m}(throw "", throw ""){(dynamic, (dynamic, dynamic) → dynamic) → core::String};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.outline.expect
index af42f3e..661b49c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.outline.expect
@@ -1,60 +1,30 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class I<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::E*>*
+abstract class I<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::E%>
     ;
-  abstract method m(dynamic a, (dynamic, self::I::E*) →* core::String* f) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, self::I::E%) → core::String f) → core::String;
 }
-abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<self::A::E*> /*hasConstConstructor*/  {
-  const constructor •() → self::A<self::A::E*>*
+abstract class A<E extends core::Object? = dynamic> extends core::Object implements self::I<self::A::E%> /*hasConstConstructor*/  {
+  const constructor •() → self::A<self::A::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, self::A::E*) →* core::String* f) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, self::A::E%) → core::String f) → core::String;
 }
 abstract class M extends core::Object {
-  final field core::int* y;
-  synthetic constructor •() → self::M*
+  final field core::int y;
+  synthetic constructor •() → self::M
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M /*hasConstConstructor*/  {
-  const constructor •() → self::B<self::B::E*>*
+class B<E extends core::Object? = dynamic> extends self::A<self::B::E%> implements self::M /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::E%>
     : super self::A::•()
     ;
-  get y() → core::int*
+  get y() → core::int
     ;
-  method m(dynamic a, (dynamic, self::B::E*) →* dynamic f) → core::String*
+  method m(dynamic a, (dynamic, self::B::E%) → dynamic f) → core::String
     ;
 }
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.transformed.expect
index 5b19a39..d2e0a0f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.transformed.expect
@@ -1,74 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       . /*@target=B.m*/ m(null, null);
+//       . /*@target=B.m*/ m(throw '', throw '');
 //                         ^
 //
 import self as self;
 import "dart:core" as core;
 
-abstract class I<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::E*>*
+abstract class I<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, self::I::E*) →* core::String* f) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, self::I::E%) → core::String f) → core::String;
 }
-abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<self::A::E*> /*hasConstConstructor*/  {
-  const constructor •() → self::A<self::A::E*>*
+abstract class A<E extends core::Object? = dynamic> extends core::Object implements self::I<self::A::E%> /*hasConstConstructor*/  {
+  const constructor •() → self::A<self::A::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, self::A::E*) →* core::String* f) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, self::A::E%) → core::String f) → core::String;
 }
 abstract class M extends core::Object {
-  final field core::int* y = 0;
-  synthetic constructor •() → self::M*
+  final field core::int y = 0;
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M /*hasConstConstructor*/  {
-  const constructor •() → self::B<self::B::E*>*
+class B<E extends core::Object? = dynamic> extends self::A<self::B::E%> implements self::M /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::E%>
     : super self::A::•()
     ;
-  get y() → core::int*
+  get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, self::B::E*) →* dynamic f) → core::String* {}
+  method m(dynamic a, (dynamic, self::B::E%) → dynamic f) → core::String
+    return throw "";
 }
 static method foo() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      . /*@target=B.m*/ m(null, null);
-                        ^" in new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*} as{TypeError} core::int*;
-  core::String* z = new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*};
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      . /*@target=B.m*/ m(throw '', throw '');
+                        ^" in new self::B::•<dynamic>().{self::B::m}(throw "", throw ""){(dynamic, (dynamic, dynamic) → dynamic) → core::String} as{TypeError,ForNonNullableByDefault} core::int;
+  core::String z = new self::B::•<dynamic>().{self::B::m}(throw "", throw ""){(dynamic, (dynamic, dynamic) → dynamic) → core::String};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart
index db5ca36..26c4c1b 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart
@@ -1,16 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'infer_types_on_generic_instantiations_in_library_cycle_a.dart';
 
 abstract class A<E> implements I<E> {
-  const A();
-
-  final E value = null;
+  final E value = throw '';
 }
 
 abstract class M {
@@ -18,18 +16,18 @@
 }
 
 class B<E> extends A<E> implements M {
-  const B();
   int get y => 0;
 
-  m(a, f(v, int e)) {}
+  m(a, f(v, int e)) => throw '';
 }
 
 foo() {
   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>()
-      . /*@target=B.m*/ m(null, null)
+      . /*@target=B.m*/ m(throw '', throw '')
       . /*@target=A.value*/ value;
-  String z =
-      new B<String>(). /*@target=B.m*/ m(null, null). /*@target=A.value*/ value;
+  String z = new B<String>()
+      . /*@target=B.m*/ m(throw '', throw '')
+      . /*@target=A.value*/ value;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.textual_outline.expect
index cbb4736..6291b3c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.textual_outline.expect
@@ -1,11 +1,9 @@
-// @dart = 2.9
 library test;
 
 import 'infer_types_on_generic_instantiations_in_library_cycle_a.dart';
 
 abstract class A<E> implements I<E> {
-  const A();
-  final E value = null;
+  final E value = throw '';
 }
 
 abstract class M {
@@ -13,9 +11,8 @@
 }
 
 class B<E> extends A<E> implements M {
-  const B();
   int get y => 0;
-  m(a, f(v, int e)) {}
+  m(a, f(v, int e)) => throw '';
 }
 
 foo() {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.textual_outline_modelled.expect
index cbb4736..6291b3c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.textual_outline_modelled.expect
@@ -1,11 +1,9 @@
-// @dart = 2.9
 library test;
 
 import 'infer_types_on_generic_instantiations_in_library_cycle_a.dart';
 
 abstract class A<E> implements I<E> {
-  const A();
-  final E value = null;
+  final E value = throw '';
 }
 
 abstract class M {
@@ -13,9 +11,8 @@
 }
 
 class B<E> extends A<E> implements M {
-  const B();
   int get y => 0;
-  m(a, f(v, int e)) {}
+  m(a, f(v, int e)) => throw '';
 }
 
 foo() {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.expect
index 27f0da3..bc54fe8 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:27:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       . /*@target=A.value*/ value;
 //                             ^
 //
@@ -12,75 +12,46 @@
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
 
-abstract class A<E extends core::Object* = dynamic> extends core::Object implements inf::I<self::A::E*> /*hasConstConstructor*/  {
-  final field self::A::E* value = null;
-  const constructor •() → self::A<self::A::E*>*
+abstract class A<E extends core::Object? = dynamic> extends core::Object implements inf::I<self::A::E%> {
+  final field self::A::E% value = throw "";
+  synthetic constructor •() → self::A<self::A::E%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M extends core::Object {
-  final field core::int* y = 0;
-  synthetic constructor •() → self::M*
+  final field core::int y = 0;
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M /*hasConstConstructor*/  {
-  const constructor •() → self::B<self::B::E*>*
+class B<E extends core::Object? = dynamic> extends self::A<self::B::E%> implements self::M {
+  synthetic constructor •() → self::B<self::B::E%>
     : super self::A::•()
     ;
-  get y() → core::int*
+  get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, core::int*) →* dynamic f) → self::A<self::B::E*>* {}
+  method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E%>
+    return throw "";
 }
 static method foo() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:27:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
-                            ^" in new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*} as{TypeError} core::int*;
-  core::String* z = new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*};
+                            ^" in new self::B::•<core::String>().{self::B::m}(throw "", throw ""){(dynamic, (dynamic, core::int) → dynamic) → self::A<core::String>}.{self::A::value}{core::String} as{TypeError,ForNonNullableByDefault} core::int;
+  core::String z = new self::B::•<core::String>().{self::B::m}(throw "", throw ""){(dynamic, (dynamic, core::int) → dynamic) → self::A<core::String>}.{self::A::value}{core::String};
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 import "infer_types_on_generic_instantiations_in_library_cycle.dart" as self;
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
 
-abstract class I<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → inf::I<inf::I::E*>*
+abstract class I<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → inf::I<inf::I::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → self::A<inf::I::E*>*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, core::int) → core::String f) → self::A<inf::I::E%>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.modular.expect
index 27f0da3..bc54fe8 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:27:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       . /*@target=A.value*/ value;
 //                             ^
 //
@@ -12,75 +12,46 @@
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
 
-abstract class A<E extends core::Object* = dynamic> extends core::Object implements inf::I<self::A::E*> /*hasConstConstructor*/  {
-  final field self::A::E* value = null;
-  const constructor •() → self::A<self::A::E*>*
+abstract class A<E extends core::Object? = dynamic> extends core::Object implements inf::I<self::A::E%> {
+  final field self::A::E% value = throw "";
+  synthetic constructor •() → self::A<self::A::E%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M extends core::Object {
-  final field core::int* y = 0;
-  synthetic constructor •() → self::M*
+  final field core::int y = 0;
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M /*hasConstConstructor*/  {
-  const constructor •() → self::B<self::B::E*>*
+class B<E extends core::Object? = dynamic> extends self::A<self::B::E%> implements self::M {
+  synthetic constructor •() → self::B<self::B::E%>
     : super self::A::•()
     ;
-  get y() → core::int*
+  get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, core::int*) →* dynamic f) → self::A<self::B::E*>* {}
+  method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E%>
+    return throw "";
 }
 static method foo() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:27:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
-                            ^" in new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*} as{TypeError} core::int*;
-  core::String* z = new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*};
+                            ^" in new self::B::•<core::String>().{self::B::m}(throw "", throw ""){(dynamic, (dynamic, core::int) → dynamic) → self::A<core::String>}.{self::A::value}{core::String} as{TypeError,ForNonNullableByDefault} core::int;
+  core::String z = new self::B::•<core::String>().{self::B::m}(throw "", throw ""){(dynamic, (dynamic, core::int) → dynamic) → self::A<core::String>}.{self::A::value}{core::String};
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 import "infer_types_on_generic_instantiations_in_library_cycle.dart" as self;
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
 
-abstract class I<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → inf::I<inf::I::E*>*
+abstract class I<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → inf::I<inf::I::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → self::A<inf::I::E*>*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, core::int) → core::String f) → self::A<inf::I::E%>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.outline.expect
index ee54005..7f214a6 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.outline.expect
@@ -1,48 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_types_on_generic_instantiations_in_library_cycle_a.dart" as inf;
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
 
-abstract class A<E extends core::Object* = dynamic> extends core::Object implements inf::I<self::A::E*> /*hasConstConstructor*/  {
-  final field self::A::E* value = null;
-  const constructor •() → self::A<self::A::E*>*
-    : super core::Object::•()
+abstract class A<E extends core::Object? = dynamic> extends core::Object implements inf::I<self::A::E%> {
+  final field self::A::E% value;
+  synthetic constructor •() → self::A<self::A::E%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M extends core::Object {
-  final field core::int* y;
-  synthetic constructor •() → self::M*
+  final field core::int y;
+  synthetic constructor •() → self::M
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M /*hasConstConstructor*/  {
-  const constructor •() → self::B<self::B::E*>*
-    : super self::A::•()
+class B<E extends core::Object? = dynamic> extends self::A<self::B::E%> implements self::M {
+  synthetic constructor •() → self::B<self::B::E%>
     ;
-  get y() → core::int*
+  get y() → core::int
     ;
-  method m(dynamic a, (dynamic, core::int*) →* dynamic f) → self::A<self::B::E*>*
+  method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E%>
     ;
 }
 static method foo() → dynamic
@@ -50,27 +28,17 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 import "infer_types_on_generic_instantiations_in_library_cycle.dart" as self;
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
 
-abstract class I<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → inf::I<inf::I::E*>*
+abstract class I<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → inf::I<inf::I::E%>
     ;
-  abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → self::A<inf::I::E*>*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, core::int) → core::String f) → self::A<inf::I::E%>;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.transformed.expect
index 27f0da3..bc54fe8 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:27:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       . /*@target=A.value*/ value;
 //                             ^
 //
@@ -12,75 +12,46 @@
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
 
-abstract class A<E extends core::Object* = dynamic> extends core::Object implements inf::I<self::A::E*> /*hasConstConstructor*/  {
-  final field self::A::E* value = null;
-  const constructor •() → self::A<self::A::E*>*
+abstract class A<E extends core::Object? = dynamic> extends core::Object implements inf::I<self::A::E%> {
+  final field self::A::E% value = throw "";
+  synthetic constructor •() → self::A<self::A::E%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M extends core::Object {
-  final field core::int* y = 0;
-  synthetic constructor •() → self::M*
+  final field core::int y = 0;
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M /*hasConstConstructor*/  {
-  const constructor •() → self::B<self::B::E*>*
+class B<E extends core::Object? = dynamic> extends self::A<self::B::E%> implements self::M {
+  synthetic constructor •() → self::B<self::B::E%>
     : super self::A::•()
     ;
-  get y() → core::int*
+  get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, core::int*) →* dynamic f) → self::A<self::B::E*>* {}
+  method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E%>
+    return throw "";
 }
 static method foo() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:27:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
-                            ^" in new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*} as{TypeError} core::int*;
-  core::String* z = new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*};
+                            ^" in new self::B::•<core::String>().{self::B::m}(throw "", throw ""){(dynamic, (dynamic, core::int) → dynamic) → self::A<core::String>}.{self::A::value}{core::String} as{TypeError,ForNonNullableByDefault} core::int;
+  core::String z = new self::B::•<core::String>().{self::B::m}(throw "", throw ""){(dynamic, (dynamic, core::int) → dynamic) → self::A<core::String>}.{self::A::value}{core::String};
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as inf;
 import "dart:core" as core;
 import "infer_types_on_generic_instantiations_in_library_cycle.dart" as self;
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
 
-abstract class I<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → inf::I<inf::I::E*>*
+abstract class I<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → inf::I<inf::I::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → self::A<inf::I::E*>*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, core::int) → core::String f) → self::A<inf::I::E%>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart
index a18c6f7..0d4db22 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 import 'infer_types_on_generic_instantiations_in_library_cycle.dart';
 
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.textual_outline.expect
index b724d7e..05abbc2 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_types_on_generic_instantiations_in_library_cycle.dart';
 
 abstract class I<E> {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.textual_outline_modelled.expect
index b724d7e..05abbc2 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'infer_types_on_generic_instantiations_in_library_cycle.dart';
 
 abstract class I<E> {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.expect
index e7555d5..175ca7d 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.expect
@@ -1,33 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
 
-abstract class I<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::E*>*
+abstract class I<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → test::A<self::I::E*>*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, core::int) → core::String f) → test::A<self::I::E%>;
 }
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:27:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       . /*@target=A.value*/ value;
 //                             ^
 //
@@ -37,50 +27,31 @@
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
 
-abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<test::A::E*> /*hasConstConstructor*/  {
-  final field test::A::E* value = null;
-  const constructor •() → test::A<test::A::E*>*
+abstract class A<E extends core::Object? = dynamic> extends core::Object implements self::I<test::A::E%> {
+  final field test::A::E% value = throw "";
+  synthetic constructor •() → test::A<test::A::E%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M extends core::Object {
-  final field core::int* y = 0;
-  synthetic constructor •() → test::M*
+  final field core::int y = 0;
+  synthetic constructor •() → test::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends test::A<test::B::E*> implements test::M /*hasConstConstructor*/  {
-  const constructor •() → test::B<test::B::E*>*
+class B<E extends core::Object? = dynamic> extends test::A<test::B::E%> implements test::M {
+  synthetic constructor •() → test::B<test::B::E%>
     : super test::A::•()
     ;
-  get y() → core::int*
+  get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, core::int*) →* dynamic f) → test::A<test::B::E*>* {}
+  method m(dynamic a, (dynamic, core::int) → dynamic f) → test::A<test::B::E%>
+    return throw "";
 }
 static method foo() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:27:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
-                            ^" in new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*} as{TypeError} core::int*;
-  core::String* z = new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*};
+                            ^" in new test::B::•<core::String>().{test::B::m}(throw "", throw ""){(dynamic, (dynamic, core::int) → dynamic) → test::A<core::String>}.{test::A::value}{core::String} as{TypeError,ForNonNullableByDefault} core::int;
+  core::String z = new test::B::•<core::String>().{test::B::m}(throw "", throw ""){(dynamic, (dynamic, core::int) → dynamic) → test::A<core::String>}.{test::A::value}{core::String};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.modular.expect
index e7555d5..175ca7d 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.modular.expect
@@ -1,33 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
 
-abstract class I<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::E*>*
+abstract class I<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → test::A<self::I::E*>*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, core::int) → core::String f) → test::A<self::I::E%>;
 }
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:27:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       . /*@target=A.value*/ value;
 //                             ^
 //
@@ -37,50 +27,31 @@
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
 
-abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<test::A::E*> /*hasConstConstructor*/  {
-  final field test::A::E* value = null;
-  const constructor •() → test::A<test::A::E*>*
+abstract class A<E extends core::Object? = dynamic> extends core::Object implements self::I<test::A::E%> {
+  final field test::A::E% value = throw "";
+  synthetic constructor •() → test::A<test::A::E%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M extends core::Object {
-  final field core::int* y = 0;
-  synthetic constructor •() → test::M*
+  final field core::int y = 0;
+  synthetic constructor •() → test::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends test::A<test::B::E*> implements test::M /*hasConstConstructor*/  {
-  const constructor •() → test::B<test::B::E*>*
+class B<E extends core::Object? = dynamic> extends test::A<test::B::E%> implements test::M {
+  synthetic constructor •() → test::B<test::B::E%>
     : super test::A::•()
     ;
-  get y() → core::int*
+  get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, core::int*) →* dynamic f) → test::A<test::B::E*>* {}
+  method m(dynamic a, (dynamic, core::int) → dynamic f) → test::A<test::B::E%>
+    return throw "";
 }
 static method foo() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:27:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
-                            ^" in new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*} as{TypeError} core::int*;
-  core::String* z = new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*};
+                            ^" in new test::B::•<core::String>().{test::B::m}(throw "", throw ""){(dynamic, (dynamic, core::int) → dynamic) → test::A<core::String>}.{test::A::value}{core::String} as{TypeError,ForNonNullableByDefault} core::int;
+  core::String z = new test::B::•<core::String>().{test::B::m}(throw "", throw ""){(dynamic, (dynamic, core::int) → dynamic) → test::A<core::String>}.{test::A::value}{core::String};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.outline.expect
index 0b3d43f..4496783 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.outline.expect
@@ -1,73 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
 
-abstract class I<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::E*>*
+abstract class I<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::E%>
     ;
-  abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → test::A<self::I::E*>*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, core::int) → core::String f) → test::A<self::I::E%>;
 }
 static method main() → dynamic
   ;
 
-library test;
+library test /*isNonNullableByDefault*/;
 import self as test;
 import "dart:core" as core;
 import "infer_types_on_generic_instantiations_in_library_cycle_a.dart" as self;
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
 
-abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<test::A::E*> /*hasConstConstructor*/  {
-  final field test::A::E* value = null;
-  const constructor •() → test::A<test::A::E*>*
-    : super core::Object::•()
+abstract class A<E extends core::Object? = dynamic> extends core::Object implements self::I<test::A::E%> {
+  final field test::A::E% value;
+  synthetic constructor •() → test::A<test::A::E%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M extends core::Object {
-  final field core::int* y;
-  synthetic constructor •() → test::M*
+  final field core::int y;
+  synthetic constructor •() → test::M
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends test::A<test::B::E*> implements test::M /*hasConstConstructor*/  {
-  const constructor •() → test::B<test::B::E*>*
-    : super test::A::•()
+class B<E extends core::Object? = dynamic> extends test::A<test::B::E%> implements test::M {
+  synthetic constructor •() → test::B<test::B::E%>
     ;
-  get y() → core::int*
+  get y() → core::int
     ;
-  method m(dynamic a, (dynamic, core::int*) →* dynamic f) → test::A<test::B::E*>*
+  method m(dynamic a, (dynamic, core::int) → dynamic f) → test::A<test::B::E%>
     ;
 }
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.transformed.expect
index e7555d5..175ca7d 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.transformed.expect
@@ -1,33 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
 
-abstract class I<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::E*>*
+abstract class I<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::E%>
     : super core::Object::•()
     ;
-  abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → test::A<self::I::E*>*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method m(dynamic a, (dynamic, core::int) → core::String f) → test::A<self::I::E%>;
 }
 static method main() → dynamic {}
 
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:27:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //       . /*@target=A.value*/ value;
 //                             ^
 //
@@ -37,50 +27,31 @@
 
 import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
 
-abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<test::A::E*> /*hasConstConstructor*/  {
-  final field test::A::E* value = null;
-  const constructor •() → test::A<test::A::E*>*
+abstract class A<E extends core::Object? = dynamic> extends core::Object implements self::I<test::A::E%> {
+  final field test::A::E% value = throw "";
+  synthetic constructor •() → test::A<test::A::E%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M extends core::Object {
-  final field core::int* y = 0;
-  synthetic constructor •() → test::M*
+  final field core::int y = 0;
+  synthetic constructor •() → test::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<E extends core::Object* = dynamic> extends test::A<test::B::E*> implements test::M /*hasConstConstructor*/  {
-  const constructor •() → test::B<test::B::E*>*
+class B<E extends core::Object? = dynamic> extends test::A<test::B::E%> implements test::M {
+  synthetic constructor •() → test::B<test::B::E%>
     : super test::A::•()
     ;
-  get y() → core::int*
+  get y() → core::int
     return 0;
-  method m(dynamic a, (dynamic, core::int*) →* dynamic f) → test::A<test::B::E*>* {}
+  method m(dynamic a, (dynamic, core::int) → dynamic f) → test::A<test::B::E%>
+    return throw "";
 }
 static method foo() → dynamic {
-  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  core::int y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:27:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
-                            ^" in new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*} as{TypeError} core::int*;
-  core::String* z = new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*};
+                            ^" in new test::B::•<core::String>().{test::B::m}(throw "", throw ""){(dynamic, (dynamic, core::int) → dynamic) → test::A<core::String>}.{test::A::value}{core::String} as{TypeError,ForNonNullableByDefault} core::int;
+  core::String z = new test::B::•<core::String>().{test::B::m}(throw "", throw ""){(dynamic, (dynamic, core::int) → dynamic) → test::A<core::String>}.{test::A::value}{core::String};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart
index bf5a41d..715b06e 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A<T> {
-  final T x = null;
+  final T x = throw '';
 }
 
 class B implements A<int> {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.textual_outline.expect
index 1c2fa21..744b33b 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
-  final T x = null;
+  final T x = throw '';
 }
 
 class B implements A<int> {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.textual_outline_modelled.expect
index 1c2fa21..744b33b 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
-  final T x = null;
+  final T x = throw '';
 }
 
 class B implements A<int> {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.expect
index bd1fcf0..b14e415 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,48 +7,28 @@
 //   /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
 //                                                 ^
 // pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:9:11: Context: This is the overridden method ('x').
-//   final T x = null;
+//   final T x = throw '';
 //           ^
 //
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  final field self::A::T* x = null;
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  final field self::A::T% x = throw "";
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B extends core::Object implements self::A<core::int*> {
-  synthetic constructor •() → self::B*
+class B extends core::Object implements self::A<core::int> {
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   get x() → dynamic
     return 3;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  core::String y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.modular.expect
index bd1fcf0..b14e415 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,48 +7,28 @@
 //   /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
 //                                                 ^
 // pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:9:11: Context: This is the overridden method ('x').
-//   final T x = null;
+//   final T x = throw '';
 //           ^
 //
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  final field self::A::T* x = null;
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  final field self::A::T% x = throw "";
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B extends core::Object implements self::A<core::int*> {
-  synthetic constructor •() → self::B*
+class B extends core::Object implements self::A<core::int> {
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   get x() → dynamic
     return 3;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  core::String y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+  core::int z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.outline.expect
index bfe3eef..9e53db54 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,42 +7,22 @@
 //   /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
 //                                                 ^
 // pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:9:11: Context: This is the overridden method ('x').
-//   final T x = null;
+//   final T x = throw '';
 //           ^
 //
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  final field self::A::T* x;
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  final field self::A::T% x;
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B extends core::Object implements self::A<core::int*> {
-  synthetic constructor •() → self::B*
+class B extends core::Object implements self::A<core::int> {
+  synthetic constructor •() → self::B
     ;
   get x() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart
index 297fbb4..84c283d 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,7 +11,7 @@
 
 class Bar<T extends Iterable<String>> {
   void foo(T t) {
-    for (var /*@ type=String* */ i in t) {
+    for (var /*@type=String*/ i in t) {
       int x = /*error:INVALID_ASSIGNMENT*/ i;
     }
   }
@@ -19,7 +19,7 @@
 
 class Baz<T, E extends Iterable<T>, S extends E> {
   void foo(S t) {
-    for (var /*@ type=Baz::T* */ i in t) {
+    for (var /*@type=Baz::T%*/ i in t) {
       int x = /*error:INVALID_ASSIGNMENT*/ i;
       T y = i;
     }
@@ -27,8 +27,8 @@
 }
 
 test() {
-  var /*@ type=List<Foo*>* */ list = <Foo>[];
-  for (var /*@ type=Foo* */ x in list) {
+  var /*@type=List<Foo>*/ list = <Foo>[];
+  for (var /*@type=Foo*/ x in list) {
     String y = /*error:INVALID_ASSIGNMENT*/ x;
   }
 
@@ -47,15 +47,15 @@
 
   Iterable iter = list;
   for (Foo /*info:DYNAMIC_CAST*/ x in iter) {
-    var /*@ type=Foo* */ y = x;
+    var /*@type=Foo*/ y = x;
   }
 
   dynamic iter2 = list;
   for (Foo /*info:DYNAMIC_CAST*/ x in /*info:DYNAMIC_CAST*/ iter2) {
-    var /*@ type=Foo* */ y = x;
+    var /*@type=Foo*/ y = x;
   }
 
-  var /*@ type=Map<String*, Foo*>* */ map = <String, Foo>{};
+  var /*@type=Map<String, Foo>*/ map = <String, Foo>{};
   // Error: map must be an Iterable.
   for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
     String y = /*info:DYNAMIC_CAST*/ x;
@@ -63,7 +63,7 @@
 
   // We're not properly inferring that map.keys is an Iterable<String>
   // and that x is a String.
-  for (var /*@ type=String* */ x in map. /*@target=Map.keys*/ keys) {
+  for (var /*@type=String*/ x in map. /*@target=Map.keys*/ keys) {
     String y = x;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.textual_outline.expect
index 6ab30aa..db1a358 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.textual_outline_modelled.expect
index 1a50fa6..b1dd9b9 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Bar<T extends Iterable<String>> {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect
index 680de12..26958b0 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -32,111 +32,81 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field core::int* bar = 42;
-  synthetic constructor •() → self::Foo*
+  field core::int bar = 42;
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends core::Iterable<core::String*>*> extends core::Object {
-  synthetic constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends core::Iterable<core::String>> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::T>
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Bar::T* t) → void {
-    for (core::String* i in t) {
-      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  method foo(covariant-by-class self::Bar::T t) → void {
+    for (core::String i in t) {
+      core::int x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in i as{TypeError} core::int*;
+                                           ^" in i as{TypeError,ForNonNullableByDefault} core::int;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Baz<T extends core::Object* = dynamic, E extends core::Iterable<self::Baz::T*>* = core::Iterable<dynamic>*, S extends self::Baz::E* = core::Iterable<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
+class Baz<T extends core::Object? = dynamic, E extends core::Iterable<self::Baz::T%> = core::Iterable<dynamic>, S extends self::Baz::E = core::Iterable<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Baz<self::Baz::T%, self::Baz::E, self::Baz::S>
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Baz::S* t) → void {
-    for (self::Baz::T* i in t) {
-      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+  method foo(covariant-by-class self::Baz::S t) → void {
+    for (self::Baz::T% i in t) {
+      core::int x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in i as{TypeError} core::int*;
-      self::Baz::T* y = i;
+                                           ^" in i as{TypeError,ForNonNullableByDefault} core::int;
+      self::Baz::T% y = i;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  core::List<self::Foo*>* list = <self::Foo*>[];
-  for (self::Foo* x in list) {
-    core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+  core::List<self::Foo> list = <self::Foo>[];
+  for (self::Foo x in list) {
+    core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
-                                            ^" in x as{TypeError} core::String*;
+                                            ^" in x as{TypeError,ForNonNullableByDefault} core::String;
   }
   for (dynamic x in list) {
-    core::String* y = x as{TypeError,ForDynamic} core::String*;
+    core::String y = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   }
-  for (final self::Foo* #t1 in list) {
-    core::String* x = 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'.
+  for (final self::Foo #t1 in list) {
+    core::String x = 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'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
 Try changing the type of the variable.
   for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
-              ^" in #t1 as{TypeError} core::String*;
-    core::String* y = x;
+              ^" in #t1 as{TypeError,ForNonNullableByDefault} core::String;
+    core::String y = x;
   }
   dynamic z;
-  for (final self::Foo* #t2 in list) {
+  for (final self::Foo #t2 in list) {
     z = #t2;
-    core::String* y = z as{TypeError,ForDynamic} core::String*;
+    core::String y = z as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   }
-  core::Iterable<dynamic>* iter = list;
+  core::Iterable<dynamic> iter = list;
   for (final dynamic #t3 in iter) {
-    self::Foo* x = #t3 as{TypeError,ForDynamic} self::Foo*;
-    self::Foo* y = x;
+    self::Foo x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+    self::Foo y = x;
   }
   dynamic iter2 = list;
-  for (final dynamic #t4 in iter2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
-    self::Foo* x = #t4 as{TypeError,ForDynamic} self::Foo*;
-    self::Foo* y = x;
+  for (final dynamic #t4 in iter2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    self::Foo x = #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+    self::Foo y = x;
   }
-  core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
+  core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
   for (dynamic x in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:70: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Map' is from 'dart:core'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
  - '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,ForDynamic} core::String*;
+                                                                     ^" in map as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::String y = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   }
-  for (core::String* x in map.{core::Map::keys}{core::Iterable<core::String*>*}) {
-    core::String* y = x;
+  for (core::String x in map.{core::Map::keys}{core::Iterable<core::String>}) {
+    core::String y = x;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.modular.expect
index 680de12..26958b0 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -32,111 +32,81 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field core::int* bar = 42;
-  synthetic constructor •() → self::Foo*
+  field core::int bar = 42;
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends core::Iterable<core::String*>*> extends core::Object {
-  synthetic constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends core::Iterable<core::String>> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::T>
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Bar::T* t) → void {
-    for (core::String* i in t) {
-      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  method foo(covariant-by-class self::Bar::T t) → void {
+    for (core::String i in t) {
+      core::int x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in i as{TypeError} core::int*;
+                                           ^" in i as{TypeError,ForNonNullableByDefault} core::int;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Baz<T extends core::Object* = dynamic, E extends core::Iterable<self::Baz::T*>* = core::Iterable<dynamic>*, S extends self::Baz::E* = core::Iterable<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
+class Baz<T extends core::Object? = dynamic, E extends core::Iterable<self::Baz::T%> = core::Iterable<dynamic>, S extends self::Baz::E = core::Iterable<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Baz<self::Baz::T%, self::Baz::E, self::Baz::S>
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Baz::S* t) → void {
-    for (self::Baz::T* i in t) {
-      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+  method foo(covariant-by-class self::Baz::S t) → void {
+    for (self::Baz::T% i in t) {
+      core::int x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in i as{TypeError} core::int*;
-      self::Baz::T* y = i;
+                                           ^" in i as{TypeError,ForNonNullableByDefault} core::int;
+      self::Baz::T% y = i;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  core::List<self::Foo*>* list = <self::Foo*>[];
-  for (self::Foo* x in list) {
-    core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+  core::List<self::Foo> list = <self::Foo>[];
+  for (self::Foo x in list) {
+    core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
-                                            ^" in x as{TypeError} core::String*;
+                                            ^" in x as{TypeError,ForNonNullableByDefault} core::String;
   }
   for (dynamic x in list) {
-    core::String* y = x as{TypeError,ForDynamic} core::String*;
+    core::String y = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   }
-  for (final self::Foo* #t1 in list) {
-    core::String* x = 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'.
+  for (final self::Foo #t1 in list) {
+    core::String x = 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'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
 Try changing the type of the variable.
   for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
-              ^" in #t1 as{TypeError} core::String*;
-    core::String* y = x;
+              ^" in #t1 as{TypeError,ForNonNullableByDefault} core::String;
+    core::String y = x;
   }
   dynamic z;
-  for (final self::Foo* #t2 in list) {
+  for (final self::Foo #t2 in list) {
     z = #t2;
-    core::String* y = z as{TypeError,ForDynamic} core::String*;
+    core::String y = z as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   }
-  core::Iterable<dynamic>* iter = list;
+  core::Iterable<dynamic> iter = list;
   for (final dynamic #t3 in iter) {
-    self::Foo* x = #t3 as{TypeError,ForDynamic} self::Foo*;
-    self::Foo* y = x;
+    self::Foo x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+    self::Foo y = x;
   }
   dynamic iter2 = list;
-  for (final dynamic #t4 in iter2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
-    self::Foo* x = #t4 as{TypeError,ForDynamic} self::Foo*;
-    self::Foo* y = x;
+  for (final dynamic #t4 in iter2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    self::Foo x = #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+    self::Foo y = x;
   }
-  core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
+  core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
   for (dynamic x in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:70: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Map' is from 'dart:core'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
  - '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,ForDynamic} core::String*;
+                                                                     ^" in map as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::String y = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   }
-  for (core::String* x in map.{core::Map::keys}{core::Iterable<core::String*>*}) {
-    core::String* y = x;
+  for (core::String x in map.{core::Map::keys}{core::Iterable<core::String>}) {
+    core::String y = x;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.outline.expect
index aafbf7f..7d40754 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.outline.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field core::int* bar;
-  synthetic constructor •() → self::Foo*
+  field core::int bar;
+  synthetic constructor •() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends core::Iterable<core::String*>*> extends core::Object {
-  synthetic constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends core::Iterable<core::String>> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::T>
     ;
-  method foo(covariant-by-class self::Bar::T* t) → void
+  method foo(covariant-by-class self::Bar::T t) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Baz<T extends core::Object* = dynamic, E extends core::Iterable<self::Baz::T*>* = core::Iterable<dynamic>*, S extends self::Baz::E* = core::Iterable<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
+class Baz<T extends core::Object? = dynamic, E extends core::Iterable<self::Baz::T%> = core::Iterable<dynamic>, S extends self::Baz::E = core::Iterable<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Baz<self::Baz::T%, self::Baz::E, self::Baz::S>
     ;
-  method foo(covariant-by-class self::Baz::S* t) → void
+  method foo(covariant-by-class self::Baz::S t) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect
index 06b4abd..4fab18b 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -32,169 +32,139 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field core::int* bar = 42;
-  synthetic constructor •() → self::Foo*
+  field core::int bar = 42;
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends core::Iterable<core::String*>*> extends core::Object {
-  synthetic constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends core::Iterable<core::String>> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::T>
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Bar::T* t) → void {
+  method foo(covariant-by-class self::Bar::T t) → void {
     {
-      core::Iterator<core::String*>* :sync-for-iterator = t.{core::Iterable::iterator}{core::Iterator<core::String*>*};
+      core::Iterator<core::String> :sync-for-iterator = t.{core::Iterable::iterator}{core::Iterator<core::String>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        core::String* i = :sync-for-iterator.{core::Iterator::current}{core::String*};
+        core::String i = :sync-for-iterator.{core::Iterator::current}{core::String};
         {
-          core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          core::int x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in i as{TypeError} core::int*;
+                                           ^" in i as{TypeError,ForNonNullableByDefault} core::int;
         }
       }
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Baz<T extends core::Object* = dynamic, E extends core::Iterable<self::Baz::T*>* = core::Iterable<dynamic>*, S extends self::Baz::E* = core::Iterable<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
+class Baz<T extends core::Object? = dynamic, E extends core::Iterable<self::Baz::T%> = core::Iterable<dynamic>, S extends self::Baz::E = core::Iterable<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Baz<self::Baz::T%, self::Baz::E, self::Baz::S>
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Baz::S* t) → void {
+  method foo(covariant-by-class self::Baz::S t) → void {
     {
-      core::Iterator<self::Baz::T*>* :sync-for-iterator = t.{core::Iterable::iterator}{core::Iterator<self::Baz::T*>*};
+      core::Iterator<self::Baz::T%> :sync-for-iterator = t.{core::Iterable::iterator}{core::Iterator<self::Baz::T%>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        self::Baz::T* i = :sync-for-iterator.{core::Iterator::current}{self::Baz::T*};
+        self::Baz::T% i = :sync-for-iterator.{core::Iterator::current}{self::Baz::T%};
         {
-          core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+          core::int x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in i as{TypeError} core::int*;
-          self::Baz::T* y = i;
+                                           ^" in i as{TypeError,ForNonNullableByDefault} core::int;
+          self::Baz::T% y = i;
         }
       }
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  core::List<self::Foo*>* list = core::_GrowableList::•<self::Foo*>(0);
+  core::List<self::Foo> list = core::_GrowableList::•<self::Foo>(0);
   {
-    core::Iterator<self::Foo*>* :sync-for-iterator = list.{core::Iterable::iterator}{core::Iterator<self::Foo*>*};
+    core::Iterator<self::Foo> :sync-for-iterator = list.{core::Iterable::iterator}{core::Iterator<self::Foo>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      self::Foo* x = :sync-for-iterator.{core::Iterator::current}{self::Foo*};
+      self::Foo x = :sync-for-iterator.{core::Iterator::current}{self::Foo};
       {
-        core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+        core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
-                                            ^" in x as{TypeError} core::String*;
+                                            ^" in x as{TypeError,ForNonNullableByDefault} core::String;
       }
     }
   }
   {
-    core::Iterator<self::Foo*>* :sync-for-iterator = list.{core::Iterable::iterator}{core::Iterator<self::Foo*>*};
+    core::Iterator<self::Foo> :sync-for-iterator = list.{core::Iterable::iterator}{core::Iterator<self::Foo>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      dynamic x = :sync-for-iterator.{core::Iterator::current}{self::Foo*};
+      dynamic x = :sync-for-iterator.{core::Iterator::current}{self::Foo};
       {
-        core::String* y = x as{TypeError,ForDynamic} core::String*;
+        core::String y = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
       }
     }
   }
   {
-    core::Iterator<self::Foo*>* :sync-for-iterator = list.{core::Iterable::iterator}{core::Iterator<self::Foo*>*};
+    core::Iterator<self::Foo> :sync-for-iterator = list.{core::Iterable::iterator}{core::Iterator<self::Foo>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final self::Foo* #t1 = :sync-for-iterator.{core::Iterator::current}{self::Foo*};
+      final self::Foo #t1 = :sync-for-iterator.{core::Iterator::current}{self::Foo};
       {
-        core::String* x = 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'.
+        core::String x = 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'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
 Try changing the type of the variable.
   for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
-              ^" in #t1 as{TypeError} core::String*;
-        core::String* y = x;
+              ^" in #t1 as{TypeError,ForNonNullableByDefault} core::String;
+        core::String y = x;
       }
     }
   }
   dynamic z;
   {
-    core::Iterator<self::Foo*>* :sync-for-iterator = list.{core::Iterable::iterator}{core::Iterator<self::Foo*>*};
+    core::Iterator<self::Foo> :sync-for-iterator = list.{core::Iterable::iterator}{core::Iterator<self::Foo>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final self::Foo* #t2 = :sync-for-iterator.{core::Iterator::current}{self::Foo*};
+      final self::Foo #t2 = :sync-for-iterator.{core::Iterator::current}{self::Foo};
       {
         z = #t2;
-        core::String* y = z as{TypeError,ForDynamic} core::String*;
+        core::String y = z as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
       }
     }
   }
-  core::Iterable<dynamic>* iter = list;
+  core::Iterable<dynamic> iter = list;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = iter.{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = iter.{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       final dynamic #t3 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
-        self::Foo* x = #t3 as{TypeError,ForDynamic} self::Foo*;
-        self::Foo* y = x;
+        self::Foo x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+        self::Foo y = x;
       }
     }
   }
   dynamic iter2 = list;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = (iter2 as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = (iter2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       final dynamic #t4 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
-        self::Foo* x = #t4 as{TypeError,ForDynamic} self::Foo*;
-        self::Foo* y = x;
+        self::Foo x = #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+        self::Foo y = x;
       }
     }
   }
-  core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
+  core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
   {
-    core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:70: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:70: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Map' is from 'dart:core'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
  - '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::Iterable::iterator}{core::Iterator<Never>*};
+                                                                     ^" in map as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       dynamic x = :sync-for-iterator.{core::Iterator::current}{Never};
       {
-        core::String* y = x as{TypeError,ForDynamic} core::String*;
+        core::String y = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
       }
     }
   }
   {
-    core::Iterator<core::String*>* :sync-for-iterator = map.{core::Map::keys}{core::Iterable<core::String*>*}.{core::Iterable::iterator}{core::Iterator<core::String*>*};
+    core::Iterator<core::String> :sync-for-iterator = map.{core::Map::keys}{core::Iterable<core::String>}.{core::Iterable::iterator}{core::Iterator<core::String>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::String* x = :sync-for-iterator.{core::Iterator::current}{core::String*};
+      core::String x = :sync-for-iterator.{core::Iterator::current}{core::String};
       {
-        core::String* y = x;
+        core::String y = x;
       }
     }
   }
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart
index ada372f..da31867 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -13,7 +13,7 @@
 
 class Bar<T extends Stream<String>> {
   foo(T t) async {
-    await for (var /*@ type=String* */ i in t) {
+    await for (var /*@type=String*/ i in t) {
       int x = /*error:INVALID_ASSIGNMENT*/ i;
     }
   }
@@ -21,7 +21,7 @@
 
 class Baz<T, E extends Stream<T>, S extends E> {
   foo(S t) async {
-    await for (var /*@ type=Baz::T* */ i in t) {
+    await for (var /*@type=Baz::T%*/ i in t) {
       int x = /*error:INVALID_ASSIGNMENT*/ i;
       T y = i;
     }
@@ -29,12 +29,12 @@
 }
 
 abstract class MyStream<T> extends Stream<T> {
-  factory MyStream() => null;
+  factory MyStream() => throw '';
 }
 
 test() async {
-  var /*@ type=MyStream<Foo*>* */ myStream = new MyStream<Foo>();
-  await for (var /*@ type=Foo* */ x in myStream) {
+  var /*@type=MyStream<Foo>*/ myStream = new MyStream<Foo>();
+  await for (var /*@type=Foo*/ x in myStream) {
     String y = /*error:INVALID_ASSIGNMENT*/ x;
   }
 
@@ -53,15 +53,15 @@
 
   Stream stream = myStream;
   await for (Foo /*info:DYNAMIC_CAST*/ x in stream) {
-    var /*@ type=Foo* */ y = x;
+    var /*@type=Foo*/ y = x;
   }
 
   dynamic stream2 = myStream;
   await for (Foo /*info:DYNAMIC_CAST*/ x in /*info:DYNAMIC_CAST*/ stream2) {
-    var /*@ type=Foo* */ y = x;
+    var /*@type=Foo*/ y = x;
   }
 
-  var /*@ type=Map<String*, Foo*>* */ map = <String, Foo>{};
+  var /*@type=Map<String, Foo>*/ map = <String, Foo>{};
   // Error: map must be a Stream.
   await for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
     String y = /*info:DYNAMIC_CAST*/ x;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.textual_outline.expect
index 17a0902..17573e5 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -16,7 +15,7 @@
 }
 
 abstract class MyStream<T> extends Stream<T> {
-  factory MyStream() => null;
+  factory MyStream() => throw '';
 }
 
 test() async {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.textual_outline_modelled.expect
index 5c461cd..a6bf644 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
 abstract class MyStream<T> extends Stream<T> {
-  factory MyStream() => null;
+  factory MyStream() => throw '';
 }
 
 class Bar<T extends Stream<String>> {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect
index 0acd6fd..f30cc2e 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -35,164 +35,82 @@
 import "dart:async";
 
 class Foo extends core::Object {
-  field core::int* bar = 42;
-  synthetic constructor •() → self::Foo*
+  field core::int bar = 42;
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends asy::Stream<core::String*>*> extends core::Object {
-  synthetic constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends asy::Stream<core::String>> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::T>
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Bar::T* t) → dynamic async /* futureValueType= dynamic */ {
-    await for (core::String* i in t) {
-      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  method foo(covariant-by-class self::Bar::T t) → dynamic async /* futureValueType= dynamic */ {
+    await for (core::String i in t) {
+      core::int x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in i as{TypeError} core::int*;
+                                           ^" in i as{TypeError,ForNonNullableByDefault} core::int;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Baz<T extends core::Object* = dynamic, E extends asy::Stream<self::Baz::T*>* = asy::Stream<dynamic>*, S extends self::Baz::E* = asy::Stream<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
+class Baz<T extends core::Object? = dynamic, E extends asy::Stream<self::Baz::T%> = asy::Stream<dynamic>, S extends self::Baz::E = asy::Stream<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Baz<self::Baz::T%, self::Baz::E, self::Baz::S>
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Baz::S* t) → dynamic async /* futureValueType= dynamic */ {
-    await for (self::Baz::T* i in t) {
-      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+  method foo(covariant-by-class self::Baz::S t) → dynamic async /* futureValueType= dynamic */ {
+    await for (self::Baz::T% i in t) {
+      core::int x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in i as{TypeError} core::int*;
-      self::Baz::T* y = i;
+                                           ^" in i as{TypeError,ForNonNullableByDefault} core::int;
+      self::Baz::T% y = i;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
-  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
-    return null;
-  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
-  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
-  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
-  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
-  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
-  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
-  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
-  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
-  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
-  abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
-  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
-  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
-  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
-  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
-  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
-  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
-  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
-  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
-  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
-  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
-  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
-  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
-  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
-  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
-  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
-  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
-  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
-  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
-  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
+abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
+  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
+    return throw "";
 }
 static method test() → dynamic async /* futureValueType= dynamic */ {
-  self::MyStream<self::Foo*>* myStream = self::MyStream::•<self::Foo*>();
-  await for (self::Foo* x in myStream) {
-    core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+  self::MyStream<self::Foo> myStream = self::MyStream::•<self::Foo>();
+  await for (self::Foo x in myStream) {
+    core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
-                                            ^" in x as{TypeError} core::String*;
+                                            ^" in x as{TypeError,ForNonNullableByDefault} core::String;
   }
   await for (dynamic x in myStream) {
-    core::String* y = x as{TypeError,ForDynamic} core::String*;
+    core::String y = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   }
-  await for (final self::Foo* #t1 in myStream) {
-    core::String* x = 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'.
+  await for (final self::Foo #t1 in myStream) {
+    core::String x = 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'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
 Try changing the type of the variable.
   await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
-                    ^" in #t1 as{TypeError} core::String*;
-    core::String* y = x;
+                    ^" in #t1 as{TypeError,ForNonNullableByDefault} core::String;
+    core::String y = x;
   }
   dynamic z;
-  await for (final self::Foo* #t2 in myStream) {
+  await for (final self::Foo #t2 in myStream) {
     z = #t2;
-    core::String* y = z as{TypeError,ForDynamic} core::String*;
+    core::String y = z as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   }
-  asy::Stream<dynamic>* stream = myStream;
+  asy::Stream<dynamic> stream = myStream;
   await for (final dynamic #t3 in stream) {
-    self::Foo* x = #t3 as{TypeError,ForDynamic} self::Foo*;
-    self::Foo* y = x;
+    self::Foo x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+    self::Foo y = x;
   }
   dynamic stream2 = myStream;
-  await for (final dynamic #t4 in stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
-    self::Foo* x = #t4 as{TypeError,ForDynamic} self::Foo*;
-    self::Foo* y = x;
+  await for (final dynamic #t4 in stream2 as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>) {
+    self::Foo x = #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+    self::Foo y = x;
   }
-  core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
+  core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
   await for (dynamic x in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:76: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Map' is from 'dart:core'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
  - '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,ForDynamic} core::String*;
+                                                                           ^" in map as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>) {
+    core::String y = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   }
 }
 static method main() → dynamic {}
-
-constants  {
-  #C1 = null
-  #C2 = ""
-}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.modular.expect
index 0acd6fd..f30cc2e 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -35,164 +35,82 @@
 import "dart:async";
 
 class Foo extends core::Object {
-  field core::int* bar = 42;
-  synthetic constructor •() → self::Foo*
+  field core::int bar = 42;
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends asy::Stream<core::String*>*> extends core::Object {
-  synthetic constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends asy::Stream<core::String>> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::T>
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Bar::T* t) → dynamic async /* futureValueType= dynamic */ {
-    await for (core::String* i in t) {
-      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  method foo(covariant-by-class self::Bar::T t) → dynamic async /* futureValueType= dynamic */ {
+    await for (core::String i in t) {
+      core::int x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in i as{TypeError} core::int*;
+                                           ^" in i as{TypeError,ForNonNullableByDefault} core::int;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Baz<T extends core::Object* = dynamic, E extends asy::Stream<self::Baz::T*>* = asy::Stream<dynamic>*, S extends self::Baz::E* = asy::Stream<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
+class Baz<T extends core::Object? = dynamic, E extends asy::Stream<self::Baz::T%> = asy::Stream<dynamic>, S extends self::Baz::E = asy::Stream<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Baz<self::Baz::T%, self::Baz::E, self::Baz::S>
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Baz::S* t) → dynamic async /* futureValueType= dynamic */ {
-    await for (self::Baz::T* i in t) {
-      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+  method foo(covariant-by-class self::Baz::S t) → dynamic async /* futureValueType= dynamic */ {
+    await for (self::Baz::T% i in t) {
+      core::int x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in i as{TypeError} core::int*;
-      self::Baz::T* y = i;
+                                           ^" in i as{TypeError,ForNonNullableByDefault} core::int;
+      self::Baz::T% y = i;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
-  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
-    return null;
-  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
-  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
-  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
-  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
-  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
-  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
-  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
-  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
-  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
-  abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
-  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
-  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
-  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
-  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
-  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
-  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
-  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
-  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
-  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
-  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
-  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
-  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
-  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
-  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
-  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
-  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
-  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
-  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
-  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
+abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
+  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
+    return throw "";
 }
 static method test() → dynamic async /* futureValueType= dynamic */ {
-  self::MyStream<self::Foo*>* myStream = self::MyStream::•<self::Foo*>();
-  await for (self::Foo* x in myStream) {
-    core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+  self::MyStream<self::Foo> myStream = self::MyStream::•<self::Foo>();
+  await for (self::Foo x in myStream) {
+    core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
-                                            ^" in x as{TypeError} core::String*;
+                                            ^" in x as{TypeError,ForNonNullableByDefault} core::String;
   }
   await for (dynamic x in myStream) {
-    core::String* y = x as{TypeError,ForDynamic} core::String*;
+    core::String y = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   }
-  await for (final self::Foo* #t1 in myStream) {
-    core::String* x = 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'.
+  await for (final self::Foo #t1 in myStream) {
+    core::String x = 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'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
 Try changing the type of the variable.
   await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
-                    ^" in #t1 as{TypeError} core::String*;
-    core::String* y = x;
+                    ^" in #t1 as{TypeError,ForNonNullableByDefault} core::String;
+    core::String y = x;
   }
   dynamic z;
-  await for (final self::Foo* #t2 in myStream) {
+  await for (final self::Foo #t2 in myStream) {
     z = #t2;
-    core::String* y = z as{TypeError,ForDynamic} core::String*;
+    core::String y = z as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   }
-  asy::Stream<dynamic>* stream = myStream;
+  asy::Stream<dynamic> stream = myStream;
   await for (final dynamic #t3 in stream) {
-    self::Foo* x = #t3 as{TypeError,ForDynamic} self::Foo*;
-    self::Foo* y = x;
+    self::Foo x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+    self::Foo y = x;
   }
   dynamic stream2 = myStream;
-  await for (final dynamic #t4 in stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
-    self::Foo* x = #t4 as{TypeError,ForDynamic} self::Foo*;
-    self::Foo* y = x;
+  await for (final dynamic #t4 in stream2 as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>) {
+    self::Foo x = #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+    self::Foo y = x;
   }
-  core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
+  core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
   await for (dynamic x in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:76: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Map' is from 'dart:core'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
  - '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,ForDynamic} core::String*;
+                                                                           ^" in map as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>) {
+    core::String y = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   }
 }
 static method main() → dynamic {}
-
-constants  {
-  #C1 = null
-  #C2 = ""
-}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.outline.expect
index ad06471..00ef50f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -6,102 +6,25 @@
 import "dart:async";
 
 class Foo extends core::Object {
-  field core::int* bar;
-  synthetic constructor •() → self::Foo*
+  field core::int bar;
+  synthetic constructor •() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends asy::Stream<core::String*>*> extends core::Object {
-  synthetic constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends asy::Stream<core::String>> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::T>
     ;
-  method foo(covariant-by-class self::Bar::T* t) → dynamic async 
+  method foo(covariant-by-class self::Bar::T t) → dynamic async 
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Baz<T extends core::Object* = dynamic, E extends asy::Stream<self::Baz::T*>* = asy::Stream<dynamic>*, S extends self::Baz::E* = asy::Stream<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
+class Baz<T extends core::Object? = dynamic, E extends asy::Stream<self::Baz::T%> = asy::Stream<dynamic>, S extends self::Baz::E = asy::Stream<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Baz<self::Baz::T%, self::Baz::E, self::Baz::S>
     ;
-  method foo(covariant-by-class self::Baz::S* t) → dynamic async 
+  method foo(covariant-by-class self::Baz::S t) → dynamic async 
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
-  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
+abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
+  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
     ;
-  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
-  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
-  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
-  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
-  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
-  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
-  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
-  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
-  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
-  abstract member-signature method join([core::String* separator]) → asy::Future<core::String*>*; -> asy::Stream::join
-  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
-  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
-  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
-  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
-  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
-  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
-  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
-  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
-  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
-  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
-  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
-  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
-  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
-  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
-  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
-  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
-  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
-  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
-  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError, () →* void onDone, core::bool* cancelOnError}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
 }
 static method test() → dynamic async 
   ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
index 5cac307..6dc3fe7 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -35,166 +35,89 @@
 import "dart:async";
 
 class Foo extends core::Object {
-  field core::int* bar = 42;
-  synthetic constructor •() → self::Foo*
+  field core::int bar = 42;
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends asy::Stream<core::String*>*> extends core::Object {
-  synthetic constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends asy::Stream<core::String>> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::T>
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Bar::T* t) → dynamic async /* futureValueType= dynamic */ {
+  method foo(covariant-by-class self::Bar::T t) → dynamic async /* futureValueType= dynamic */ {
     {
-      self::Bar::T* :stream = t;
-      asy::_StreamIterator<core::String*>* :for-iterator = new asy::_StreamIterator::•<core::String*>(:stream);
+      self::Bar::T :stream = t;
+      asy::_StreamIterator<core::String>? :for-iterator = new asy::_StreamIterator::•<core::String>(:stream);
       try
         while (let dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-          core::String* i = :for-iterator.{asy::_StreamIterator::current}{core::String*};
+          core::String i = :for-iterator.{asy::_StreamIterator::current}{core::String};
           {
-            core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            core::int x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in i as{TypeError} core::int*;
+                                           ^" in i as{TypeError,ForNonNullableByDefault} core::int;
           }
         }
       finally
-        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String*>?} == null))
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null))
           await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Baz<T extends core::Object* = dynamic, E extends asy::Stream<self::Baz::T*>* = asy::Stream<dynamic>*, S extends self::Baz::E* = asy::Stream<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
+class Baz<T extends core::Object? = dynamic, E extends asy::Stream<self::Baz::T%> = asy::Stream<dynamic>, S extends self::Baz::E = asy::Stream<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Baz<self::Baz::T%, self::Baz::E, self::Baz::S>
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Baz::S* t) → dynamic async /* futureValueType= dynamic */ {
+  method foo(covariant-by-class self::Baz::S t) → dynamic async /* futureValueType= dynamic */ {
     {
-      self::Baz::S* :stream = t;
-      asy::_StreamIterator<self::Baz::T*>* :for-iterator = new asy::_StreamIterator::•<self::Baz::T*>(:stream);
+      self::Baz::S :stream = t;
+      asy::_StreamIterator<self::Baz::T%>? :for-iterator = new asy::_StreamIterator::•<self::Baz::T%>(:stream);
       try
         while (let dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-          self::Baz::T* i = :for-iterator.{asy::_StreamIterator::current}{self::Baz::T*};
+          self::Baz::T% i = :for-iterator.{asy::_StreamIterator::current}{self::Baz::T%};
           {
-            core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+            core::int x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in i as{TypeError} core::int*;
-            self::Baz::T* y = i;
+                                           ^" in i as{TypeError,ForNonNullableByDefault} core::int;
+            self::Baz::T% y = i;
           }
         }
       finally
-        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Baz::T*>?} == null))
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Baz::T%>?} == null))
           await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
-  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
-    return null;
-  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
-  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
-  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
-  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
-  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
-  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
-  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
-  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
-  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
-  abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
-  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
-  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
-  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
-  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
-  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
-  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
-  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
-  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
-  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
-  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
-  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
-  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
-  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
-  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
-  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
-  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
-  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
-  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
-  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
+abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
+  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
+    return throw "";
 }
 static method test() → dynamic async /* futureValueType= dynamic */ {
-  self::MyStream<self::Foo*>* myStream = self::MyStream::•<self::Foo*>();
+  self::MyStream<self::Foo> myStream = self::MyStream::•<self::Foo>();
   {
-    self::MyStream<self::Foo*>* :stream = myStream;
-    asy::_StreamIterator<self::Foo*>* :for-iterator = new asy::_StreamIterator::•<self::Foo*>(:stream);
+    self::MyStream<self::Foo> :stream = myStream;
+    asy::_StreamIterator<self::Foo>? :for-iterator = new asy::_StreamIterator::•<self::Foo>(:stream);
     try
       while (let dynamic #t3 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-        self::Foo* x = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
+        self::Foo x = :for-iterator.{asy::_StreamIterator::current}{self::Foo};
         {
-          core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+          core::String y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
-                                            ^" in x as{TypeError} core::String*;
+                                            ^" in x as{TypeError,ForNonNullableByDefault} core::String;
         }
       }
     finally
-      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null))
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
   {
-    self::MyStream<self::Foo*>* :stream = myStream;
-    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    self::MyStream<self::Foo> :stream = myStream;
+    asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
     try
       while (let dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
         dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          core::String* y = x as{TypeError,ForDynamic} core::String*;
+          core::String y = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
         }
       }
     finally
@@ -202,50 +125,50 @@
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
   {
-    self::MyStream<self::Foo*>* :stream = myStream;
-    asy::_StreamIterator<self::Foo*>* :for-iterator = new asy::_StreamIterator::•<self::Foo*>(:stream);
+    self::MyStream<self::Foo> :stream = myStream;
+    asy::_StreamIterator<self::Foo>? :for-iterator = new asy::_StreamIterator::•<self::Foo>(:stream);
     try
       while (let dynamic #t5 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-        final self::Foo* #t6 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
+        final self::Foo #t6 = :for-iterator.{asy::_StreamIterator::current}{self::Foo};
         {
-          core::String* x = 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'.
+          core::String x = 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'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
 Try changing the type of the variable.
   await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
-                    ^" in #t6 as{TypeError} core::String*;
-          core::String* y = x;
+                    ^" in #t6 as{TypeError,ForNonNullableByDefault} core::String;
+          core::String y = x;
         }
       }
     finally
-      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null))
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
   dynamic z;
   {
-    self::MyStream<self::Foo*>* :stream = myStream;
-    asy::_StreamIterator<self::Foo*>* :for-iterator = new asy::_StreamIterator::•<self::Foo*>(:stream);
+    self::MyStream<self::Foo> :stream = myStream;
+    asy::_StreamIterator<self::Foo>? :for-iterator = new asy::_StreamIterator::•<self::Foo>(:stream);
     try
       while (let dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-        final self::Foo* #t8 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
+        final self::Foo #t8 = :for-iterator.{asy::_StreamIterator::current}{self::Foo};
         {
           z = #t8;
-          core::String* y = z as{TypeError,ForDynamic} core::String*;
+          core::String y = z as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
         }
       }
     finally
-      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null))
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
-  asy::Stream<dynamic>* stream = myStream;
+  asy::Stream<dynamic> stream = myStream;
   {
-    asy::Stream<dynamic>* :stream = stream;
-    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    asy::Stream<dynamic> :stream = stream;
+    asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
     try
       while (let dynamic #t9 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
         final dynamic #t10 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          self::Foo* x = #t10 as{TypeError,ForDynamic} self::Foo*;
-          self::Foo* y = x;
+          self::Foo x = #t10 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+          self::Foo y = x;
         }
       }
     finally
@@ -254,34 +177,34 @@
   }
   dynamic stream2 = myStream;
   {
-    asy::Stream<dynamic>* :stream = stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*;
-    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    asy::Stream<dynamic> :stream = stream2 as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>;
+    asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
     try
       while (let dynamic #t11 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
         final dynamic #t12 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          self::Foo* x = #t12 as{TypeError,ForDynamic} self::Foo*;
-          self::Foo* y = x;
+          self::Foo x = #t12 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo;
+          self::Foo y = x;
         }
       }
     finally
       if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
-  core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
+  core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
   {
     Never :stream = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:76: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Map' is from 'dart:core'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
  - '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>*;
-    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+                                                                           ^" in map as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>;
+    asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
     try
       while (let dynamic #t13 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
         dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          core::String* y = x as{TypeError,ForDynamic} core::String*;
+          core::String y = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
         }
       }
     finally
@@ -290,8 +213,3 @@
   }
 }
 static method main() → dynamic {}
-
-constants  {
-  #C1 = null
-  #C2 = ""
-}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart
index f377d5f..a8f810d 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 test() {
-  for (var /*@ type=int* */ i = 0;
+  for (var /*@type=int*/ i = 0;
       i /*@target=num.<*/ < 10;
       i /*@target=num.+*/ ++) {
     int j = i /*@target=num.+*/ + 1;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.textual_outline.expect
index 84bb5b3..c70c84a 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 test() {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.textual_outline_modelled.expect
index 630ead4..10819ea 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.expect
index 22c972f..666e42c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → dynamic {
-  for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    core::int* j = i.{core::num::+}(1){(core::num*) →* core::int*};
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    core::int j = i.{core::num::+}(1){(core::num) → core::int};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.modular.expect
index 22c972f..666e42c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → dynamic {
-  for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    core::int* j = i.{core::num::+}(1){(core::num*) →* core::int*};
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    core::int j = i.{core::num::+}(1){(core::num) → core::int};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.outline.expect
index 8e85697..100b8e9 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.transformed.expect
index 22c972f..666e42c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → dynamic {
-  for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    core::int* j = i.{core::num::+}(1){(core::num*) →* core::int*};
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    core::int j = i.{core::num::+}(1){(core::num) → core::int};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart
index c390b0a..e6e32e8 100644
--- a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart
+++ b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.textual_outline.expect
index 1ed6a1b..37187cb 100644
--- a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void f() {}
diff --git a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.textual_outline_modelled.expect
index 510ed2c..4e388e1 100644
--- a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.expect b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.expect
index f8773b2..7a06d87 100644
--- a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method f() → void {}
diff --git a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.modular.expect
index f8773b2..7a06d87 100644
--- a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method f() → void {}
diff --git a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.outline.expect
index d0366a8..8365ca5 100644
--- a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method f() → void
diff --git a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.transformed.expect
index f8773b2..7a06d87 100644
--- a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method f() → void {}
diff --git a/pkg/front_end/testcases/inference/infer_variable_void.dart b/pkg/front_end/testcases/inference/infer_variable_void.dart
index efca54d..65fdfb3 100644
--- a/pkg/front_end/testcases/inference/infer_variable_void.dart
+++ b/pkg/front_end/testcases/inference/infer_variable_void.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/infer_variable_void.dart.textual_outline.expect b/pkg/front_end/testcases/inference/infer_variable_void.dart.textual_outline.expect
index 0627c58..e064860 100644
--- a/pkg/front_end/testcases/inference/infer_variable_void.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/infer_variable_void.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void f() {}
diff --git a/pkg/front_end/testcases/inference/infer_variable_void.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/infer_variable_void.dart.textual_outline_modelled.expect
index 73eff79..9e93269 100644
--- a/pkg/front_end/testcases/inference/infer_variable_void.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/infer_variable_void.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.expect b/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.expect
index 3bfd2e6..f7ec0b6 100644
--- a/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static field void x = self::f();
diff --git a/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.modular.expect
index 3bfd2e6..f7ec0b6 100644
--- a/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static field void x = self::f();
diff --git a/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.outline.expect
index 3c20c2d..3ef4a95 100644
--- a/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static field void x;
diff --git a/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.transformed.expect
index 3bfd2e6..f7ec0b6 100644
--- a/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static field void x = self::f();
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart
index 5a86959..5ecd7db 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.textual_outline.expect
index a6850eb..4e7cbdc 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.textual_outline_modelled.expect
index 7add8e5..57d515d 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Foo {
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.expect
index 524ef39..e61825f 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,21 +10,11 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field core::int* x = 1;
-  constructor •([core::int* x = invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  field core::int x = 1;
+  constructor •([core::int x = invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);
-                                             ^"]) → self::Foo*
+                                             ^"]) → self::Foo
     : self::Foo::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.modular.expect
index 524ef39..e61825f 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,21 +10,11 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field core::int* x = 1;
-  constructor •([core::int* x = invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  field core::int x = 1;
+  constructor •([core::int x = invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);
-                                             ^"]) → self::Foo*
+                                             ^"]) → self::Foo
     : self::Foo::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.outline.expect
index c617c3d..5aac32f 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,21 +10,11 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field core::int* x;
-  constructor •([core::int* x = invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  field core::int x;
+  constructor •([core::int x = invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);
-                                             ^" in "1" as{TypeError} core::int*]) → self::Foo*
+                                             ^" in "1" as{TypeError,ForNonNullableByDefault} core::int]) → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.transformed.expect
index 524ef39..e61825f 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,21 +10,11 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field core::int* x = 1;
-  constructor •([core::int* x = invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  field core::int x = 1;
+  constructor •([core::int x = invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);
-                                             ^"]) → self::Foo*
+                                             ^"]) → self::Foo
     : self::Foo::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart
index fba8b45..760375f 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
   static var x = 'x';
-  var y = /*@ typeArgs=String*, Map<String*, String*>* */ {
-    'a': /*@ typeArgs=String*, String* */ {'b': 'c'},
-    'd': /*@ typeArgs=String*, String* */ {'e': x}
+  var y = /*@typeArgs=String, Map<String, String>*/ {
+    'a': /*@typeArgs=String, String*/ {'b': 'c'},
+    'd': /*@typeArgs=String, String*/ {'e': x}
   };
 }
 
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.textual_outline.expect
index e3e7924..ab2bd61 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.textual_outline_modelled.expect
index e3e7924..ab2bd61 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.expect
index 24a6a4b..a09587a 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::String* x = "x";
-  field core::Map<core::String*, core::Map<core::String*, core::String*>*>* y = <core::String*, core::Map<core::String*, core::String*>*>{"a": <core::String*, core::String*>{"b": "c"}, "d": <core::String*, core::String*>{"e": self::C::x}};
-  synthetic constructor •() → self::C*
+  static field core::String x = "x";
+  field core::Map<core::String, core::Map<core::String, core::String>> y = <core::String, core::Map<core::String, core::String>>{"a": <core::String, core::String>{"b": "c"}, "d": <core::String, core::String>{"e": self::C::x}};
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.modular.expect
index 24a6a4b..a09587a 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.modular.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::String* x = "x";
-  field core::Map<core::String*, core::Map<core::String*, core::String*>*>* y = <core::String*, core::Map<core::String*, core::String*>*>{"a": <core::String*, core::String*>{"b": "c"}, "d": <core::String*, core::String*>{"e": self::C::x}};
-  synthetic constructor •() → self::C*
+  static field core::String x = "x";
+  field core::Map<core::String, core::Map<core::String, core::String>> y = <core::String, core::Map<core::String, core::String>>{"a": <core::String, core::String>{"b": "c"}, "d": <core::String, core::String>{"e": self::C::x}};
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.outline.expect
index 440ca7b..78b8b5f 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::String* x;
-  field core::Map<core::String*, core::Map<core::String*, core::String*>*>* y;
-  synthetic constructor •() → self::C*
+  static field core::String x;
+  field core::Map<core::String, core::Map<core::String, core::String>> y;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.transformed.expect
index 24a6a4b..a09587a 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.transformed.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::String* x = "x";
-  field core::Map<core::String*, core::Map<core::String*, core::String*>*>* y = <core::String*, core::Map<core::String*, core::String*>*>{"a": <core::String*, core::String*>{"b": "c"}, "d": <core::String*, core::String*>{"e": self::C::x}};
-  synthetic constructor •() → self::C*
+  static field core::String x = "x";
+  field core::Map<core::String, core::Map<core::String, core::String>> y = <core::String, core::Map<core::String, core::String>>{"a": <core::String, core::String>{"b": "c"}, "d": <core::String, core::String>{"e": self::C::x}};
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart
index d24c133..8e9c16b 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.textual_outline.expect
index ce1a48e..766e416 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var x = 'x';
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.textual_outline_modelled.expect
index c01336a..fd2cec5 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.expect
index 3b47743..677b806 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::String* y = self::x;
-  synthetic constructor •() → self::C*
+  field core::String y = self::x;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::String* x = "x";
+static field core::String x = "x";
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.modular.expect
index 3b47743..677b806 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.modular.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::String* y = self::x;
-  synthetic constructor •() → self::C*
+  field core::String y = self::x;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::String* x = "x";
+static field core::String x = "x";
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.outline.expect
index 0abe37d..0e33b94 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::String* y;
-  synthetic constructor •() → self::C*
+  field core::String y;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::String* x;
+static field core::String x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.transformed.expect
index 3b47743..677b806 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.transformed.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::String* y = self::x;
-  synthetic constructor •() → self::C*
+  field core::String y = self::x;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::String* x = "x";
+static field core::String x = "x";
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart
index ee9d519..ed4c775 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart
@@ -1,10 +1,10 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=() ->* Null */ f = /*@ returnType=Null */ () {};
+  var /*@type=() -> Null*/ f = /*@ returnType=Null */ () {};
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.expect
index 8ee4d33..9b2e180 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.expect
@@ -1,6 +1,6 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic {
-  () →* Null f = () → Null {};
+  () → Null f = () → Null {};
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.modular.expect
index 8ee4d33..9b2e180 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.modular.expect
@@ -1,6 +1,6 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic {
-  () →* Null f = () → Null {};
+  () → Null f = () → Null {};
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.transformed.expect
index 8ee4d33..9b2e180 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.transformed.expect
@@ -1,6 +1,6 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic {
-  () →* Null f = () → Null {};
+  () → Null f = () → Null {};
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart
index e899595..7cca2f1 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,5 +10,5 @@
 }
 
 main() {
-  var /*@ type=C* */ c = new C(/*@ returnType=Null */ () {});
+  var /*@type=C*/ c = new C(/*@returnType=void*/ () {});
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.textual_outline.expect
index c4ef339..beb68c7 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.textual_outline_modelled.expect
index c4ef339..beb68c7 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.expect
index 21efe4c..d019bb1 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •(() →* void func) → self::C*
+  constructor •(() → void func) → self::C
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•(() → Null {});
+  self::C c = new self::C::•(() → void {});
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.modular.expect
index 21efe4c..d019bb1 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •(() →* void func) → self::C*
+  constructor •(() → void func) → self::C
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•(() → Null {});
+  self::C c = new self::C::•(() → void {});
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.outline.expect
index 59e91e3..8744ebb 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •(() →* void func) → self::C*
+  constructor •(() → void func) → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.transformed.expect
index 21efe4c..d019bb1 100644
--- a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •(() →* void func) → self::C*
+  constructor •(() → void func) → self::C
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•(() → Null {});
+  self::C c = new self::C::•(() → void {});
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart b/pkg/front_end/testcases/inference/inferred_type_cascade.dart
index 8d97b7d..b33149c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_cascade.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A {
-  int a;
-  List<int> b;
+  int a = 0;
+  List<int> b = /*@typeArgs=int*/ [];
   void m() {}
 }
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.textual_outline.expect
index 08b17fc..028c66f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class A {
-  int a;
-  List<int> b;
+  int a = 0;
+  List<int> b = [];
   void m() {}
 }
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.textual_outline_modelled.expect
index e94beb3..0120650 100644
--- a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class A {
-  List<int> b;
-  int a;
+  List<int> b = [];
+  int a = 0;
   void m() {}
 }
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.expect
index e5b98d2..3cf2f58 100644
--- a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* a = null;
-  field core::List<core::int*>* b = null;
-  synthetic constructor •() → self::A*
+  field core::int a = 0;
+  field core::List<core::int> b = <core::int>[];
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method m() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* v = let final self::A* #t1 = new self::A::•() in block {
+static field self::A v = let final self::A #t1 = new self::A::•() in block {
   #t1.{self::A::a} = 1;
-  #t1.{self::A::b}{core::List<core::int*>*}.{core::List::add}(2){(core::int*) →* void};
-  #t1.{self::A::m}(){() →* void};
+  #t1.{self::A::b}{core::List<core::int>}.{core::List::add}(2){(core::int) → void};
+  #t1.{self::A::m}(){() → void};
 } =>#t1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.modular.expect
index e5b98d2..3cf2f58 100644
--- a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* a = null;
-  field core::List<core::int*>* b = null;
-  synthetic constructor •() → self::A*
+  field core::int a = 0;
+  field core::List<core::int> b = <core::int>[];
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method m() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* v = let final self::A* #t1 = new self::A::•() in block {
+static field self::A v = let final self::A #t1 = new self::A::•() in block {
   #t1.{self::A::a} = 1;
-  #t1.{self::A::b}{core::List<core::int*>*}.{core::List::add}(2){(core::int*) →* void};
-  #t1.{self::A::m}(){() →* void};
+  #t1.{self::A::b}{core::List<core::int>}.{core::List::add}(2){(core::int) → void};
+  #t1.{self::A::m}(){() → void};
 } =>#t1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.outline.expect
index 396d8a1..d8c5a7a 100644
--- a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* a;
-  field core::List<core::int*>* b;
-  synthetic constructor •() → self::A*
+  field core::int a;
+  field core::List<core::int> b;
+  synthetic constructor •() → self::A
     ;
   method m() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* v;
+static field self::A v;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.transformed.expect
index e5b98d2..d82d4f3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.transformed.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* a = null;
-  field core::List<core::int*>* b = null;
-  synthetic constructor •() → self::A*
+  field core::int a = 0;
+  field core::List<core::int> b = core::_GrowableList::•<core::int>(0);
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method m() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* v = let final self::A* #t1 = new self::A::•() in block {
+static field self::A v = let final self::A #t1 = new self::A::•() in block {
   #t1.{self::A::a} = 1;
-  #t1.{self::A::b}{core::List<core::int*>*}.{core::List::add}(2){(core::int*) →* void};
-  #t1.{self::A::m}(){() →* void};
+  #t1.{self::A::b}{core::List<core::int>}.{core::List::add}(2){(core::int) → void};
+  #t1.{self::A::m}(){() → void};
 } =>#t1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart
index f4d66e4..082a541 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.textual_outline.expect
index 7ac968f..e6999dd 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.textual_outline_modelled.expect
index 1321da2..82580a5 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 C c = new C();
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.expect
index 83b4e3b..f731f5c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator *(self::C* other) → core::bool*
+  operator *(self::C other) → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c = new self::C::•();
-static field core::bool* x = self::c.{self::C::*}(self::c){(self::C*) →* core::bool*};
+static field self::C c = new self::C::•();
+static field core::bool x = self::c.{self::C::*}(self::c){(self::C) → core::bool};
 static method main() → dynamic {
   self::c;
   self::x;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.modular.expect
index 83b4e3b..f731f5c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator *(self::C* other) → core::bool*
+  operator *(self::C other) → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c = new self::C::•();
-static field core::bool* x = self::c.{self::C::*}(self::c){(self::C*) →* core::bool*};
+static field self::C c = new self::C::•();
+static field core::bool x = self::c.{self::C::*}(self::c){(self::C) → core::bool};
 static method main() → dynamic {
   self::c;
   self::x;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.outline.expect
index ff48fe4..f8410a5 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  operator *(self::C* other) → core::bool*
+  operator *(self::C other) → core::bool
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field core::bool* x;
+static field self::C c;
+static field core::bool x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.transformed.expect
index 83b4e3b..f731f5c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator *(self::C* other) → core::bool*
+  operator *(self::C other) → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c = new self::C::•();
-static field core::bool* x = self::c.{self::C::*}(self::c){(self::C*) →* core::bool*};
+static field self::C c = new self::C::•();
+static field core::bool x = self::c.{self::C::*}(self::c){(self::C) → core::bool};
 static method main() → dynamic {
   self::c;
   self::x;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart
index c31ac32..6f03812 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,9 +11,9 @@
 
 abstract class C implements I {}
 
-C c;
+C c = throw '';
 var x = c /*@target=I.**/ * c;
 
-main() {
+test() {
   c;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.textual_outline.expect
index 40ec159..8c59e01 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class I {
@@ -7,6 +6,6 @@
 
 abstract class C implements I {}
 
-C c;
+C c = throw '';
 var x = c * c;
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.textual_outline_modelled.expect
index 30aecfa..e133e7b 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-C c;
+C c = throw '';
 
 abstract class C implements I {}
 
@@ -9,5 +8,5 @@
   bool operator *(C other) => true;
 }
 
-main() {}
+test() {}
 var x = c * c;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.expect
index 6764bc5..a6cc255 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  operator *(self::C* other) → core::bool*
+  operator *(self::C other) → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field core::bool* x = self::c.{self::I::*}(self::c){(self::C*) →* core::bool*};
-static method main() → dynamic {
+static field self::C c = throw "";
+static field core::bool x = self::c.{self::I::*}(self::c){(self::C) → core::bool};
+static method test() → dynamic {
   self::c;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.modular.expect
index 6764bc5..a6cc255 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.modular.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  operator *(self::C* other) → core::bool*
+  operator *(self::C other) → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field core::bool* x = self::c.{self::I::*}(self::c){(self::C*) →* core::bool*};
-static method main() → dynamic {
+static field self::C c = throw "";
+static field core::bool x = self::c.{self::I::*}(self::c){(self::C) → core::bool};
+static method test() → dynamic {
   self::c;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.outline.expect
index 2f69c5f..7399445 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  operator *(self::C* other) → core::bool*
+  operator *(self::C other) → core::bool
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field core::bool* x;
-static method main() → dynamic
+static field self::C c;
+static field core::bool x;
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.transformed.expect
index 6764bc5..a6cc255 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.transformed.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  operator *(self::C* other) → core::bool*
+  operator *(self::C other) → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field core::bool* x = self::c.{self::I::*}(self::c){(self::C*) →* core::bool*};
-static method main() → dynamic {
+static field self::C c = throw "";
+static field core::bool x = self::c.{self::I::*}(self::c){(self::C) → core::bool};
+static method test() → dynamic {
   self::c;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart
index afb2888..825aa6b 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,5 +11,5 @@
 
 main() {
   C c = new C();
-  var /*@ type=bool* */ x = c /*@target=C.[]*/ [0];
+  var /*@type=bool*/ x = c /*@target=C.[]*/ [0];
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.textual_outline.expect
index 6a44be8..2d475c3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.textual_outline_modelled.expect
index 6a44be8..2d475c3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.expect
index 250adf8..a5697a6 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator [](core::int* index) → core::bool*
+  operator [](core::int index) → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
-  core::bool* x = c.{self::C::[]}(0){(core::int*) →* core::bool*};
+  self::C c = new self::C::•();
+  core::bool x = c.{self::C::[]}(0){(core::int) → core::bool};
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.modular.expect
index 250adf8..a5697a6 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator [](core::int* index) → core::bool*
+  operator [](core::int index) → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
-  core::bool* x = c.{self::C::[]}(0){(core::int*) →* core::bool*};
+  self::C c = new self::C::•();
+  core::bool x = c.{self::C::[]}(0){(core::int) → core::bool};
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.outline.expect
index 5329d5f..877629b 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  operator [](core::int* index) → core::bool*
+  operator [](core::int index) → core::bool
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.transformed.expect
index 250adf8..a5697a6 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator [](core::int* index) → core::bool*
+  operator [](core::int index) → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•();
-  core::bool* x = c.{self::C::[]}(0){(core::int*) →* core::bool*};
+  self::C c = new self::C::•();
+  core::bool x = c.{self::C::[]}(0){(core::int) → core::bool};
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart
index 3ee86cb..59b19f3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,9 +11,8 @@
 
 abstract class C implements I {}
 
-f() {
-  C c;
-  var /*@ type=bool* */ x = c /*@target=I.[]*/ [0];
+f(C c) {
+  var /*@type=bool*/ x = c /*@target=I.[]*/ [0];
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.textual_outline.expect
index 1032ae5..1546462 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class I {
@@ -7,5 +6,5 @@
 
 abstract class C implements I {}
 
-f() {}
+f(C c) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.textual_outline_modelled.expect
index d0bcdda..ae95753 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class C implements I {}
@@ -7,5 +6,5 @@
   bool operator [](int index) => true;
 }
 
-f() {}
+f(C c) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.expect
index 007c0cd..49a12f7 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.expect
@@ -1,41 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  operator [](core::int* index) → core::bool*
+  operator [](core::int index) → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f() → dynamic {
-  self::C* c;
-  core::bool* x = c.{self::I::[]}(0){(core::int*) →* core::bool*};
+static method f(self::C c) → dynamic {
+  core::bool x = c.{self::I::[]}(0){(core::int) → core::bool};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.modular.expect
index 007c0cd..49a12f7 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.modular.expect
@@ -1,41 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  operator [](core::int* index) → core::bool*
+  operator [](core::int index) → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f() → dynamic {
-  self::C* c;
-  core::bool* x = c.{self::I::[]}(0){(core::int*) →* core::bool*};
+static method f(self::C c) → dynamic {
+  core::bool x = c.{self::I::[]}(0){(core::int) → core::bool};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.outline.expect
index 35afd45..1b09b8d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  operator [](core::int* index) → core::bool*
+  operator [](core::int index) → core::bool
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f() → dynamic
+static method f(self::C c) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.transformed.expect
index 007c0cd..49a12f7 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.transformed.expect
@@ -1,41 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  operator [](core::int* index) → core::bool*
+  operator [](core::int index) → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f() → dynamic {
-  self::C* c;
-  core::bool* x = c.{self::I::[]}(0){(core::int*) →* core::bool*};
+static method f(self::C c) → dynamic {
+  core::bool x = c.{self::I::[]}(0){(core::int) → core::bool};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart
index 7b0a39c..e5e734e 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.textual_outline.expect
index 2b6326a..8f42327 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.textual_outline_modelled.expect
index 4b4b77a..faae8e3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 C c = new C();
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.expect
index d0c4a3c..a87e3b4 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator unary-() → core::bool*
+  operator unary-() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c = new self::C::•();
-static field core::bool* x = self::c.{self::C::unary-}(){() →* core::bool*};
+static field self::C c = new self::C::•();
+static field core::bool x = self::c.{self::C::unary-}(){() → core::bool};
 static method main() → dynamic {
   self::c;
   self::x;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.modular.expect
index d0c4a3c..a87e3b4 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator unary-() → core::bool*
+  operator unary-() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c = new self::C::•();
-static field core::bool* x = self::c.{self::C::unary-}(){() →* core::bool*};
+static field self::C c = new self::C::•();
+static field core::bool x = self::c.{self::C::unary-}(){() → core::bool};
 static method main() → dynamic {
   self::c;
   self::x;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.outline.expect
index a662c5a..8bbc970 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  operator unary-() → core::bool*
+  operator unary-() → core::bool
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field core::bool* x;
+static field self::C c;
+static field core::bool x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.transformed.expect
index d0c4a3c..a87e3b4 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator unary-() → core::bool*
+  operator unary-() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c = new self::C::•();
-static field core::bool* x = self::c.{self::C::unary-}(){() →* core::bool*};
+static field self::C c = new self::C::•();
+static field core::bool x = self::c.{self::C::unary-}(){() → core::bool};
 static method main() → dynamic {
   self::c;
   self::x;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart
index a8803b2..82718b1 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,9 +11,9 @@
 
 abstract class C implements I {}
 
-C c;
+C c = throw '';
 var x = /*@target=I.unary-*/ -c;
 
-main() {
+test() {
   c;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.textual_outline.expect
index b92e9c8..bca6e26 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class I {
@@ -7,6 +6,6 @@
 
 abstract class C implements I {}
 
-C c;
+C c = throw '';
 var x = -c;
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.textual_outline_modelled.expect
index e1a2934..512d479 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-C c;
+C c = throw '';
 
 abstract class C implements I {}
 
@@ -9,5 +8,5 @@
   bool operator -() => true;
 }
 
-main() {}
+test() {}
 var x = -c;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.expect
index 443ba4b..38d07e6 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  operator unary-() → core::bool*
+  operator unary-() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field core::bool* x = self::c.{self::I::unary-}(){() →* core::bool*};
-static method main() → dynamic {
+static field self::C c = throw "";
+static field core::bool x = self::c.{self::I::unary-}(){() → core::bool};
+static method test() → dynamic {
   self::c;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.modular.expect
index 443ba4b..38d07e6 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.modular.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  operator unary-() → core::bool*
+  operator unary-() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field core::bool* x = self::c.{self::I::unary-}(){() →* core::bool*};
-static method main() → dynamic {
+static field self::C c = throw "";
+static field core::bool x = self::c.{self::I::unary-}(){() → core::bool};
+static method test() → dynamic {
   self::c;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.outline.expect
index 7ff3691..08aa6e6 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  operator unary-() → core::bool*
+  operator unary-() → core::bool
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field core::bool* x;
-static method main() → dynamic
+static field self::C c;
+static field core::bool x;
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.transformed.expect
index 443ba4b..38d07e6 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.transformed.expect
@@ -1,41 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  operator unary-() → core::bool*
+  operator unary-() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field core::bool* x = self::c.{self::I::unary-}(){() →* core::bool*};
-static method main() → dynamic {
+static field self::C c = throw "";
+static field core::bool x = self::c.{self::I::unary-}(){() → core::bool};
+static method test() → dynamic {
   self::c;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart
index fd183c5..36f1953 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
   bool g() => true;
 }
 
-C f() => null;
+C f() => throw '';
 var x = f(). /*@target=C.g*/ g;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.textual_outline.expect
index 9748fda..e23deee 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 class C {
   bool g() => true;
 }
 
-C f() => null;
+C f() => throw '';
 var x = f().g;
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.textual_outline_modelled.expect
index cfad014..adedcab 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-C f() => null;
+C f() => throw '';
 
 class C {
   bool g() => true;
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.expect
index 909f982..a396ea2 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method g() → core::bool*
+  method g() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field () →* core::bool* x = self::f().{self::C::g}{() →* core::bool*};
-static method f() → self::C*
-  return null;
+static field () → core::bool x = self::f().{self::C::g}{() → core::bool};
+static method f() → self::C
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.modular.expect
index 909f982..a396ea2 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method g() → core::bool*
+  method g() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field () →* core::bool* x = self::f().{self::C::g}{() →* core::bool*};
-static method f() → self::C*
-  return null;
+static field () → core::bool x = self::f().{self::C::g}{() → core::bool};
+static method f() → self::C
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.outline.expect
index 3d86e37..cea0e03 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method g() → core::bool*
+  method g() → core::bool
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field () →* core::bool* x;
-static method f() → self::C*
+static field () → core::bool x;
+static method f() → self::C
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.transformed.expect
index 909f982..a396ea2 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method g() → core::bool*
+  method g() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field () →* core::bool* x = self::f().{self::C::g}{() →* core::bool*};
-static method f() → self::C*
-  return null;
+static field () → core::bool x = self::f().{self::C::g}{() → core::bool};
+static method f() → self::C
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart
index 99aff77..6711e22 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,7 +11,7 @@
 
 abstract class C implements I {}
 
-C f() => null;
+C f() => throw '';
 var x = f(). /*@target=I.g*/ g;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.textual_outline.expect
index b568393..a212f8f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class I {
@@ -7,6 +6,6 @@
 
 abstract class C implements I {}
 
-C f() => null;
+C f() => throw '';
 var x = f().g;
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.textual_outline_modelled.expect
index d4d4706..3337558 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-C f() => null;
+C f() => throw '';
 
 abstract class C implements I {}
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.expect
index a162c11..0f26c3d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  method g() → core::bool*
+  method g() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field () →* core::bool* x = self::f().{self::I::g}{() →* core::bool*};
-static method f() → self::C*
-  return null;
+static field () → core::bool x = self::f().{self::I::g}{() → core::bool};
+static method f() → self::C
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.modular.expect
index a162c11..0f26c3d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.modular.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  method g() → core::bool*
+  method g() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field () →* core::bool* x = self::f().{self::I::g}{() →* core::bool*};
-static method f() → self::C*
-  return null;
+static field () → core::bool x = self::f().{self::I::g}{() → core::bool};
+static method f() → self::C
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.outline.expect
index b78cf45..ed06829 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.outline.expect
@@ -1,39 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  method g() → core::bool*
+  method g() → core::bool
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field () →* core::bool* x;
-static method f() → self::C*
+static field () → core::bool x;
+static method f() → self::C
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.transformed.expect
index a162c11..0f26c3d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.transformed.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  method g() → core::bool*
+  method g() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field () →* core::bool* x = self::f().{self::I::g}{() →* core::bool*};
-static method f() → self::C*
-  return null;
+static field () → core::bool x = self::f().{self::I::g}{() → core::bool};
+static method f() → self::C
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart
index c473eb3..38ccc97 100644
--- a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.textual_outline.expect
index c2164ee..cff7f24 100644
--- a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var v = print;
diff --git a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.textual_outline_modelled.expect
index d1179e4..b24205c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.expect
index 6eef7cc..38cfa64 100644
--- a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field (core::Object*) →* void v = #C1;
+static field (core::Object?) → void v = #C1;
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.modular.expect
index 6eef7cc..38cfa64 100644
--- a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field (core::Object*) →* void v = #C1;
+static field (core::Object?) → void v = #C1;
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.outline.expect
index 093165a..9c6860a 100644
--- a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field (core::Object*) →* void v;
+static field (core::Object?) → void v;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.transformed.expect
index 6eef7cc..38cfa64 100644
--- a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field (core::Object*) →* void v = #C1;
+static field (core::Object?) → void v = #C1;
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart
index e5d89a3..b354e77 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
   bool g() => true;
 }
 
-C f() => null;
+C f() => throw '';
 var x = f(). /*@target=C.g*/ g();
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.textual_outline.expect
index 419f287..1456408 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 class C {
   bool g() => true;
 }
 
-C f() => null;
+C f() => throw '';
 var x = f().g();
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.textual_outline_modelled.expect
index f78e346..447ac65 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-C f() => null;
+C f() => throw '';
 
 class C {
   bool g() => true;
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.expect
index 429fa8a..06acdec 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method g() → core::bool*
+  method g() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::bool* x = self::f().{self::C::g}(){() →* core::bool*};
-static method f() → self::C*
-  return null;
+static field core::bool x = self::f().{self::C::g}(){() → core::bool};
+static method f() → self::C
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.modular.expect
index 429fa8a..06acdec 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method g() → core::bool*
+  method g() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::bool* x = self::f().{self::C::g}(){() →* core::bool*};
-static method f() → self::C*
-  return null;
+static field core::bool x = self::f().{self::C::g}(){() → core::bool};
+static method f() → self::C
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.outline.expect
index d6e7617..18da8ef 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method g() → core::bool*
+  method g() → core::bool
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::bool* x;
-static method f() → self::C*
+static field core::bool x;
+static method f() → self::C
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.transformed.expect
index 429fa8a..06acdec 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method g() → core::bool*
+  method g() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::bool* x = self::f().{self::C::g}(){() →* core::bool*};
-static method f() → self::C*
-  return null;
+static field core::bool x = self::f().{self::C::g}(){() → core::bool};
+static method f() → self::C
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart
index 8666080..83d6cbc 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,7 +11,7 @@
 
 abstract class C implements I {}
 
-C f() => null;
+C f() => throw '';
 var x = f(). /*@target=I.g*/ g();
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.textual_outline.expect
index 48c694c..3f65a00 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class I {
@@ -7,6 +6,6 @@
 
 abstract class C implements I {}
 
-C f() => null;
+C f() => throw '';
 var x = f().g();
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.textual_outline_modelled.expect
index 009ab81..f690edf 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-C f() => null;
+C f() => throw '';
 
 abstract class C implements I {}
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.expect
index c694d88..1693f58 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  method g() → core::bool*
+  method g() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::bool* x = self::f().{self::I::g}(){() →* core::bool*};
-static method f() → self::C*
-  return null;
+static field core::bool x = self::f().{self::I::g}(){() → core::bool};
+static method f() → self::C
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.modular.expect
index c694d88..1693f58 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.modular.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  method g() → core::bool*
+  method g() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::bool* x = self::f().{self::I::g}(){() →* core::bool*};
-static method f() → self::C*
-  return null;
+static field core::bool x = self::f().{self::I::g}(){() → core::bool};
+static method f() → self::C
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.outline.expect
index d7fe296..0259d38 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.outline.expect
@@ -1,39 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  method g() → core::bool*
+  method g() → core::bool
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::bool* x;
-static method f() → self::C*
+static field core::bool x;
+static method f() → self::C
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.transformed.expect
index c694d88..1693f58 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.transformed.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  method g() → core::bool*
+  method g() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::bool* x = self::f().{self::I::g}(){() →* core::bool*};
-static method f() → self::C*
-  return null;
+static field core::bool x = self::f().{self::I::g}(){() → core::bool};
+static method f() → self::C
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart
index a3f32c7..1262709 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline.expect
index d228da5..3275f8d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 enum E { v1 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline_modelled.expect
index d228da5..3275f8d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 enum E { v1 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
index 6ba5551..baf973d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
@@ -1,28 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class E extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::E*>* values = #C4;
-  static const field self::E* v1 = #C3;
-  const constructor •(core::int* #index, core::String* #name) → self::E*
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v1 = #C3;
+  const constructor •(core::int #index, core::String #name) → self::E
     : super core::_Enum::•(#index, #name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field self::E* x = #C3;
+static final field self::E x = #C3;
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
index 6ba5551..baf973d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
@@ -1,28 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class E extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::E*>* values = #C4;
-  static const field self::E* v1 = #C3;
-  const constructor •(core::int* #index, core::String* #name) → self::E*
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v1 = #C3;
+  const constructor •(core::int #index, core::String #name) → self::E
     : super core::_Enum::•(#index, #name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field self::E* x = #C3;
+static final field self::E x = #C3;
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.outline.expect
index 40a64df..d7af66f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.outline.expect
@@ -1,28 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class E extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::E*>* values = const <self::E*>[self::E::v1];
-  static const field self::E* v1 = const self::E::•(0, "v1");
-  const constructor •(core::int* #index, core::String* #name) → self::E*
+  static const field core::List<self::E> values = const <self::E>[self::E::v1];
+  static const field self::E v1 = const self::E::•(0, "v1");
+  const constructor •(core::int #index, core::String #name) → self::E
     : super core::_Enum::•(#index, #name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field self::E* x;
+static final field self::E x;
 static method main() → dynamic
   ;
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
index 6ba5551..baf973d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
@@ -1,28 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class E extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::E*>* values = #C4;
-  static const field self::E* v1 = #C3;
-  const constructor •(core::int* #index, core::String* #name) → self::E*
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v1 = #C3;
+  const constructor •(core::int #index, core::String #name) → self::E
     : super core::_Enum::•(#index, #name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field self::E* x = #C3;
+static final field self::E x = #C3;
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart
index 6ba7933..2463b13 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline.expect
index f7c5643..3f3a674 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 enum E { v1 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline_modelled.expect
index f7c5643..3f3a674 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 enum E { v1 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
index c012545..a239515 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
@@ -1,28 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class E extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::E*>* values = #C4;
-  static const field self::E* v1 = #C3;
-  const constructor •(core::int* #index, core::String* #name) → self::E*
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v1 = #C3;
+  const constructor •(core::int #index, core::String #name) → self::E
     : super core::_Enum::•(#index, #name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::List<self::E*>* x = #C4;
+static final field core::List<self::E> x = #C4;
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
index c012545..a239515 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
@@ -1,28 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class E extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::E*>* values = #C4;
-  static const field self::E* v1 = #C3;
-  const constructor •(core::int* #index, core::String* #name) → self::E*
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v1 = #C3;
+  const constructor •(core::int #index, core::String #name) → self::E
     : super core::_Enum::•(#index, #name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::List<self::E*>* x = #C4;
+static final field core::List<self::E> x = #C4;
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.outline.expect
index f2f6482..fbb89b5 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.outline.expect
@@ -1,28 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class E extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::E*>* values = const <self::E*>[self::E::v1];
-  static const field self::E* v1 = const self::E::•(0, "v1");
-  const constructor •(core::int* #index, core::String* #name) → self::E*
+  static const field core::List<self::E> values = const <self::E>[self::E::v1];
+  static const field self::E v1 = const self::E::•(0, "v1");
+  const constructor •(core::int #index, core::String #name) → self::E
     : super core::_Enum::•(#index, #name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::List<self::E*>* x;
+static final field core::List<self::E> x;
 static method main() → dynamic
   ;
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
index c012545..a239515 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
@@ -1,28 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class E extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::E*>* values = #C4;
-  static const field self::E* v1 = #C3;
-  const constructor •(core::int* #index, core::String* #name) → self::E*
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v1 = #C3;
+  const constructor •(core::int #index, core::String #name) → self::E
     : super core::_Enum::•(#index, #name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static final field core::List<self::E*>* x = #C4;
+static final field core::List<self::E> x = #C4;
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart
index ae851c2..faf400f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.textual_outline.expect
index 4154f5b..ef330db 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef void F();
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.textual_outline_modelled.expect
index d23a923..19c52ac 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 final x = <String, F>{};
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.expect
index 2f74b63..35015df 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* void;
-static final field core::Map<core::String*, () →* void>* x = <core::String*, () →* void>{};
+typedef F = () → void;
+static final field core::Map<core::String, () → void> x = <core::String, () → void>{};
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.modular.expect
index 2f74b63..35015df 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* void;
-static final field core::Map<core::String*, () →* void>* x = <core::String*, () →* void>{};
+typedef F = () → void;
+static final field core::Map<core::String, () → void> x = <core::String, () → void>{};
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.outline.expect
index 8c72258..5906114 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* void;
-static final field core::Map<core::String*, () →* void>* x;
+typedef F = () → void;
+static final field core::Map<core::String, () → void> x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.transformed.expect
index 2f74b63..35015df 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* void;
-static final field core::Map<core::String*, () →* void>* x = <core::String*, () →* void>{};
+typedef F = () → void;
+static final field core::Map<core::String, () → void> x = <core::String, () → void>{};
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart
index a5ea8d2..09ae0af 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.textual_outline.expect
index 265e538..52d5fdc 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef T F<T>();
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.textual_outline_modelled.expect
index d267640..8ede87e 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 final x = <String, F<int>>{};
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.expect
index 24aba57..1c4bec9 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object* = dynamic> = () →* T*;
-static final field core::Map<core::String*, () →* core::int*>* x = <core::String*, () →* core::int*>{};
+typedef F<T extends core::Object? = dynamic> = () → T%;
+static final field core::Map<core::String, () → core::int> x = <core::String, () → core::int>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.modular.expect
index 24aba57..1c4bec9 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.modular.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object* = dynamic> = () →* T*;
-static final field core::Map<core::String*, () →* core::int*>* x = <core::String*, () →* core::int*>{};
+typedef F<T extends core::Object? = dynamic> = () → T%;
+static final field core::Map<core::String, () → core::int> x = <core::String, () → core::int>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.outline.expect
index 41a8e7b..c3a98c3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object* = dynamic> = () →* T*;
-static final field core::Map<core::String*, () →* core::int*>* x;
+typedef F<T extends core::Object? = dynamic> = () → T%;
+static final field core::Map<core::String, () → core::int> x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.transformed.expect
index 24aba57..1c4bec9 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.transformed.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<T extends core::Object* = dynamic> = () →* T*;
-static final field core::Map<core::String*, () →* core::int*>* x = <core::String*, () →* core::int*>{};
+typedef F<T extends core::Object? = dynamic> = () → T%;
+static final field core::Map<core::String, () → core::int> x = <core::String, () → core::int>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart
index 8e5bde5..1cc7347 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-int f() => null;
-String g() => null;
-var v = /*@ typeArgs=() ->* Object* */ [f, g];
+int f() => 0;
+String g() => '';
+var v = /*@typeArgs=() -> Object*/ [f, g];
 
 main() {
   v;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.textual_outline.expect
index 1e34fe4..3b8bd87 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-int f() => null;
-String g() => null;
+int f() => 0;
+String g() => '';
 var v = [f, g];
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.textual_outline_modelled.expect
index 714d7e8..9ae2ff1 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-String g() => null;
-int f() => null;
+String g() => '';
+int f() => 0;
 main() {}
 var v = [f, g];
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.expect
index 21d3b06..00cc02d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<() →* core::Object*>* v = <() →* core::Object*>[#C1, #C2];
-static method f() → core::int*
-  return null;
-static method g() → core::String*
-  return null;
+static field core::List<() → core::Object> v = <() → core::Object>[#C1, #C2];
+static method f() → core::int
+  return 0;
+static method g() → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.modular.expect
index 21d3b06..00cc02d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<() →* core::Object*>* v = <() →* core::Object*>[#C1, #C2];
-static method f() → core::int*
-  return null;
-static method g() → core::String*
-  return null;
+static field core::List<() → core::Object> v = <() → core::Object>[#C1, #C2];
+static method f() → core::int
+  return 0;
+static method g() → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.outline.expect
index 022fc54..c0cd7e9 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<() →* core::Object*>* v;
-static method f() → core::int*
+static field core::List<() → core::Object> v;
+static method f() → core::int
   ;
-static method g() → core::String*
+static method g() → core::String
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.transformed.expect
index 2e71da8..2a9a74f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<() →* core::Object*>* v = core::_GrowableList::_literal2<() →* core::Object*>(#C1, #C2);
-static method f() → core::int*
-  return null;
-static method g() → core::String*
-  return null;
+static field core::List<() → core::Object> v = core::_GrowableList::_literal2<() → core::Object>(#C1, #C2);
+static method f() → core::int
+  return 0;
+static method g() → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart
index 2ff8f19..cd78389 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-int f(int x(String y)) => null;
-String g(int x(String y)) => null;
-var v = /*@ typeArgs=((String*) ->* int*) ->* Object* */ [f, g];
+int f(int x(String y)) => 0;
+String g(int x(String y)) => '';
+var v = /*@typeArgs=((String) -> int) -> Object*/ [f, g];
 
 main() {
   v;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.textual_outline.expect
index 9f49cea..5547d44 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-int f(int x(String y)) => null;
-String g(int x(String y)) => null;
+int f(int x(String y)) => 0;
+String g(int x(String y)) => '';
 var v = [f, g];
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.textual_outline_modelled.expect
index 2a9820c..88511a1 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-String g(int x(String y)) => null;
-int f(int x(String y)) => null;
+String g(int x(String y)) => '';
+int f(int x(String y)) => 0;
 main() {}
 var v = [f, g];
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.expect
index 9be942f..650c27a 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<((core::String*) →* core::int*) →* core::Object*>* v = <((core::String*) →* core::int*) →* core::Object*>[#C1, #C2];
-static method f((core::String*) →* core::int* x) → core::int*
-  return null;
-static method g((core::String*) →* core::int* x) → core::String*
-  return null;
+static field core::List<((core::String) → core::int) → core::Object> v = <((core::String) → core::int) → core::Object>[#C1, #C2];
+static method f((core::String) → core::int x) → core::int
+  return 0;
+static method g((core::String) → core::int x) → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.modular.expect
index 9be942f..650c27a 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<((core::String*) →* core::int*) →* core::Object*>* v = <((core::String*) →* core::int*) →* core::Object*>[#C1, #C2];
-static method f((core::String*) →* core::int* x) → core::int*
-  return null;
-static method g((core::String*) →* core::int* x) → core::String*
-  return null;
+static field core::List<((core::String) → core::int) → core::Object> v = <((core::String) → core::int) → core::Object>[#C1, #C2];
+static method f((core::String) → core::int x) → core::int
+  return 0;
+static method g((core::String) → core::int x) → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.outline.expect
index 19ea551..7637a5c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<((core::String*) →* core::int*) →* core::Object*>* v;
-static method f((core::String*) →* core::int* x) → core::int*
+static field core::List<((core::String) → core::int) → core::Object> v;
+static method f((core::String) → core::int x) → core::int
   ;
-static method g((core::String*) →* core::int* x) → core::String*
+static method g((core::String) → core::int x) → core::String
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.transformed.expect
index 126d190..4884711 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<((core::String*) →* core::int*) →* core::Object*>* v = core::_GrowableList::_literal2<((core::String*) →* core::int*) →* core::Object*>(#C1, #C2);
-static method f((core::String*) →* core::int* x) → core::int*
-  return null;
-static method g((core::String*) →* core::int* x) → core::String*
-  return null;
+static field core::List<((core::String) → core::int) → core::Object> v = core::_GrowableList::_literal2<((core::String) → core::int) → core::Object>(#C1, #C2);
+static method f((core::String) → core::int x) → core::int
+  return 0;
+static method g((core::String) → core::int x) → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart
index 3129faf..65a460e 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-int f({int x}) => null;
-String g({int x}) => null;
-var v = /*@ typeArgs=({x: int*}) ->* Object* */ [f, g];
+int f({int? x}) => 0;
+String g({int? x}) => '';
+var v = /*@typeArgs=({x: int?}) -> Object*/ [f, g];
 
 main() {
   v;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.textual_outline.expect
index 4f9e601..620bfac 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-int f({int x}) => null;
-String g({int x}) => null;
+int f({int? x}) => 0;
+String g({int? x}) => '';
 var v = [f, g];
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.textual_outline_modelled.expect
index 088d600..2d67246 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-String g({int x}) => null;
-int f({int x}) => null;
+String g({int? x}) => '';
+int f({int? x}) => 0;
 main() {}
 var v = [f, g];
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.expect
index 0b7d047..ffb7a2a 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<({x: core::int*}) →* core::Object*>* v = <({x: core::int*}) →* core::Object*>[#C1, #C2];
-static method f({core::int* x = #C3}) → core::int*
-  return null;
-static method g({core::int* x = #C3}) → core::String*
-  return null;
+static field core::List<({x: core::int?}) → core::Object> v = <({x: core::int?}) → core::Object>[#C1, #C2];
+static method f({core::int? x = #C3}) → core::int
+  return 0;
+static method g({core::int? x = #C3}) → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.modular.expect
index 0b7d047..ffb7a2a 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<({x: core::int*}) →* core::Object*>* v = <({x: core::int*}) →* core::Object*>[#C1, #C2];
-static method f({core::int* x = #C3}) → core::int*
-  return null;
-static method g({core::int* x = #C3}) → core::String*
-  return null;
+static field core::List<({x: core::int?}) → core::Object> v = <({x: core::int?}) → core::Object>[#C1, #C2];
+static method f({core::int? x = #C3}) → core::int
+  return 0;
+static method g({core::int? x = #C3}) → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.outline.expect
index 13063fa5..6f4488d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<({x: core::int*}) →* core::Object*>* v;
-static method f({core::int* x}) → core::int*
+static field core::List<({x: core::int?}) → core::Object> v;
+static method f({core::int? x}) → core::int
   ;
-static method g({core::int* x}) → core::String*
+static method g({core::int? x}) → core::String
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.transformed.expect
index ee21ab4..57268af 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<({x: core::int*}) →* core::Object*>* v = core::_GrowableList::_literal2<({x: core::int*}) →* core::Object*>(#C1, #C2);
-static method f({core::int* x = #C3}) → core::int*
-  return null;
-static method g({core::int* x = #C3}) → core::String*
-  return null;
+static field core::List<({x: core::int?}) → core::Object> v = core::_GrowableList::_literal2<({x: core::int?}) → core::Object>(#C1, #C2);
+static method f({core::int? x = #C3}) → core::int
+  return 0;
+static method g({core::int? x = #C3}) → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart
index 07a0512..4298578 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-int f([int x]) => null;
-String g([int x]) => null;
-var v = /*@ typeArgs=([int*]) ->* Object* */ [f, g];
+int f([int? x]) => 0;
+String g([int? x]) => '';
+var v = /*@typeArgs=([int?]) -> Object*/ [f, g];
 
 main() {
   v;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.textual_outline.expect
index da9fa47..7006b62 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-int f([int x]) => null;
-String g([int x]) => null;
+int f([int? x]) => 0;
+String g([int? x]) => '';
 var v = [f, g];
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.textual_outline_modelled.expect
index f739837..1384132 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-String g([int x]) => null;
-int f([int x]) => null;
+String g([int? x]) => '';
+int f([int? x]) => 0;
 main() {}
 var v = [f, g];
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.expect
index 704ff597..d7abdbb 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<([core::int*]) →* core::Object*>* v = <([core::int*]) →* core::Object*>[#C1, #C2];
-static method f([core::int* x = #C3]) → core::int*
-  return null;
-static method g([core::int* x = #C3]) → core::String*
-  return null;
+static field core::List<([core::int?]) → core::Object> v = <([core::int?]) → core::Object>[#C1, #C2];
+static method f([core::int? x = #C3]) → core::int
+  return 0;
+static method g([core::int? x = #C3]) → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.modular.expect
index 704ff597..d7abdbb 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<([core::int*]) →* core::Object*>* v = <([core::int*]) →* core::Object*>[#C1, #C2];
-static method f([core::int* x = #C3]) → core::int*
-  return null;
-static method g([core::int* x = #C3]) → core::String*
-  return null;
+static field core::List<([core::int?]) → core::Object> v = <([core::int?]) → core::Object>[#C1, #C2];
+static method f([core::int? x = #C3]) → core::int
+  return 0;
+static method g([core::int? x = #C3]) → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.outline.expect
index bd37456..2a6192c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<([core::int*]) →* core::Object*>* v;
-static method f([core::int* x]) → core::int*
+static field core::List<([core::int?]) → core::Object> v;
+static method f([core::int? x]) → core::int
   ;
-static method g([core::int* x]) → core::String*
+static method g([core::int? x]) → core::String
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.transformed.expect
index 2e47f05..92a804f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<([core::int*]) →* core::Object*>* v = core::_GrowableList::_literal2<([core::int*]) →* core::Object*>(#C1, #C2);
-static method f([core::int* x = #C3]) → core::int*
-  return null;
-static method g([core::int* x = #C3]) → core::String*
-  return null;
+static field core::List<([core::int?]) → core::Object> v = core::_GrowableList::_literal2<([core::int?]) → core::Object>(#C1, #C2);
+static method f([core::int? x = #C3]) → core::int
+  return 0;
+static method g([core::int? x = #C3]) → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart
index b0e2a07..b03aa89 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-int f(int x) => null;
-String g(int x) => null;
-var v = /*@ typeArgs=(int*) ->* Object* */ [f, g];
+int f(int x) => 0;
+String g(int x) => '';
+var v = /*@typeArgs=(int) -> Object*/ [f, g];
 
 main() {
   v;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.textual_outline.expect
index 76487bb..2a49ca2 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-int f(int x) => null;
-String g(int x) => null;
+int f(int x) => 0;
+String g(int x) => '';
 var v = [f, g];
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.textual_outline_modelled.expect
index d6d11aa..7be13e7 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-String g(int x) => null;
-int f(int x) => null;
+String g(int x) => '';
+int f(int x) => 0;
 main() {}
 var v = [f, g];
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.expect
index b495253..791df39 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<(core::int*) →* core::Object*>* v = <(core::int*) →* core::Object*>[#C1, #C2];
-static method f(core::int* x) → core::int*
-  return null;
-static method g(core::int* x) → core::String*
-  return null;
+static field core::List<(core::int) → core::Object> v = <(core::int) → core::Object>[#C1, #C2];
+static method f(core::int x) → core::int
+  return 0;
+static method g(core::int x) → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.modular.expect
index b495253..791df39 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<(core::int*) →* core::Object*>* v = <(core::int*) →* core::Object*>[#C1, #C2];
-static method f(core::int* x) → core::int*
-  return null;
-static method g(core::int* x) → core::String*
-  return null;
+static field core::List<(core::int) → core::Object> v = <(core::int) → core::Object>[#C1, #C2];
+static method f(core::int x) → core::int
+  return 0;
+static method g(core::int x) → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.outline.expect
index 4de588f..3aaac73 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<(core::int*) →* core::Object*>* v;
-static method f(core::int* x) → core::int*
+static field core::List<(core::int) → core::Object> v;
+static method f(core::int x) → core::int
   ;
-static method g(core::int* x) → core::String*
+static method g(core::int x) → core::String
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.transformed.expect
index 805ab2c..c181f5b 100644
--- a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<(core::int*) →* core::Object*>* v = core::_GrowableList::_literal2<(core::int*) →* core::Object*>(#C1, #C2);
-static method f(core::int* x) → core::int*
-  return null;
-static method g(core::int* x) → core::String*
-  return null;
+static field core::List<(core::int) → core::Object> v = core::_GrowableList::_literal2<(core::int) → core::Object>(#C1, #C2);
+static method f(core::int x) → core::int
+  return 0;
+static method g(core::int x) → core::String
+  return "";
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart
index 2a8e631..11972a9 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  static final f = /*@ returnType=(int*) ->* Map<int*, bool*>* */ (bool
-      b) => /*@ returnType=Map<int*, bool*>* */ (int i) => /*@ typeArgs=int*, bool* */ {i: b};
+  static final f = /*@returnType=(int) -> Map<int, bool>*/ (bool
+      b) => /*@returnType=Map<int, bool>*/ (int i) => /*@typeArgs=int, bool*/ {i: b};
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.textual_outline.expect
index e1c479d..a5cc028 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.textual_outline_modelled.expect
index e1c479d..a5cc028 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.expect
index 7c6c26d..557304d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field (core::bool*) →* (core::int*) →* core::Map<core::int*, core::bool*>* f = (core::bool* b) → (core::int*) →* core::Map<core::int*, core::bool*>* => (core::int* i) → core::Map<core::int*, core::bool*>* => <core::int*, core::bool*>{i: b};
-  synthetic constructor •() → self::C*
+  static final field (core::bool) → (core::int) → core::Map<core::int, core::bool> f = (core::bool b) → (core::int) → core::Map<core::int, core::bool> => (core::int i) → core::Map<core::int, core::bool> => <core::int, core::bool>{i: b};
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.modular.expect
index 7c6c26d..557304d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field (core::bool*) →* (core::int*) →* core::Map<core::int*, core::bool*>* f = (core::bool* b) → (core::int*) →* core::Map<core::int*, core::bool*>* => (core::int* i) → core::Map<core::int*, core::bool*>* => <core::int*, core::bool*>{i: b};
-  synthetic constructor •() → self::C*
+  static final field (core::bool) → (core::int) → core::Map<core::int, core::bool> f = (core::bool b) → (core::int) → core::Map<core::int, core::bool> => (core::int i) → core::Map<core::int, core::bool> => <core::int, core::bool>{i: b};
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.outline.expect
index 81002bb..dd4646b 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field (core::bool*) →* (core::int*) →* core::Map<core::int*, core::bool*>* f;
-  synthetic constructor •() → self::C*
+  static final field (core::bool) → (core::int) → core::Map<core::int, core::bool> f;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.transformed.expect
index 7c6c26d..557304d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field (core::bool*) →* (core::int*) →* core::Map<core::int*, core::bool*>* f = (core::bool* b) → (core::int*) →* core::Map<core::int*, core::bool*>* => (core::int* i) → core::Map<core::int*, core::bool*>* => <core::int*, core::bool*>{i: b};
-  synthetic constructor •() → self::C*
+  static final field (core::bool) → (core::int) → core::Map<core::int, core::bool> f = (core::bool b) → (core::int) → core::Map<core::int, core::bool> => (core::int i) → core::Map<core::int, core::bool> => <core::int, core::bool>{i: b};
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart
index 3075157..76efa44 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  static final f = /*@ returnType=bool* */ (bool b) => b;
+  static final f = /*@returnType=bool*/ (bool b) => b;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.textual_outline.expect
index bbe0538..fc48846 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.textual_outline_modelled.expect
index bbe0538..fc48846 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.expect
index edd69ee..9a7f76f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field (core::bool*) →* core::bool* f = (core::bool* b) → core::bool* => b;
-  synthetic constructor •() → self::C*
+  static final field (core::bool) → core::bool f = (core::bool b) → core::bool => b;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.modular.expect
index edd69ee..9a7f76f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field (core::bool*) →* core::bool* f = (core::bool* b) → core::bool* => b;
-  synthetic constructor •() → self::C*
+  static final field (core::bool) → core::bool f = (core::bool b) → core::bool => b;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.outline.expect
index f9dc7d5..24e8a3f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field (core::bool*) →* core::bool* f;
-  synthetic constructor •() → self::C*
+  static final field (core::bool) → core::bool f;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.transformed.expect
index edd69ee..9a7f76f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field (core::bool*) →* core::bool* f = (core::bool* b) → core::bool* => b;
-  synthetic constructor •() → self::C*
+  static final field (core::bool) → core::bool f = (core::bool b) → core::bool => b;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart
index c05d7ad..08e3315 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  static final f = /*@ returnType=int* */ (bool b) => 1;
+  static final f = /*@returnType=int*/ (bool b) => 1;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.textual_outline.expect
index 23d72ce..015c510 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.textual_outline_modelled.expect
index 23d72ce..015c510 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.expect
index 06af2b3..305a39d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field (core::bool*) →* core::int* f = (core::bool* b) → core::int* => 1;
-  synthetic constructor •() → self::C*
+  static final field (core::bool) → core::int f = (core::bool b) → core::int => 1;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.modular.expect
index 06af2b3..305a39d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field (core::bool*) →* core::int* f = (core::bool* b) → core::int* => 1;
-  synthetic constructor •() → self::C*
+  static final field (core::bool) → core::int f = (core::bool b) → core::int => 1;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.outline.expect
index e735ba1..bc7cc7d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field (core::bool*) →* core::int* f;
-  synthetic constructor •() → self::C*
+  static final field (core::bool) → core::int f;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.transformed.expect
index 06af2b3..305a39d 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field (core::bool*) →* core::int* f = (core::bool* b) → core::int* => 1;
-  synthetic constructor •() → self::C*
+  static final field (core::bool) → core::int f = (core::bool b) → core::int => 1;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart
index 8690f8d..1030f5b 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-final f = /*@ returnType=int* */ (bool b) => 1;
+final f = /*@returnType=int*/ (bool b) => 1;
 
 main() {
   f;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.textual_outline.expect
index 206b794..2cfa51b 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 final f = (bool b) => 1;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.textual_outline_modelled.expect
index 206b794..2cfa51b 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 final f = (bool b) => 1;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.expect
index ac18ccc..0d38afe 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static final field (core::bool*) →* core::int* f = (core::bool* b) → core::int* => 1;
+static final field (core::bool) → core::int f = (core::bool b) → core::int => 1;
 static method main() → dynamic {
   self::f;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.modular.expect
index ac18ccc..0d38afe 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static final field (core::bool*) →* core::int* f = (core::bool* b) → core::int* => 1;
+static final field (core::bool) → core::int f = (core::bool b) → core::int => 1;
 static method main() → dynamic {
   self::f;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.outline.expect
index d303dfc..25d83e6 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static final field (core::bool*) →* core::int* f;
+static final field (core::bool) → core::int f;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.transformed.expect
index ac18ccc..0d38afe 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static final field (core::bool*) →* core::int* f = (core::bool* b) → core::int* => 1;
+static final field (core::bool) → core::int f = (core::bool b) → core::int => 1;
 static method main() → dynamic {
   self::f;
 }
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart
index 38f62b7..4d4c90c 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.textual_outline.expect
index 379de19..134a70e 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class I1 {
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.textual_outline_modelled.expect
index 228de69..71382d7 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I2 {
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.expect
index 7b33a23..bf13c875 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  final field core::int* x = self::y;
-  synthetic constructor •() → self::I1*
+  final field core::int x = self::y;
+  synthetic constructor •() → self::I1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I2 extends core::Object {
-  synthetic constructor •() → self::I2*
+  synthetic constructor •() → self::I2
     : super core::Object::•()
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::num;
 }
 class C extends core::Object implements self::I1, self::I2 {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* y = new self::C::•().{self::C::x}{core::int*};
+static field core::int y = new self::C::•().{self::C::x}{core::int};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.modular.expect
index 7b33a23..bf13c875 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.modular.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  final field core::int* x = self::y;
-  synthetic constructor •() → self::I1*
+  final field core::int x = self::y;
+  synthetic constructor •() → self::I1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I2 extends core::Object {
-  synthetic constructor •() → self::I2*
+  synthetic constructor •() → self::I2
     : super core::Object::•()
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::num;
 }
 class C extends core::Object implements self::I1, self::I2 {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* y = new self::C::•().{self::C::x}{core::int*};
+static field core::int y = new self::C::•().{self::C::x}{core::int};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.outline.expect
index 206c9e8..5ab909e 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.outline.expect
@@ -1,53 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  final field core::int* x;
-  synthetic constructor •() → self::I1*
+  final field core::int x;
+  synthetic constructor •() → self::I1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I2 extends core::Object {
-  synthetic constructor •() → self::I2*
+  synthetic constructor •() → self::I2
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::num;
 }
 class C extends core::Object implements self::I1, self::I2 {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  get x() → core::int*
+  get x() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* y;
+static field core::int y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.transformed.expect
index 7b33a23..bf13c875 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.transformed.expect
@@ -1,55 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class I1 extends core::Object {
-  final field core::int* x = self::y;
-  synthetic constructor •() → self::I1*
+  final field core::int x = self::y;
+  synthetic constructor •() → self::I1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I2 extends core::Object {
-  synthetic constructor •() → self::I2*
+  synthetic constructor •() → self::I2
     : super core::Object::•()
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::num;
 }
 class C extends core::Object implements self::I1, self::I2 {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get x() → core::int*
+  get x() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* y = new self::C::•().{self::C::x}{core::int*};
+static field core::int y = new self::C::•().{self::C::x}{core::int};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart b/pkg/front_end/testcases/inference/instance_creation_downwards.dart
index a50d04f..3e47568 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -12,6 +12,6 @@
 class B<T> {}
 
 main() {
-  var /*@ type=A<dynamic>* */ x =
-      new /*@ typeArgs=dynamic */ A(new /*@ typeArgs=List<dynamic>* */ B());
+  var /*@type=A<Object?>*/ x =
+      new /*@typeArgs=Object?*/ A(new /*@typeArgs=List<Object?>*/ B());
 }
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.textual_outline.expect
index 55a9a31..3809765 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.textual_outline_modelled.expect
index 55a9a31..3809765 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.expect
index 1e592bc2..1e0189b 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B<core::List<self::A::T*>*>* b) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B<core::List<self::A::T%>> b) → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A<dynamic>* x = new self::A::•<dynamic>(new self::B::•<core::List<dynamic>*>());
+  self::A<core::Object?> x = new self::A::•<core::Object?>(new self::B::•<core::List<core::Object?>>());
 }
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.modular.expect
index 1e592bc2..1e0189b 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.modular.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B<core::List<self::A::T*>*>* b) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B<core::List<self::A::T%>> b) → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A<dynamic>* x = new self::A::•<dynamic>(new self::B::•<core::List<dynamic>*>());
+  self::A<core::Object?> x = new self::A::•<core::Object?>(new self::B::•<core::List<core::Object?>>());
 }
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.outline.expect
index 4ee8d42..d8b6844 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.outline.expect
@@ -1,34 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B<core::List<self::A::T*>*>* b) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B<core::List<self::A::T%>> b) → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.transformed.expect
index 1e592bc2..1e0189b 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.transformed.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B<core::List<self::A::T*>*>* b) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B<core::List<self::A::T%>> b) → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A<dynamic>* x = new self::A::•<dynamic>(new self::B::•<core::List<dynamic>*>());
+  self::A<core::Object?> x = new self::A::•<core::Object?>(new self::B::•<core::List<core::Object?>>());
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart b/pkg/front_end/testcases/inference/instantiate_tearoff.dart
index 7137f2e..b6ab9e0 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.textual_outline.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.textual_outline.expect
index f58b8ab..bfdc465 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 T f<T>(T x) => x;
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.textual_outline_modelled.expect
index 198ae74..885153c 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 T f<T>(T x) => x;
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
index f272f74..66db882 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
@@ -1,45 +1,35 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(self::C::f::T* x) → self::C::f::T*
+  method f<T extends core::Object? = dynamic>(self::C::f::T% x) → self::C::f::T%
     return x;
-  static method g<T extends core::Object* = dynamic>(self::C::g::T* x) → self::C::g::T*
+  static method g<T extends core::Object? = dynamic>(self::C::g::T% x) → self::C::g::T%
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method test() → void {
-    (core::int*) →* core::int* func;
-    func = super.{self::C::f}<core::int*>;
+    (core::int) → core::int func;
+    func = super.{self::C::f}<core::int>;
   }
 }
-static method f<T extends core::Object* = dynamic>(self::f::T* x) → self::f::T*
+static method f<T extends core::Object? = dynamic>(self::f::T% x) → self::f::T%
   return x;
 static method test() → void {
-  function h<T extends core::Object* = dynamic>(T* x) → T*
+  function h<T extends core::Object? = dynamic>(T% x) → T%
     return x;
-  (core::int*) →* core::int* func;
+  (core::int) → core::int func;
   func = #C2;
-  func = new self::C::•().{self::C::f}{<T extends core::Object* = dynamic>(T*) →* T*}<core::int*>;
+  func = new self::C::•().{self::C::f}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>;
   func = #C4;
-  func = h<core::int*>;
+  func = h<core::int>;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.modular.expect
index f272f74..66db882 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.modular.expect
@@ -1,45 +1,35 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(self::C::f::T* x) → self::C::f::T*
+  method f<T extends core::Object? = dynamic>(self::C::f::T% x) → self::C::f::T%
     return x;
-  static method g<T extends core::Object* = dynamic>(self::C::g::T* x) → self::C::g::T*
+  static method g<T extends core::Object? = dynamic>(self::C::g::T% x) → self::C::g::T%
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method test() → void {
-    (core::int*) →* core::int* func;
-    func = super.{self::C::f}<core::int*>;
+    (core::int) → core::int func;
+    func = super.{self::C::f}<core::int>;
   }
 }
-static method f<T extends core::Object* = dynamic>(self::f::T* x) → self::f::T*
+static method f<T extends core::Object? = dynamic>(self::f::T% x) → self::f::T%
   return x;
 static method test() → void {
-  function h<T extends core::Object* = dynamic>(T* x) → T*
+  function h<T extends core::Object? = dynamic>(T% x) → T%
     return x;
-  (core::int*) →* core::int* func;
+  (core::int) → core::int func;
   func = #C2;
-  func = new self::C::•().{self::C::f}{<T extends core::Object* = dynamic>(T*) →* T*}<core::int*>;
+  func = new self::C::•().{self::C::f}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>;
   func = #C4;
-  func = h<core::int*>;
+  func = h<core::int>;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.outline.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.outline.expect
index acad0ca..addd631 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.outline.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f<T extends core::Object* = dynamic>(self::C::f::T* x) → self::C::f::T*
+  method f<T extends core::Object? = dynamic>(self::C::f::T% x) → self::C::f::T%
     ;
-  static method g<T extends core::Object* = dynamic>(self::C::g::T* x) → self::C::g::T*
+  static method g<T extends core::Object? = dynamic>(self::C::g::T% x) → self::C::g::T%
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   method test() → void
     ;
 }
-static method f<T extends core::Object* = dynamic>(self::f::T* x) → self::f::T*
+static method f<T extends core::Object? = dynamic>(self::f::T% x) → self::f::T%
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
index f272f74..66db882 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
@@ -1,45 +1,35 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(self::C::f::T* x) → self::C::f::T*
+  method f<T extends core::Object? = dynamic>(self::C::f::T% x) → self::C::f::T%
     return x;
-  static method g<T extends core::Object* = dynamic>(self::C::g::T* x) → self::C::g::T*
+  static method g<T extends core::Object? = dynamic>(self::C::g::T% x) → self::C::g::T%
     return x;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method test() → void {
-    (core::int*) →* core::int* func;
-    func = super.{self::C::f}<core::int*>;
+    (core::int) → core::int func;
+    func = super.{self::C::f}<core::int>;
   }
 }
-static method f<T extends core::Object* = dynamic>(self::f::T* x) → self::f::T*
+static method f<T extends core::Object? = dynamic>(self::f::T% x) → self::f::T%
   return x;
 static method test() → void {
-  function h<T extends core::Object* = dynamic>(T* x) → T*
+  function h<T extends core::Object? = dynamic>(T% x) → T%
     return x;
-  (core::int*) →* core::int* func;
+  (core::int) → core::int func;
   func = #C2;
-  func = new self::C::•().{self::C::f}{<T extends core::Object* = dynamic>(T*) →* T*}<core::int*>;
+  func = new self::C::•().{self::C::f}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>;
   func = #C4;
-  func = h<core::int*>;
+  func = h<core::int>;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart
index b112116..2c07157 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C<T> {
-  void Function(T) f<U>(U x) => /*@ returnType=Null */ (/*@ type=C::T* */ y) {};
+  void Function(T) f<U>(U x) => /*@returnType=void*/ (/*@type=C::T%*/ y) {};
 }
 
 void test(C<String> c) {
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.textual_outline.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.textual_outline.expect
index 6740386..585e21c 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.textual_outline_modelled.expect
index 11bee7d..d1a470c 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.expect
index 86594e9..7bb2ac2 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → (self::C::T*) →* void
-    return (self::C::T* y) → Null {};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends core::Object? = dynamic>(self::C::f::U% x) → (self::C::T%) → void
+    return (self::C::T% y) → void {};
 }
-static method test(self::C<core::String*>* c) → void {
-  (core::int*) →* (core::String*) →* void tearoff = (c.{self::C::f}{<U extends core::Object* = dynamic>(U*) →* (core::String*) →* void} as{TypeError,CovarianceCheck} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void)<core::int*>;
+static method test(self::C<core::String> c) → void {
+  (core::int) → (core::String) → void tearoff = (c.{self::C::f}{<U extends core::Object? = dynamic>(U%) → (core::String) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <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.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.modular.expect
index 86594e9..7bb2ac2 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → (self::C::T*) →* void
-    return (self::C::T* y) → Null {};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends core::Object? = dynamic>(self::C::f::U% x) → (self::C::T%) → void
+    return (self::C::T% y) → void {};
 }
-static method test(self::C<core::String*>* c) → void {
-  (core::int*) →* (core::String*) →* void tearoff = (c.{self::C::f}{<U extends core::Object* = dynamic>(U*) →* (core::String*) →* void} as{TypeError,CovarianceCheck} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void)<core::int*>;
+static method test(self::C<core::String> c) → void {
+  (core::int) → (core::String) → void tearoff = (c.{self::C::f}{<U extends core::Object? = dynamic>(U%) → (core::String) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <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.weak.outline.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.outline.expect
index 629df19..e312b24 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → (self::C::T*) →* void
+  method f<U extends core::Object? = dynamic>(self::C::f::U% x) → (self::C::T%) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C<core::String*>* c) → void
+static method test(self::C<core::String> c) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.transformed.expect
index 86594e9..7bb2ac2 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → (self::C::T*) →* void
-    return (self::C::T* y) → Null {};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends core::Object? = dynamic>(self::C::f::U% x) → (self::C::T%) → void
+    return (self::C::T% y) → void {};
 }
-static method test(self::C<core::String*>* c) → void {
-  (core::int*) →* (core::String*) →* void tearoff = (c.{self::C::f}{<U extends core::Object* = dynamic>(U*) →* (core::String*) →* void} as{TypeError,CovarianceCheck} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void)<core::int*>;
+static method test(self::C<core::String> c) → void {
+  (core::int) → (core::String) → void tearoff = (c.{self::C::f}{<U extends core::Object? = dynamic>(U%) → (core::String) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <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_of_call.dart b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart
index d44fc61..f4b7459 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.expect
index 2e086bf..bfb17da 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+// pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:12:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
 //   func = f.call;
 //            ^
 //
@@ -11,7 +11,7 @@
 
 static method test(<T extends core::Object* = dynamic>(T*) →* T* f) → void {
   (core::int*) →* core::int* func;
-  func = invalid-expression "pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+  func = invalid-expression "pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:12:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
   func = f.call;
            ^" in f.call as{TypeError} (core::int*) →* core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.modular.expect
index 2e086bf..bfb17da 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.modular.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+// pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:12:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
 //   func = f.call;
 //            ^
 //
@@ -11,7 +11,7 @@
 
 static method test(<T extends core::Object* = dynamic>(T*) →* T* f) → void {
   (core::int*) →* core::int* func;
-  func = invalid-expression "pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+  func = invalid-expression "pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:12:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
   func = f.call;
            ^" in f.call as{TypeError} (core::int*) →* core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.transformed.expect
index 2e086bf..bfb17da 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+// pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:12:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
 //   func = f.call;
 //            ^
 //
@@ -11,7 +11,7 @@
 
 static method test(<T extends core::Object* = dynamic>(T*) →* T* f) → void {
   (core::int*) →* core::int* func;
-  func = invalid-expression "pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+  func = invalid-expression "pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:12:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
   func = f.call;
            ^" in f.call as{TypeError} (core::int*) →* core::int*;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart
new file mode 100644
index 0000000..1967387
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart
@@ -0,0 +1,13 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+void test(T Function<T>(T) f) {
+  int Function(int) func;
+  func = f.call;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.textual_outline.expect
new file mode 100644
index 0000000..3ac64a9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+library test;
+
+void test(T Function<T>(T) f) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b579dab
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+library test;
+
+main() {}
+void test(T Function<T>(T) f) {}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.weak.expect
new file mode 100644
index 0000000..26274da1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.weak.expect
@@ -0,0 +1,9 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test(<T extends core::Object? = dynamic>(T%) → T% f) → void {
+  (core::int) → core::int func;
+  func = f.call<core::int>;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.weak.modular.expect
new file mode 100644
index 0000000..26274da1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test(<T extends core::Object? = dynamic>(T%) → T% f) → void {
+  (core::int) → core::int func;
+  func = f.call<core::int>;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.weak.outline.expect
new file mode 100644
index 0000000..f7f9c64
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call2.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test(<T extends core::Object? = dynamic>(T%) → T% f) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart
index eedc188..c5aabb1 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,8 +9,8 @@
 
 class A<T extends int> {}
 
-B v = null;
+B v = throw '';
 
-main() {
+test() {
   v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.textual_outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.textual_outline.expect
index 937a53e..57bc886 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class B<T extends A> {}
 
 class A<T extends int> {}
 
-B v = null;
-main() {}
+B v = throw '';
+test() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.textual_outline_modelled.expect
index 5b4b015..dd1576d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
-B v = null;
+B v = throw '';
 
 class A<T extends int> {}
 
 class B<T extends A> {}
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.expect
index 0fb60dc..d7868a1 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends self::A<core::int*>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<core::int>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A<core::int*>*>* v = null;
-static method main() → dynamic {
+static field self::B<self::A<core::int>> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.modular.expect
index 0fb60dc..d7868a1 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.modular.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends self::A<core::int*>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<core::int>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A<core::int*>*>* v = null;
-static method main() → dynamic {
+static field self::B<self::A<core::int>> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.outline.expect
index e676290..99d73b4 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.outline.expect
@@ -1,35 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends self::A<core::int*>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<core::int>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A<core::int*>*>* v;
-static method main() → dynamic
+static field self::B<self::A<core::int>> v;
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.transformed.expect
index 0fb60dc..d7868a1 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.transformed.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends self::A<core::int*>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<core::int>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A<core::int*>*>* v = null;
-static method main() → dynamic {
+static field self::B<self::A<core::int>> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart
index 7741a6a..d51ee0d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,8 +9,8 @@
 
 class B<T extends /*error:NOT_INSTANTIATED_BOUND*/ A> {}
 
-B v = null;
+B v = throw '';
 
-main() {
+test() {
   v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.textual_outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.textual_outline.expect
index 93b75d2..5ac42a1 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class A<T extends int> {}
 
 class B<T extends A> {}
 
-B v = null;
-main() {}
+B v = throw '';
+test() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.textual_outline_modelled.expect
index 5b4b015..dd1576d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
-B v = null;
+B v = throw '';
 
 class A<T extends int> {}
 
 class B<T extends A> {}
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.expect
index 0612d0f..d9cba8d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A<core::int*>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<core::int>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A<core::int*>*>* v = null;
-static method main() → dynamic {
+static field self::B<self::A<core::int>> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.modular.expect
index 0612d0f..d9cba8d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.modular.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A<core::int*>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<core::int>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A<core::int*>*>* v = null;
-static method main() → dynamic {
+static field self::B<self::A<core::int>> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.outline.expect
index 8a8c77b..8b1c460 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.outline.expect
@@ -1,35 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A<core::int*>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<core::int>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A<core::int*>*>* v;
-static method main() → dynamic
+static field self::B<self::A<core::int>> v;
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.transformed.expect
index 0612d0f..d9cba8d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.transformed.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A<core::int*>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<core::int>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A<core::int*>*>* v = null;
-static method main() → dynamic {
+static field self::B<self::A<core::int>> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart
index e1646d1..6a36d8b 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,8 +9,8 @@
 
 class B<T extends A> {}
 
-B v = null;
+B v = throw '';
 
-main() {
+test() {
   v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.textual_outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.textual_outline.expect
index 2313221..6e410d8 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class A<T> {}
 
 class B<T extends A> {}
 
-B v = null;
-main() {}
+B v = throw '';
+test() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.textual_outline_modelled.expect
index 0151256..a1351f5 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
-B v = null;
+B v = throw '';
 
 class A<T> {}
 
 class B<T extends A> {}
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.expect
index 731ae28..fd0a375 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A<dynamic>*>* v = null;
-static method main() → dynamic {
+static field self::B<self::A<dynamic>> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.modular.expect
index 731ae28..fd0a375 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.modular.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A<dynamic>*>* v = null;
-static method main() → dynamic {
+static field self::B<self::A<dynamic>> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.outline.expect
index f7e09d3..e32fb11 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.outline.expect
@@ -1,35 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A<dynamic>*>* v;
-static method main() → dynamic
+static field self::B<self::A<dynamic>> v;
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.transformed.expect
index 731ae28..fd0a375 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.transformed.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A<dynamic>*>* v = null;
-static method main() → dynamic {
+static field self::B<self::A<dynamic>> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart
index 27f3f93..4ee3038 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-A v = null;
+A v = throw '';
 
 class A<T extends int> {}
 
-main() {
+test() {
   v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.textual_outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.textual_outline.expect
index f140b4b..5958426 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
-A v = null;
+A v = throw '';
 
 class A<T extends int> {}
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.textual_outline_modelled.expect
index f140b4b..5958426 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
-A v = null;
+A v = throw '';
 
 class A<T extends int> {}
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.expect
index 09072c4..051d277 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<core::int*>* v = null;
-static method main() → dynamic {
+static field self::A<core::int> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.modular.expect
index 09072c4..051d277 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<core::int*>* v = null;
-static method main() → dynamic {
+static field self::A<core::int> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.outline.expect
index 5cb5fd6..2ca172d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<core::int*>* v;
-static method main() → dynamic
+static field self::A<core::int> v;
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.transformed.expect
index 09072c4..051d277 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<core::int*>* v = null;
-static method main() → dynamic {
+static field self::A<core::int> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart
index 3d29b34..16dee4d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A<T extends int> {}
 
-A v = null;
+A v = throw '';
 
-main() {
+test() {
   v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.textual_outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.textual_outline.expect
index f4deaca..aba6243 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
 class A<T extends int> {}
 
-A v = null;
-main() {}
+A v = throw '';
+test() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.textual_outline_modelled.expect
index f140b4b..5958426 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
-A v = null;
+A v = throw '';
 
 class A<T extends int> {}
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.expect
index 09072c4..051d277 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<core::int*>* v = null;
-static method main() → dynamic {
+static field self::A<core::int> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.modular.expect
index 09072c4..051d277 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<core::int*>* v = null;
-static method main() → dynamic {
+static field self::A<core::int> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.outline.expect
index 5cb5fd6..2ca172d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<core::int*>* v;
-static method main() → dynamic
+static field self::A<core::int> v;
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.transformed.expect
index 09072c4..051d277 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<core::int*>* v = null;
-static method main() → dynamic {
+static field self::A<core::int> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart
index 2ab61b3..0bfb3cc 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C<T> {}
 
 main() {
-  var /*@ type=C<dynamic>* */ v = new /*@ typeArgs=dynamic */ C();
+  var /*@type=C<dynamic>*/ v = new /*@ typeArgs=dynamic */ C();
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.textual_outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.textual_outline.expect
index 1fc88a2..3c2908d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.textual_outline_modelled.expect
index 1fc88a2..3c2908d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.expect
index 05cb019..3688e12 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<dynamic>* v = new self::C::•<dynamic>();
+  self::C<dynamic> v = new self::C::•<dynamic>();
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.modular.expect
index 05cb019..3688e12 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.modular.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<dynamic>* v = new self::C::•<dynamic>();
+  self::C<dynamic> v = new self::C::•<dynamic>();
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.outline.expect
index e2b049c..8de3b7d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.transformed.expect
index 05cb019..3688e12 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.transformed.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<dynamic>* v = new self::C::•<dynamic>();
+  self::C<dynamic> v = new self::C::•<dynamic>();
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart
index b74908c..a1c62d3 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.textual_outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.textual_outline.expect
index 016021d..c265515 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T extends num> {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.textual_outline_modelled.expect
index 116c671..71e70ed 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T extends num> {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.expect
index 1fb9971..c9aecdc 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<core::int*>* x = new self::C::•<core::int*>();
+static field self::C<core::int> x = new self::C::•<core::int>();
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.modular.expect
index 1fb9971..c9aecdc 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<core::int*>* x = new self::C::•<core::int*>();
+static field self::C<core::int> x = new self::C::•<core::int>();
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.outline.expect
index 1338660..3dc98d7 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<core::int*>* x;
+static field self::C<core::int> x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.transformed.expect
index 1fb9971..c9aecdc 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<core::int*>* x = new self::C::•<core::int*>();
+static field self::C<core::int> x = new self::C::•<core::int>();
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart
index c1b6795..04bc090 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,8 +9,8 @@
 
 class B<T extends A> {}
 
-B v = null;
+B v = throw '';
 
-main() {
+test() {
   v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.textual_outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.textual_outline.expect
index 68ed21d..c8caf2e 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class A {}
 
 class B<T extends A> {}
 
-B v = null;
-main() {}
+B v = throw '';
+test() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.textual_outline_modelled.expect
index b6747d2..7865249 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
-B v = null;
+B v = throw '';
 
 class A {}
 
 class B<T extends A> {}
 
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.expect
index 6bd9194..00cc457 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A*>* v = null;
-static method main() → dynamic {
+static field self::B<self::A> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.modular.expect
index 6bd9194..00cc457 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.modular.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A*>* v = null;
-static method main() → dynamic {
+static field self::B<self::A> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.outline.expect
index ef0a99a..a4b11a7 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.outline.expect
@@ -1,35 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A*>* v;
-static method main() → dynamic
+static field self::B<self::A> v;
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.transformed.expect
index 6bd9194..00cc457 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.transformed.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<self::A*>* v = null;
-static method main() → dynamic {
+static field self::B<self::A> v = throw "";
+static method test() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/int_upwards_local.dart b/pkg/front_end/testcases/inference/int_upwards_local.dart
index 95950f1..d4e7729 100644
--- a/pkg/front_end/testcases/inference/int_upwards_local.dart
+++ b/pkg/front_end/testcases/inference/int_upwards_local.dart
@@ -1,10 +1,10 @@
 // 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.md file.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=int* */ x = 1;
+  var /*@type=int*/ x = 1;
 }
diff --git a/pkg/front_end/testcases/inference/int_upwards_local.dart.textual_outline.expect b/pkg/front_end/testcases/inference/int_upwards_local.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/int_upwards_local.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/int_upwards_local.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/int_upwards_local.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/int_upwards_local.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/int_upwards_local.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/int_upwards_local.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.expect b/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.expect
index bdd406c..b54f218 100644
--- a/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* x = 1;
+  core::int x = 1;
 }
diff --git a/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.modular.expect
index bdd406c..b54f218 100644
--- a/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.modular.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* x = 1;
+  core::int x = 1;
 }
diff --git a/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.outline.expect b/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.transformed.expect
index bdd406c..b54f218 100644
--- a/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.transformed.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* x = 1;
+  core::int x = 1;
 }
diff --git a/pkg/front_end/testcases/inference/issue41199.dart b/pkg/front_end/testcases/inference/issue41199.dart
index 95fc6a4..778bf42 100644
--- a/pkg/front_end/testcases/inference/issue41199.dart
+++ b/pkg/front_end/testcases/inference/issue41199.dart
@@ -1,7 +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.
-// @dart=2.9
+
 foo<X>(Map<X, Y> Function<Y>() f) => null;
 baz() => foo(<Z>() => <dynamic, Z>{});
 
diff --git a/pkg/front_end/testcases/inference/issue41199.dart.textual_outline.expect b/pkg/front_end/testcases/inference/issue41199.dart.textual_outline.expect
index d392452..a90b5ce 100644
--- a/pkg/front_end/testcases/inference/issue41199.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/issue41199.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 foo<X>(Map<X, Y> Function<Y>() f) => null;
 baz() => foo(<Z>() => <dynamic, Z>{});
 main() {}
diff --git a/pkg/front_end/testcases/inference/issue41199.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/issue41199.dart.textual_outline_modelled.expect
index a7957a3..81ec7c1 100644
--- a/pkg/front_end/testcases/inference/issue41199.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/issue41199.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 baz() => foo(<Z>() => <dynamic, Z>{});
 foo<X>(Map<X, Y> Function<Y>() f) => null;
 main() {}
diff --git a/pkg/front_end/testcases/inference/issue41199.dart.weak.expect b/pkg/front_end/testcases/inference/issue41199.dart.weak.expect
index 6d7392d..993a778 100644
--- a/pkg/front_end/testcases/inference/issue41199.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/issue41199.dart.weak.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method foo<X extends core::Object* = dynamic>(<Y extends core::Object* = dynamic>() →* core::Map<self::foo::X*, Y*>* f) → dynamic
+static method foo<X extends core::Object? = dynamic>(<Y extends core::Object? = dynamic>() → core::Map<self::foo::X%, Y%> f) → dynamic
   return null;
 static method baz() → dynamic
-  return self::foo<dynamic>(<Z extends core::Object* = dynamic>() → core::Map<dynamic, Z*>* => <dynamic, Z*>{});
+  return self::foo<dynamic>(<Z extends core::Object? = dynamic>() → core::Map<dynamic, Z%> => <dynamic, Z%>{});
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/issue41199.dart.weak.modular.expect b/pkg/front_end/testcases/inference/issue41199.dart.weak.modular.expect
index 6d7392d..993a778 100644
--- a/pkg/front_end/testcases/inference/issue41199.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/issue41199.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method foo<X extends core::Object* = dynamic>(<Y extends core::Object* = dynamic>() →* core::Map<self::foo::X*, Y*>* f) → dynamic
+static method foo<X extends core::Object? = dynamic>(<Y extends core::Object? = dynamic>() → core::Map<self::foo::X%, Y%> f) → dynamic
   return null;
 static method baz() → dynamic
-  return self::foo<dynamic>(<Z extends core::Object* = dynamic>() → core::Map<dynamic, Z*>* => <dynamic, Z*>{});
+  return self::foo<dynamic>(<Z extends core::Object? = dynamic>() → core::Map<dynamic, Z%> => <dynamic, Z%>{});
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/issue41199.dart.weak.outline.expect b/pkg/front_end/testcases/inference/issue41199.dart.weak.outline.expect
index 69b0cc3..295ad87 100644
--- a/pkg/front_end/testcases/inference/issue41199.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/issue41199.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method foo<X extends core::Object* = dynamic>(<Y extends core::Object* = dynamic>() →* core::Map<self::foo::X*, Y*>* f) → dynamic
+static method foo<X extends core::Object? = dynamic>(<Y extends core::Object? = dynamic>() → core::Map<self::foo::X%, Y%> f) → dynamic
   ;
 static method baz() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/issue41199.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/issue41199.dart.weak.transformed.expect
index 6d7392d..993a778 100644
--- a/pkg/front_end/testcases/inference/issue41199.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/issue41199.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method foo<X extends core::Object* = dynamic>(<Y extends core::Object* = dynamic>() →* core::Map<self::foo::X*, Y*>* f) → dynamic
+static method foo<X extends core::Object? = dynamic>(<Y extends core::Object? = dynamic>() → core::Map<self::foo::X%, Y%> f) → dynamic
   return null;
 static method baz() → dynamic
-  return self::foo<dynamic>(<Z extends core::Object* = dynamic>() → core::Map<dynamic, Z*>* => <dynamic, Z*>{});
+  return self::foo<dynamic>(<Z extends core::Object? = dynamic>() → core::Map<dynamic, Z%> => <dynamic, Z%>{});
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart
index 4c823e7..3fdda1f 100644
--- a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,8 +9,8 @@
 
 void foo() {
   List myList = getListOfString();
-  myList. /*@ typeArgs=int* */ /*@target=Iterable.map*/ map(
-      /*@ returnType=int* */ (/*@ type=dynamic */ type) => 42);
+  myList. /*@typeArgs=int*/ /*@target=Iterable.map*/ map(
+      /*@returnType=int*/ (/*@ type=dynamic */ type) => 42);
 }
 
 void bar() {
@@ -21,7 +21,7 @@
     return;
   }
   /*info:DYNAMIC_INVOKE*/ list.map(
-      /*@ returnType=String* */ (/*@ type=dynamic */ value) => '${value}');
+      /*@returnType=String*/ (/*@ type=dynamic */ value) => '${value}');
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.textual_outline.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.textual_outline.expect
index 132d473..8090ea1 100644
--- a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<String> getListOfString() => const <String>[];
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.textual_outline_modelled.expect
index 2ff4dca..cd53744 100644
--- a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<String> getListOfString() => const <String>[];
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.expect
index 9cfc708..3c6da75 100644
--- a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.expect
@@ -1,22 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method getListOfString() → core::List<core::String*>*
+static method getListOfString() → core::List<core::String>
   return #C1;
 static method foo() → void {
-  core::List<dynamic>* myList = self::getListOfString();
-  myList.{core::Iterable::map}<core::int*>((dynamic type) → core::int* => 42){((dynamic) →* core::int*) →* core::Iterable<core::int*>*};
+  core::List<dynamic> myList = self::getListOfString();
+  myList.{core::Iterable::map}<core::int>((dynamic type) → core::int => 42){((dynamic) → core::int) → core::Iterable<core::int>};
 }
 static method bar() → void {
   dynamic list;
   try {
-    list = <core::String*>[];
+    list = <core::String>[];
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
     return;
   }
-  list{dynamic}.map((dynamic value) → core::String* => "${value}");
+  list{dynamic}.map((dynamic value) → core::String => "${value}");
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.modular.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.modular.expect
index 9cfc708..3c6da75 100644
--- a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.modular.expect
@@ -1,22 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method getListOfString() → core::List<core::String*>*
+static method getListOfString() → core::List<core::String>
   return #C1;
 static method foo() → void {
-  core::List<dynamic>* myList = self::getListOfString();
-  myList.{core::Iterable::map}<core::int*>((dynamic type) → core::int* => 42){((dynamic) →* core::int*) →* core::Iterable<core::int*>*};
+  core::List<dynamic> myList = self::getListOfString();
+  myList.{core::Iterable::map}<core::int>((dynamic type) → core::int => 42){((dynamic) → core::int) → core::Iterable<core::int>};
 }
 static method bar() → void {
   dynamic list;
   try {
-    list = <core::String*>[];
+    list = <core::String>[];
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
     return;
   }
-  list{dynamic}.map((dynamic value) → core::String* => "${value}");
+  list{dynamic}.map((dynamic value) → core::String => "${value}");
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.outline.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.outline.expect
index a021f96..8d24c6a 100644
--- a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method getListOfString() → core::List<core::String*>*
+static method getListOfString() → core::List<core::String>
   ;
 static method foo() → void
   ;
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.transformed.expect
index 438dd97..597e52c 100644
--- a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.transformed.expect
@@ -1,22 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method getListOfString() → core::List<core::String*>*
+static method getListOfString() → core::List<core::String>
   return #C1;
 static method foo() → void {
-  core::List<dynamic>* myList = self::getListOfString();
-  myList.{core::Iterable::map}<core::int*>((dynamic type) → core::int* => 42){((dynamic) →* core::int*) →* core::Iterable<core::int*>*};
+  core::List<dynamic> myList = self::getListOfString();
+  myList.{core::Iterable::map}<core::int>((dynamic type) → core::int => 42){((dynamic) → core::int) → core::Iterable<core::int>};
 }
 static method bar() → void {
   dynamic list;
   try {
-    list = core::_GrowableList::•<core::String*>(0);
+    list = core::_GrowableList::•<core::String>(0);
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
     return;
   }
-  list{dynamic}.map((dynamic value) → core::String* => "${value}");
+  list{dynamic}.map((dynamic value) → core::String => "${value}");
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/lambda_return_type.dart b/pkg/front_end/testcases/inference/lambda_return_type.dart
index cdaf2d6..452f486 100644
--- a/pkg/front_end/testcases/inference/lambda_return_type.dart
+++ b/pkg/front_end/testcases/inference/lambda_return_type.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,12 +12,12 @@
 test() {
   int i = 1;
   Object o = 1;
-  FunctionReturningNum a = /*@ returnType=int* */ () => i;
-  FunctionReturningNum b = /*@ returnType=num* */ () => o;
-  FunctionReturningNum c = /*@ returnType=int* */ () {
+  FunctionReturningNum a = /*@returnType=int**/ () => i;
+  FunctionReturningNum b = /*@returnType=num**/ () => o;
+  FunctionReturningNum c = /*@returnType=int**/ () {
     return i;
   };
-  FunctionReturningNum d = /*@ returnType=num* */ () {
+  FunctionReturningNum d = /*@returnType=num**/ () {
     return o;
   };
 }
diff --git a/pkg/front_end/testcases/inference/lambda_return_type2.dart b/pkg/front_end/testcases/inference/lambda_return_type2.dart
new file mode 100644
index 0000000..bbc9b57
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_return_type2.dart
@@ -0,0 +1,23 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+typedef num FunctionReturningNum();
+
+test() {
+  int i = 1;
+  dynamic o = 1;
+  FunctionReturningNum a = /*@returnType=int*/ () => i;
+  FunctionReturningNum b = /*@returnType=num*/ () => o;
+  FunctionReturningNum c = /*@returnType=int*/ () {
+    return i;
+  };
+  FunctionReturningNum d = /*@returnType=num*/ () {
+    return o;
+  };
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/lambda_return_type2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/lambda_return_type2.dart.textual_outline.expect
new file mode 100644
index 0000000..431191c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_return_type2.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+library test;
+
+typedef num FunctionReturningNum();
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/lambda_return_type2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/lambda_return_type2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a159045
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_return_type2.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+library test;
+
+main() {}
+test() {}
+typedef num FunctionReturningNum();
diff --git a/pkg/front_end/testcases/inference/lambda_return_type2.dart.weak.expect b/pkg/front_end/testcases/inference/lambda_return_type2.dart.weak.expect
new file mode 100644
index 0000000..4d5ee2a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_return_type2.dart.weak.expect
@@ -0,0 +1,18 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef FunctionReturningNum = () → core::num;
+static method test() → dynamic {
+  core::int i = 1;
+  dynamic o = 1;
+  () → core::num a = () → core::int => i;
+  () → core::num b = () → core::num => o as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
+  () → core::num c = () → core::int {
+    return i;
+  };
+  () → core::num d = () → core::num {
+    return o as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
+  };
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/lambda_return_type2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/lambda_return_type2.dart.weak.modular.expect
new file mode 100644
index 0000000..4d5ee2a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_return_type2.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef FunctionReturningNum = () → core::num;
+static method test() → dynamic {
+  core::int i = 1;
+  dynamic o = 1;
+  () → core::num a = () → core::int => i;
+  () → core::num b = () → core::num => o as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
+  () → core::num c = () → core::int {
+    return i;
+  };
+  () → core::num d = () → core::num {
+    return o as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
+  };
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/lambda_return_type2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/lambda_return_type2.dart.weak.outline.expect
new file mode 100644
index 0000000..a044417
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_return_type2.dart.weak.outline.expect
@@ -0,0 +1,9 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef FunctionReturningNum = () → core::num;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/lambda_return_type2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/lambda_return_type2.dart.weak.transformed.expect
new file mode 100644
index 0000000..4d5ee2a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_return_type2.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef FunctionReturningNum = () → core::num;
+static method test() → dynamic {
+  core::int i = 1;
+  dynamic o = 1;
+  () → core::num a = () → core::int => i;
+  () → core::num b = () → core::num => o as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
+  () → core::num c = () → core::int {
+    return i;
+  };
+  () → core::num d = () → core::num {
+    return o as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
+  };
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart b/pkg/front_end/testcases/inference/lambda_void_context.dart
index 44143a8..d24a4e5 100644
--- a/pkg/front_end/testcases/inference/lambda_void_context.dart
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart
@@ -1,14 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-f() {
-  List<int> o;
+f(List<int> o) {
   o. /*@target=Iterable.forEach*/ forEach(
-      /*@ returnType=int* */ (/*@ type=int* */ i) => i /*@target=num.+*/ + 1);
+      /*@returnType=void*/ (/*@type=int*/ i) => i /*@target=num.+*/ + 1);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart.textual_outline.expect b/pkg/front_end/testcases/inference/lambda_void_context.dart.textual_outline.expect
index 54d3052..3276f20 100644
--- a/pkg/front_end/testcases/inference/lambda_void_context.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
-f() {}
+f(List<int> o) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/lambda_void_context.dart.textual_outline_modelled.expect
index 54d3052..3276f20 100644
--- a/pkg/front_end/testcases/inference/lambda_void_context.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
-f() {}
+f(List<int> o) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.expect b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.expect
index bfc338c..2c12f41 100644
--- a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.expect
@@ -1,9 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f() → dynamic {
-  core::List<core::int*>* o;
-  o.{core::Iterable::forEach}((core::int* i) → core::int* => i.{core::num::+}(1){(core::num*) →* core::int*}){((core::int*) →* void) →* void};
+static method f(core::List<core::int> o) → dynamic {
+  o.{core::Iterable::forEach}((core::int i) → void => i.{core::num::+}(1){(core::num) → core::int}){((core::int) → void) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.modular.expect b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.modular.expect
index bfc338c..2c12f41 100644
--- a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.modular.expect
@@ -1,9 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f() → dynamic {
-  core::List<core::int*>* o;
-  o.{core::Iterable::forEach}((core::int* i) → core::int* => i.{core::num::+}(1){(core::num*) →* core::int*}){((core::int*) →* void) →* void};
+static method f(core::List<core::int> o) → dynamic {
+  o.{core::Iterable::forEach}((core::int i) → void => i.{core::num::+}(1){(core::num) → core::int}){((core::int) → void) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.outline.expect b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.outline.expect
index b08cbd0..a5a8e2e 100644
--- a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.outline.expect
@@ -1,7 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method f() → dynamic
+static method f(core::List<core::int> o) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.transformed.expect
index bfc338c..2c12f41 100644
--- a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.transformed.expect
@@ -1,9 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f() → dynamic {
-  core::List<core::int*>* o;
-  o.{core::Iterable::forEach}((core::int* i) → core::int* => i.{core::num::+}(1){(core::num*) →* core::int*}){((core::int*) →* void) →* void};
+static method f(core::List<core::int> o) → dynamic {
+  o.{core::Iterable::forEach}((core::int i) → void => i.{core::num::+}(1){(core::num) → core::int}){((core::int) → void) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literal_typed.dart b/pkg/front_end/testcases/inference/list_literal_typed.dart
index 39ca4a0..5182f1a 100644
--- a/pkg/front_end/testcases/inference/list_literal_typed.dart
+++ b/pkg/front_end/testcases/inference/list_literal_typed.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,8 +11,8 @@
 var d = <dynamic>[1, 2.0, false];
 
 main() {
-  var /*@ type=List<int*>* */ a = <int>[];
-  var /*@ type=List<double*>* */ b = <double>[1.0, 2.0, 3.0];
-  var /*@ type=List<List<int*>*>* */ c = <List<int>>[];
-  var /*@ type=List<dynamic>* */ d = <dynamic>[1, 2.0, false];
+  var /*@type=List<int>*/ a = <int>[];
+  var /*@type=List<double>*/ b = <double>[1.0, 2.0, 3.0];
+  var /*@type=List<List<int>>*/ c = <List<int>>[];
+  var /*@type=List<dynamic>*/ d = <dynamic>[1, 2.0, false];
 }
diff --git a/pkg/front_end/testcases/inference/list_literal_typed.dart.textual_outline.expect b/pkg/front_end/testcases/inference/list_literal_typed.dart.textual_outline.expect
index 850be34..a8bb8ca 100644
--- a/pkg/front_end/testcases/inference/list_literal_typed.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/list_literal_typed.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var a = <int>[];
diff --git a/pkg/front_end/testcases/inference/list_literal_typed.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/list_literal_typed.dart.textual_outline_modelled.expect
index 4745cec..64454d9 100644
--- a/pkg/front_end/testcases/inference/list_literal_typed.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/list_literal_typed.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.expect b/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.expect
index 87ba7a9..3519921 100644
--- a/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* a = <core::int*>[];
-static field core::List<core::double*>* b = <core::double*>[1.0, 2.0, 3.0];
-static field core::List<core::List<core::int*>*>* c = <core::List<core::int*>*>[];
-static field core::List<dynamic>* d = <dynamic>[1, 2.0, false];
+static field core::List<core::int> a = <core::int>[];
+static field core::List<core::double> b = <core::double>[1.0, 2.0, 3.0];
+static field core::List<core::List<core::int>> c = <core::List<core::int>>[];
+static field core::List<dynamic> d = <dynamic>[1, 2.0, false];
 static method main() → dynamic {
-  core::List<core::int*>* a = <core::int*>[];
-  core::List<core::double*>* b = <core::double*>[1.0, 2.0, 3.0];
-  core::List<core::List<core::int*>*>* c = <core::List<core::int*>*>[];
-  core::List<dynamic>* d = <dynamic>[1, 2.0, false];
+  core::List<core::int> a = <core::int>[];
+  core::List<core::double> b = <core::double>[1.0, 2.0, 3.0];
+  core::List<core::List<core::int>> c = <core::List<core::int>>[];
+  core::List<dynamic> d = <dynamic>[1, 2.0, false];
 }
diff --git a/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.modular.expect b/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.modular.expect
index 87ba7a9..3519921 100644
--- a/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* a = <core::int*>[];
-static field core::List<core::double*>* b = <core::double*>[1.0, 2.0, 3.0];
-static field core::List<core::List<core::int*>*>* c = <core::List<core::int*>*>[];
-static field core::List<dynamic>* d = <dynamic>[1, 2.0, false];
+static field core::List<core::int> a = <core::int>[];
+static field core::List<core::double> b = <core::double>[1.0, 2.0, 3.0];
+static field core::List<core::List<core::int>> c = <core::List<core::int>>[];
+static field core::List<dynamic> d = <dynamic>[1, 2.0, false];
 static method main() → dynamic {
-  core::List<core::int*>* a = <core::int*>[];
-  core::List<core::double*>* b = <core::double*>[1.0, 2.0, 3.0];
-  core::List<core::List<core::int*>*>* c = <core::List<core::int*>*>[];
-  core::List<dynamic>* d = <dynamic>[1, 2.0, false];
+  core::List<core::int> a = <core::int>[];
+  core::List<core::double> b = <core::double>[1.0, 2.0, 3.0];
+  core::List<core::List<core::int>> c = <core::List<core::int>>[];
+  core::List<dynamic> d = <dynamic>[1, 2.0, false];
 }
diff --git a/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.outline.expect b/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.outline.expect
index 683fac8..0fbc7e9 100644
--- a/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* a;
-static field core::List<core::double*>* b;
-static field core::List<core::List<core::int*>*>* c;
-static field core::List<dynamic>* d;
+static field core::List<core::int> a;
+static field core::List<core::double> b;
+static field core::List<core::List<core::int>> c;
+static field core::List<dynamic> d;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.transformed.expect
index 08d625d..e689f44 100644
--- a/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* a = core::_GrowableList::•<core::int*>(0);
-static field core::List<core::double*>* b = core::_GrowableList::_literal3<core::double*>(1.0, 2.0, 3.0);
-static field core::List<core::List<core::int*>*>* c = core::_GrowableList::•<core::List<core::int*>*>(0);
-static field core::List<dynamic>* d = core::_GrowableList::_literal3<dynamic>(1, 2.0, false);
+static field core::List<core::int> a = core::_GrowableList::•<core::int>(0);
+static field core::List<core::double> b = core::_GrowableList::_literal3<core::double>(1.0, 2.0, 3.0);
+static field core::List<core::List<core::int>> c = core::_GrowableList::•<core::List<core::int>>(0);
+static field core::List<dynamic> d = core::_GrowableList::_literal3<dynamic>(1, 2.0, false);
 static method main() → dynamic {
-  core::List<core::int*>* a = core::_GrowableList::•<core::int*>(0);
-  core::List<core::double*>* b = core::_GrowableList::_literal3<core::double*>(1.0, 2.0, 3.0);
-  core::List<core::List<core::int*>*>* c = core::_GrowableList::•<core::List<core::int*>*>(0);
-  core::List<dynamic>* d = core::_GrowableList::_literal3<dynamic>(1, 2.0, false);
+  core::List<core::int> a = core::_GrowableList::•<core::int>(0);
+  core::List<core::double> b = core::_GrowableList::_literal3<core::double>(1.0, 2.0, 3.0);
+  core::List<core::List<core::int>> c = core::_GrowableList::•<core::List<core::int>>(0);
+  core::List<dynamic> d = core::_GrowableList::_literal3<dynamic>(1, 2.0, false);
 }
diff --git a/pkg/front_end/testcases/inference/list_literals.dart b/pkg/front_end/testcases/inference/list_literals.dart
index d6c56b3..0e7aa7e 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart
+++ b/pkg/front_end/testcases/inference/list_literals.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 test1() {
-  var /*@ type=List<int*>* */ x = /*@ typeArgs=int* */ [1, 2, 3];
+  var /*@type=List<int>*/ x = /*@typeArgs=int*/ [1, 2, 3];
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
   x. /*@target=List.add*/ add(4);
@@ -14,7 +14,7 @@
 }
 
 test2() {
-  var /*@ type=List<num*>* */ x = /*@ typeArgs=num* */ [1, 2.0, 3];
+  var /*@type=List<num>*/ x = /*@typeArgs=num*/ [1, 2.0, 3];
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
   x. /*@target=List.add*/ add(4.0);
   List<int> y = /*info:ASSIGNMENT_CAST*/ x;
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.textual_outline.expect b/pkg/front_end/testcases/inference/list_literals.dart.textual_outline.expect
index eee2ee4..5609202 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 test1() {}
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/list_literals.dart.textual_outline_modelled.expect
index 6c93634..140f235 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.weak.expect b/pkg/front_end/testcases/inference/list_literals.dart.weak.expect
index a4e38e4..578cc6c 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,26 +14,34 @@
 //   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
 //                                                                      ^
 //
+// pkg/front_end/testcases/inference/list_literals.dart:20:42: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//   List<int> y = /*info:ASSIGNMENT_CAST*/ x;
+//                                          ^
+//
 import self as self;
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::List<core::int*>* x = <core::int*>[1, 2, 3];
+  core::List<core::int> x = <core::int>[1, 2, 3];
   x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:70: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                     ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
+                                                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
   x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:70: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                     ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
-  x.{core::List::add}(4){(core::int*) →* void};
-  core::List<core::num*>* y = x;
+                                                                     ^" in 4.0 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  x.{core::List::add}(4){(core::int) → void};
+  core::List<core::num> y = x;
 }
 static method test2() → dynamic {
-  core::List<core::num*>* x = <core::num*>[1, 2.0, 3];
+  core::List<core::num> x = <core::num>[1, 2.0, 3];
   x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:70: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                     ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
-  x.{core::List::add}(4.0){(core::num*) →* void};
-  core::List<core::int*>* y = x as{TypeError} core::List<core::int*>*;
+                                                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::num){(core::num) → void};
+  x.{core::List::add}(4.0){(core::num) → void};
+  core::List<core::int> y = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:20:42: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+  List<int> y = /*info:ASSIGNMENT_CAST*/ x;
+                                         ^" in x as{TypeError,ForNonNullableByDefault} core::List<core::int>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.weak.modular.expect b/pkg/front_end/testcases/inference/list_literals.dart.weak.modular.expect
index a4e38e4..578cc6c 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,26 +14,34 @@
 //   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
 //                                                                      ^
 //
+// pkg/front_end/testcases/inference/list_literals.dart:20:42: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//   List<int> y = /*info:ASSIGNMENT_CAST*/ x;
+//                                          ^
+//
 import self as self;
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::List<core::int*>* x = <core::int*>[1, 2, 3];
+  core::List<core::int> x = <core::int>[1, 2, 3];
   x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:70: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                     ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
+                                                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
   x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:70: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                     ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
-  x.{core::List::add}(4){(core::int*) →* void};
-  core::List<core::num*>* y = x;
+                                                                     ^" in 4.0 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  x.{core::List::add}(4){(core::int) → void};
+  core::List<core::num> y = x;
 }
 static method test2() → dynamic {
-  core::List<core::num*>* x = <core::num*>[1, 2.0, 3];
+  core::List<core::num> x = <core::num>[1, 2.0, 3];
   x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:70: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                     ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
-  x.{core::List::add}(4.0){(core::num*) →* void};
-  core::List<core::int*>* y = x as{TypeError} core::List<core::int*>*;
+                                                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::num){(core::num) → void};
+  x.{core::List::add}(4.0){(core::num) → void};
+  core::List<core::int> y = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:20:42: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+  List<int> y = /*info:ASSIGNMENT_CAST*/ x;
+                                         ^" in x as{TypeError,ForNonNullableByDefault} core::List<core::int>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.weak.outline.expect b/pkg/front_end/testcases/inference/list_literals.dart.weak.outline.expect
index 893540e..c9f55bc 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test1() → dynamic
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/list_literals.dart.weak.transformed.expect
index 6631f98..f8209e7 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,26 +14,34 @@
 //   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
 //                                                                      ^
 //
+// pkg/front_end/testcases/inference/list_literals.dart:20:42: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//   List<int> y = /*info:ASSIGNMENT_CAST*/ x;
+//                                          ^
+//
 import self as self;
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::List<core::int*>* x = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
+  core::List<core::int> x = core::_GrowableList::_literal3<core::int>(1, 2, 3);
   x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:70: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                     ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
+                                                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
   x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:70: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                     ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
-  x.{core::List::add}(4){(core::int*) →* void};
-  core::List<core::num*>* y = x;
+                                                                     ^" in 4.0 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  x.{core::List::add}(4){(core::int) → void};
+  core::List<core::num> y = x;
 }
 static method test2() → dynamic {
-  core::List<core::num*>* x = core::_GrowableList::_literal3<core::num*>(1, 2.0, 3);
+  core::List<core::num> x = core::_GrowableList::_literal3<core::num>(1, 2.0, 3);
   x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:70: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                     ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
-  x.{core::List::add}(4.0){(core::num*) →* void};
-  core::List<core::int*>* y = x as{TypeError} core::List<core::int*>*;
+                                                                     ^" in "hi" as{TypeError,ForNonNullableByDefault} core::num){(core::num) → void};
+  x.{core::List::add}(4.0){(core::num) → void};
+  core::List<core::int> y = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:20:42: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+  List<int> y = /*info:ASSIGNMENT_CAST*/ x;
+                                         ^" in x as{TypeError,ForNonNullableByDefault} core::List<core::int>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart
index e8742e5..ed2b92f4 100644
--- a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart
+++ b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 test1() {
-  var /*@ type=List<Null>* */ x = /*@ typeArgs=Null */ [null];
+  var /*@type=List<Null>*/ x = /*@ typeArgs=Null */ [null];
   x. /*@target=List.add*/ add(/*error:INVALID_CAST_LITERAL*/ 42);
 }
 
diff --git a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.textual_outline.expect b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.textual_outline.expect
index f75f219..a73b3f8 100644
--- a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 test1() {}
diff --git a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.textual_outline_modelled.expect
index b1f0123..128ffb9 100644
--- a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.expect b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.expect
index 6efc2e7..aceb523 100644
--- a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.expect
@@ -1,9 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart:10:62: Error: The argument type 'int' can't be assigned to the parameter type 'Null'.
+//   x. /*@target=List.add*/ add(/*error:INVALID_CAST_LITERAL*/ 42);
+//                                                              ^
+//
 import self as self;
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::List<Null>* x = <Null>[null];
-  x.{core::List::add}(42 as{TypeError} Null){(Null) →* void};
+  core::List<Null> x = <Null>[null];
+  x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart:10:62: Error: The argument type 'int' can't be assigned to the parameter type 'Null'.
+  x. /*@target=List.add*/ add(/*error:INVALID_CAST_LITERAL*/ 42);
+                                                             ^" in 42 as{TypeError,ForNonNullableByDefault} Null){(Null) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.modular.expect b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.modular.expect
index 6efc2e7..aceb523 100644
--- a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.modular.expect
@@ -1,9 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart:10:62: Error: The argument type 'int' can't be assigned to the parameter type 'Null'.
+//   x. /*@target=List.add*/ add(/*error:INVALID_CAST_LITERAL*/ 42);
+//                                                              ^
+//
 import self as self;
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::List<Null>* x = <Null>[null];
-  x.{core::List::add}(42 as{TypeError} Null){(Null) →* void};
+  core::List<Null> x = <Null>[null];
+  x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart:10:62: Error: The argument type 'int' can't be assigned to the parameter type 'Null'.
+  x. /*@target=List.add*/ add(/*error:INVALID_CAST_LITERAL*/ 42);
+                                                             ^" in 42 as{TypeError,ForNonNullableByDefault} Null){(Null) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.outline.expect b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.outline.expect
index 3619892..c7a3436 100644
--- a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test1() → dynamic
diff --git a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.transformed.expect
index 53cdae6..6b46a1d 100644
--- a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.transformed.expect
@@ -1,9 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart:10:62: Error: The argument type 'int' can't be assigned to the parameter type 'Null'.
+//   x. /*@target=List.add*/ add(/*error:INVALID_CAST_LITERAL*/ 42);
+//                                                              ^
+//
 import self as self;
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::List<Null>* x = core::_GrowableList::_literal1<Null>(null);
-  x.{core::List::add}(42 as{TypeError} Null){(Null) →* void};
+  core::List<Null> x = core::_GrowableList::_literal1<Null>(null);
+  x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart:10:62: Error: The argument type 'int' can't be assigned to the parameter type 'Null'.
+  x. /*@target=List.add*/ add(/*error:INVALID_CAST_LITERAL*/ 42);
+                                                             ^" in 42 as{TypeError,ForNonNullableByDefault} Null){(Null) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart b/pkg/front_end/testcases/inference/list_literals_top_level.dart
index d8a8475..6cb3b90 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-var x1 = /*@ typeArgs=int* */ [1, 2, 3];
+var x1 = /*@typeArgs=int*/ [1, 2, 3];
 test1() {
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
@@ -13,7 +13,7 @@
   List<num> y = x1;
 }
 
-var x2 = /*@ typeArgs=num* */ [1, 2.0, 3];
+var x2 = /*@typeArgs=num*/ [1, 2.0, 3];
 test2() {
   x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
   x2. /*@target=List.add*/ add(4.0);
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.textual_outline.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.textual_outline.expect
index 7927c17..6756ba5 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var x1 = [1, 2, 3];
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.textual_outline_modelled.expect
index 8caee53..f0f5ec2 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.expect
index 75f767f..e98bc4c 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,26 +14,34 @@
 //   x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
 //                                                                       ^
 //
+// pkg/front_end/testcases/inference/list_literals_top_level.dart:20:42: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//   List<int> y = /*info:ASSIGNMENT_CAST*/ x2;
+//                                          ^
+//
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* x1 = <core::int*>[1, 2, 3];
-static field core::List<core::num*>* x2 = <core::num*>[1, 2.0, 3];
+static field core::List<core::int> x1 = <core::int>[1, 2, 3];
+static field core::List<core::num> x2 = <core::num>[1, 2.0, 3];
 static method test1() → dynamic {
   self::x1.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:71: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
+                                                                      ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
   self::x1.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:71: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                      ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
-  self::x1.{core::List::add}(4){(core::int*) →* void};
-  core::List<core::num*>* y = self::x1;
+                                                                      ^" in 4.0 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  self::x1.{core::List::add}(4){(core::int) → void};
+  core::List<core::num> y = self::x1;
 }
 static method test2() → dynamic {
   self::x2.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:71: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
-  self::x2.{core::List::add}(4.0){(core::num*) →* void};
-  core::List<core::int*>* y = self::x2 as{TypeError} core::List<core::int*>*;
+                                                                      ^" in "hi" as{TypeError,ForNonNullableByDefault} core::num){(core::num) → void};
+  self::x2.{core::List::add}(4.0){(core::num) → void};
+  core::List<core::int> y = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:20:42: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+  List<int> y = /*info:ASSIGNMENT_CAST*/ x2;
+                                         ^" in self::x2 as{TypeError,ForNonNullableByDefault} core::List<core::int>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.modular.expect
index 75f767f..e98bc4c 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,26 +14,34 @@
 //   x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
 //                                                                       ^
 //
+// pkg/front_end/testcases/inference/list_literals_top_level.dart:20:42: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//   List<int> y = /*info:ASSIGNMENT_CAST*/ x2;
+//                                          ^
+//
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* x1 = <core::int*>[1, 2, 3];
-static field core::List<core::num*>* x2 = <core::num*>[1, 2.0, 3];
+static field core::List<core::int> x1 = <core::int>[1, 2, 3];
+static field core::List<core::num> x2 = <core::num>[1, 2.0, 3];
 static method test1() → dynamic {
   self::x1.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:71: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
+                                                                      ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
   self::x1.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:71: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                      ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
-  self::x1.{core::List::add}(4){(core::int*) →* void};
-  core::List<core::num*>* y = self::x1;
+                                                                      ^" in 4.0 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  self::x1.{core::List::add}(4){(core::int) → void};
+  core::List<core::num> y = self::x1;
 }
 static method test2() → dynamic {
   self::x2.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:71: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
-  self::x2.{core::List::add}(4.0){(core::num*) →* void};
-  core::List<core::int*>* y = self::x2 as{TypeError} core::List<core::int*>*;
+                                                                      ^" in "hi" as{TypeError,ForNonNullableByDefault} core::num){(core::num) → void};
+  self::x2.{core::List::add}(4.0){(core::num) → void};
+  core::List<core::int> y = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:20:42: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+  List<int> y = /*info:ASSIGNMENT_CAST*/ x2;
+                                         ^" in self::x2 as{TypeError,ForNonNullableByDefault} core::List<core::int>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.outline.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.outline.expect
index 24cab9d..e84539e 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* x1;
-static field core::List<core::num*>* x2;
+static field core::List<core::int> x1;
+static field core::List<core::num> x2;
 static method test1() → dynamic
   ;
 static method test2() → dynamic
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.transformed.expect
index ec2a985..90c67e5 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,26 +14,34 @@
 //   x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
 //                                                                       ^
 //
+// pkg/front_end/testcases/inference/list_literals_top_level.dart:20:42: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//   List<int> y = /*info:ASSIGNMENT_CAST*/ x2;
+//                                          ^
+//
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* x1 = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
-static field core::List<core::num*>* x2 = core::_GrowableList::_literal3<core::num*>(1, 2.0, 3);
+static field core::List<core::int> x1 = core::_GrowableList::_literal3<core::int>(1, 2, 3);
+static field core::List<core::num> x2 = core::_GrowableList::_literal3<core::num>(1, 2.0, 3);
 static method test1() → dynamic {
   self::x1.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:71: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
+                                                                      ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
   self::x1.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:71: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                      ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
-  self::x1.{core::List::add}(4){(core::int*) →* void};
-  core::List<core::num*>* y = self::x1;
+                                                                      ^" in 4.0 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  self::x1.{core::List::add}(4){(core::int) → void};
+  core::List<core::num> y = self::x1;
 }
 static method test2() → dynamic {
   self::x2.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:71: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
-  self::x2.{core::List::add}(4.0){(core::num*) →* void};
-  core::List<core::int*>* y = self::x2 as{TypeError} core::List<core::int*>*;
+                                                                      ^" in "hi" as{TypeError,ForNonNullableByDefault} core::num){(core::num) → void};
+  self::x2.{core::List::add}(4.0){(core::num) → void};
+  core::List<core::int> y = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:20:42: Error: A value of type 'List<num>' can't be assigned to a variable of type 'List<int>'.
+ - 'List' is from 'dart:core'.
+  List<int> y = /*info:ASSIGNMENT_CAST*/ x2;
+                                         ^" in self::x2 as{TypeError,ForNonNullableByDefault} core::List<core::int>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart
index 6b0b12c..6569c91 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,15 +10,13 @@
   C(this.t);
 }
 
-main() {
-  var /*@ type=C<int*>* */ x = new /*@ typeArgs=int* */ C(42);
+test(dynamic y) {
+  var /*@type=C<int>*/ x = new /*@typeArgs=int*/ C(42);
 
-  num y;
-  C<int> c_int = new /*@ typeArgs=int* */ C(
-      /*info:DOWN_CAST_IMPLICIT*/ y);
+  C<int> c_int = new /*@typeArgs=int*/ C(/*info:DOWN_CAST_IMPLICIT*/ y);
 
-  C<num> c_num = new /*@ typeArgs=num* */ C(123);
+  C<num> c_num = new /*@typeArgs=num*/ C(123);
 
   // Don't infer from explicit dynamic.
-  var /*@ type=C<dynamic>* */ c_dynamic = new C<dynamic>(42);
+  var /*@type=C<dynamic>*/ c_dynamic = new C<dynamic>(42);
 }
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.textual_outline.expect
index c2692ff..3a62151 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
@@ -6,4 +5,4 @@
   C(this.t);
 }
 
-main() {}
+test(dynamic y) {}
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.textual_outline_modelled.expect
index 43f627a..e5c9fc4 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
@@ -6,4 +5,4 @@
   T t;
 }
 
-main() {}
+test(dynamic y) {}
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.expect
index 908eca7..ea95652 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.expect
@@ -1,27 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t;
-  constructor •(self::C::T* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% t;
+  constructor •(self::C::T% t) → self::C<self::C::T%>
     : self::C::t = t, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method main() → dynamic {
-  self::C<core::int*>* x = new self::C::•<core::int*>(42);
-  core::num* y;
-  self::C<core::int*>* c_int = new self::C::•<core::int*>(y as{TypeError} core::int*);
-  self::C<core::num*>* c_num = new self::C::•<core::num*>(123);
-  self::C<dynamic>* c_dynamic = new self::C::•<dynamic>(42);
+static method test(dynamic y) → dynamic {
+  self::C<core::int> x = new self::C::•<core::int>(42);
+  self::C<core::int> c_int = new self::C::•<core::int>(y as{TypeError,ForDynamic,ForNonNullableByDefault} core::int);
+  self::C<core::num> c_num = new self::C::•<core::num>(123);
+  self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
 }
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.modular.expect
index 908eca7..ea95652 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.modular.expect
@@ -1,27 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t;
-  constructor •(self::C::T* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% t;
+  constructor •(self::C::T% t) → self::C<self::C::T%>
     : self::C::t = t, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method main() → dynamic {
-  self::C<core::int*>* x = new self::C::•<core::int*>(42);
-  core::num* y;
-  self::C<core::int*>* c_int = new self::C::•<core::int*>(y as{TypeError} core::int*);
-  self::C<core::num*>* c_num = new self::C::•<core::num*>(123);
-  self::C<dynamic>* c_dynamic = new self::C::•<dynamic>(42);
+static method test(dynamic y) → dynamic {
+  self::C<core::int> x = new self::C::•<core::int>(42);
+  self::C<core::int> c_int = new self::C::•<core::int>(y as{TypeError,ForDynamic,ForNonNullableByDefault} core::int);
+  self::C<core::num> c_num = new self::C::•<core::num>(123);
+  self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
 }
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.outline.expect
index 7285233..c7f47ca 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t;
-  constructor •(self::C::T* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% t;
+  constructor •(self::C::T% t) → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method main() → dynamic
+static method test(dynamic y) → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.transformed.expect
index 908eca7..ea95652 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.transformed.expect
@@ -1,27 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* t;
-  constructor •(self::C::T* t) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% t;
+  constructor •(self::C::T% t) → self::C<self::C::T%>
     : self::C::t = t, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method main() → dynamic {
-  self::C<core::int*>* x = new self::C::•<core::int*>(42);
-  core::num* y;
-  self::C<core::int*>* c_int = new self::C::•<core::int*>(y as{TypeError} core::int*);
-  self::C<core::num*>* c_num = new self::C::•<core::num*>(123);
-  self::C<dynamic>* c_dynamic = new self::C::•<dynamic>(42);
+static method test(dynamic y) → dynamic {
+  self::C<core::int> x = new self::C::•<core::int>(42);
+  self::C<core::int> c_int = new self::C::•<core::int>(y as{TypeError,ForDynamic,ForNonNullableByDefault} core::int);
+  self::C<core::num> c_num = new self::C::•<core::num>(123);
+  self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
 }
diff --git a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart
index d33b089..72e481f 100644
--- a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart
+++ b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart
@@ -1,13 +1,12 @@
 // 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.md file.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-main() {
-  Future<int> futureInt = null;
-  var /*@ type=Future<int*>* */ x = futureInt;
+test(Future<int> futureInt) {
+  var /*@type=Future<int>*/ x = futureInt;
 }
diff --git a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.textual_outline.expect b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.textual_outline.expect
index 71431e1..7ed45ae 100644
--- a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.textual_outline.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-main() {}
+test(Future<int> futureInt) {}
diff --git a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.textual_outline_modelled.expect
index 71431e1..7ed45ae 100644
--- a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-main() {}
+test(Future<int> futureInt) {}
diff --git a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.expect b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.expect
index f941bdc..157fb1e 100644
--- a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.expect
@@ -1,11 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method main() → dynamic {
-  has-declared-initializer asy::Future<core::int*>* futureInt = null;
-  asy::Future<core::int*>* x = futureInt;
+static method test(asy::Future<core::int> futureInt) → dynamic {
+  asy::Future<core::int> x = futureInt;
 }
diff --git a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.modular.expect
index f941bdc..157fb1e 100644
--- a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.modular.expect
@@ -1,11 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method main() → dynamic {
-  has-declared-initializer asy::Future<core::int*>* futureInt = null;
-  asy::Future<core::int*>* x = futureInt;
+static method test(asy::Future<core::int> futureInt) → dynamic {
+  asy::Future<core::int> x = futureInt;
 }
diff --git a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.outline.expect b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.outline.expect
index 55e2ed1..c4def97 100644
--- a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.outline.expect
@@ -1,7 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
 
 import "dart:async";
 
-static method main() → dynamic
+static method test(asy::Future<core::int> futureInt) → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.transformed.expect
index f941bdc..157fb1e 100644
--- a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.transformed.expect
@@ -1,11 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static method main() → dynamic {
-  has-declared-initializer asy::Future<core::int*>* futureInt = null;
-  asy::Future<core::int*>* x = futureInt;
+static method test(asy::Future<core::int> futureInt) → dynamic {
+  asy::Future<core::int> x = futureInt;
 }
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart b/pkg/front_end/testcases/inference/local_return_and_yield.dart
index b722c06..624a8d3 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,7 +13,7 @@
 
 main() {
   IntToInt a() {
-    return /*@ returnType=int* */ (/*@ type=int* */ x) => x;
+    return /*@returnType=int**/ (/*@type=int**/ x) => x;
   }
 
   Future<IntToInt> b() async {
@@ -20,23 +22,23 @@
   }
 
   Iterable<IntToInt> c() sync* {
-    yield /*@ returnType=int* */ (/*@ type=int* */ x) => x;
+    yield /*@returnType=int**/ (/*@type=int**/ x) => x;
   }
 
   Iterable<IntToInt> d() sync* {
-    yield* /*@ typeArgs=(int*) ->* int* */ [
-      /*@ returnType=int* */ (/*@ type=int* */ x) => x
+    yield* /*@typeArgs=(int*) ->* int**/ [
+      /*@returnType=int**/ (/*@type=int**/ x) => x
     ];
   }
 
   Stream<IntToInt> e() async* {
-    yield /*@ returnType=int* */ (/*@ type=int* */ x) => x;
+    yield /*@returnType=int**/ (/*@type=int**/ x) => x;
   }
 
   Stream<IntToInt> f() async* {
-    yield* new /*@ typeArgs=(int*) ->* int* */ Stream.fromIterable(
-        /*@ typeArgs=(int*) ->* int* */ [
-          /*@ returnType=int* */ (/*@ type=int* */ x) => x
+    yield* new /*@typeArgs=(int*) ->* int**/ Stream.fromIterable(
+        /*@typeArgs=(int*) ->* int**/ [
+          /*@returnType=int**/ (/*@type=int**/ x) => x
         ]);
   }
 }
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.expect
index 67f213e..ba0eab8 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+// pkg/front_end/testcases/inference/local_return_and_yield.dart:21:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
 //  - 'Future' is from 'dart:async'.
 //     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
 //                                      ^
@@ -19,7 +19,7 @@
     return (core::int* x) → core::int* => x;
   }
   function b() → asy::Future<(core::int*) →* core::int*>* async /* futureValueType= (core::int*) →* core::int* */ {
-    return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+    return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:21:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
                                      ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.modular.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.modular.expect
index 67f213e..ba0eab8 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.modular.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+// pkg/front_end/testcases/inference/local_return_and_yield.dart:21:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
 //  - 'Future' is from 'dart:async'.
 //     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
 //                                      ^
@@ -19,7 +19,7 @@
     return (core::int* x) → core::int* => x;
   }
   function b() → asy::Future<(core::int*) →* core::int*>* async /* futureValueType= (core::int*) →* core::int* */ {
-    return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+    return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:21:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
                                      ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
index 58cba14..a2f115b 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+// pkg/front_end/testcases/inference/local_return_and_yield.dart:21:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
 //  - 'Future' is from 'dart:async'.
 //     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
 //                                      ^
@@ -19,7 +19,7 @@
     return (core::int* x) → core::int* => x;
   }
   function b() → asy::Future<(core::int*) →* core::int*>* async /* futureValueType= (core::int*) →* core::int* */ {
-    return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+    return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:21:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
                                      ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield2.dart b/pkg/front_end/testcases/inference/local_return_and_yield2.dart
new file mode 100644
index 0000000..0bc3ef0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/local_return_and_yield2.dart
@@ -0,0 +1,42 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+typedef int IntToInt(int i);
+
+main() {
+  IntToInt a() {
+    return /*@returnType=int*/ (/*@type=int*/ x) => x;
+  }
+
+  Future<IntToInt> b() async {
+    // TODO(paulberry): this is broken due to bug 29689.
+    return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+  }
+
+  Iterable<IntToInt> c() sync* {
+    yield /*@returnType=int*/ (/*@type=int*/ x) => x;
+  }
+
+  Iterable<IntToInt> d() sync* {
+    yield* /*@typeArgs=(int) -> int*/ [
+      /*@returnType=int*/ (/*@type=int*/ x) => x
+    ];
+  }
+
+  Stream<IntToInt> e() async* {
+    yield /*@returnType=int*/ (/*@type=int*/ x) => x;
+  }
+
+  Stream<IntToInt> f() async* {
+    yield* new /*@typeArgs=(int) -> int*/ Stream
+        .fromIterable(/*@typeArgs=(int) -> int*/ [
+      /*@returnType=int*/ (/*@type=int*/ x) => x
+    ]);
+  }
+}
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/local_return_and_yield2.dart.textual_outline.expect
new file mode 100644
index 0000000..7a5100f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/local_return_and_yield2.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+library test;
+
+import 'dart:async';
+
+typedef int IntToInt(int i);
+main() {}
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/local_return_and_yield2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ad856ae
--- /dev/null
+++ b/pkg/front_end/testcases/inference/local_return_and_yield2.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+library test;
+
+import 'dart:async';
+
+main() {}
+typedef int IntToInt(int i);
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield2.dart.weak.expect b/pkg/front_end/testcases/inference/local_return_and_yield2.dart.weak.expect
new file mode 100644
index 0000000..300d2569
--- /dev/null
+++ b/pkg/front_end/testcases/inference/local_return_and_yield2.dart.weak.expect
@@ -0,0 +1,39 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/local_return_and_yield2.dart:19:38: Error: A value of type 'dynamic Function(dynamic)' can't be returned from an async function with return type 'Future<int Function(int)>'.
+//  - 'Future' is from 'dart:async'.
+//     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+//                                      ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+typedef IntToInt = (core::int) → core::int;
+static method main() → dynamic {
+  function a() → (core::int) → core::int {
+    return (core::int x) → core::int => x;
+  }
+  function b() → asy::Future<(core::int) → core::int> async /* futureValueType= (core::int) → core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield2.dart:19:38: Error: A value of type 'dynamic Function(dynamic)' can't be returned from an async function with return type 'Future<int Function(int)>'.
+ - 'Future' is from 'dart:async'.
+    return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+                                     ^" in ((dynamic x) → dynamic => x) as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
+  }
+  function c() → core::Iterable<(core::int) → core::int> sync* {
+    yield(core::int x) → core::int => x;
+  }
+  function d() → core::Iterable<(core::int) → core::int> sync* {
+    yield*<(core::int) → core::int>[(core::int x) → core::int => x];
+  }
+  function e() → asy::Stream<(core::int) → core::int> async* {
+    yield(core::int x) → core::int => x;
+  }
+  function f() → asy::Stream<(core::int) → core::int> async* {
+    yield* asy::Stream::fromIterable<(core::int) → core::int>(<(core::int) → core::int>[(core::int x) → core::int => x]);
+  }
+}
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/local_return_and_yield2.dart.weak.modular.expect
new file mode 100644
index 0000000..300d2569
--- /dev/null
+++ b/pkg/front_end/testcases/inference/local_return_and_yield2.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/local_return_and_yield2.dart:19:38: Error: A value of type 'dynamic Function(dynamic)' can't be returned from an async function with return type 'Future<int Function(int)>'.
+//  - 'Future' is from 'dart:async'.
+//     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+//                                      ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+typedef IntToInt = (core::int) → core::int;
+static method main() → dynamic {
+  function a() → (core::int) → core::int {
+    return (core::int x) → core::int => x;
+  }
+  function b() → asy::Future<(core::int) → core::int> async /* futureValueType= (core::int) → core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield2.dart:19:38: Error: A value of type 'dynamic Function(dynamic)' can't be returned from an async function with return type 'Future<int Function(int)>'.
+ - 'Future' is from 'dart:async'.
+    return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+                                     ^" in ((dynamic x) → dynamic => x) as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
+  }
+  function c() → core::Iterable<(core::int) → core::int> sync* {
+    yield(core::int x) → core::int => x;
+  }
+  function d() → core::Iterable<(core::int) → core::int> sync* {
+    yield*<(core::int) → core::int>[(core::int x) → core::int => x];
+  }
+  function e() → asy::Stream<(core::int) → core::int> async* {
+    yield(core::int x) → core::int => x;
+  }
+  function f() → asy::Stream<(core::int) → core::int> async* {
+    yield* asy::Stream::fromIterable<(core::int) → core::int>(<(core::int) → core::int>[(core::int x) → core::int => x]);
+  }
+}
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/local_return_and_yield2.dart.weak.outline.expect
new file mode 100644
index 0000000..9f77031
--- /dev/null
+++ b/pkg/front_end/testcases/inference/local_return_and_yield2.dart.weak.outline.expect
@@ -0,0 +1,9 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef IntToInt = (core::int) → core::int;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/local_return_and_yield2.dart.weak.transformed.expect
new file mode 100644
index 0000000..a5079da
--- /dev/null
+++ b/pkg/front_end/testcases/inference/local_return_and_yield2.dart.weak.transformed.expect
@@ -0,0 +1,39 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/local_return_and_yield2.dart:19:38: Error: A value of type 'dynamic Function(dynamic)' can't be returned from an async function with return type 'Future<int Function(int)>'.
+//  - 'Future' is from 'dart:async'.
+//     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+//                                      ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+typedef IntToInt = (core::int) → core::int;
+static method main() → dynamic {
+  function a() → (core::int) → core::int {
+    return (core::int x) → core::int => x;
+  }
+  function b() → asy::Future<(core::int) → core::int> async /* futureValueType= (core::int) → core::int */ {
+    return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield2.dart:19:38: Error: A value of type 'dynamic Function(dynamic)' can't be returned from an async function with return type 'Future<int Function(int)>'.
+ - 'Future' is from 'dart:async'.
+    return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+                                     ^" in ((dynamic x) → dynamic => x) as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
+  }
+  function c() → core::Iterable<(core::int) → core::int> sync* {
+    yield(core::int x) → core::int => x;
+  }
+  function d() → core::Iterable<(core::int) → core::int> sync* {
+    yield* core::_GrowableList::_literal1<(core::int) → core::int>((core::int x) → core::int => x);
+  }
+  function e() → asy::Stream<(core::int) → core::int> async* {
+    yield(core::int x) → core::int => x;
+  }
+  function f() → asy::Stream<(core::int) → core::int> async* {
+    yield* asy::Stream::fromIterable<(core::int) → core::int>(core::_GrowableList::_literal1<(core::int) → core::int>((core::int x) → core::int => x));
+  }
+}
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart b/pkg/front_end/testcases/inference/logical_or_promotion.dart
index aa690e9..f9c63c4 100644
--- a/pkg/front_end/testcases/inference/logical_or_promotion.dart
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,12 +10,12 @@
 abstract class B {}
 
 class C {
-  A a;
+  A a = throw '';
 
   void f(Object o) {
     if (o is A || o is B) {
       if (o is A) {
-        /*@target=C.a*/ a = /*@ promotedType=A* */ o;
+        /*@target=C.a*/ a = /*@promotedType=A*/ o;
       }
     }
   }
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart.textual_outline.expect b/pkg/front_end/testcases/inference/logical_or_promotion.dart.textual_outline.expect
index 8754ed8..4363567 100644
--- a/pkg/front_end/testcases/inference/logical_or_promotion.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {}
@@ -6,7 +5,7 @@
 abstract class B {}
 
 class C {
-  A a;
+  A a = throw '';
   void f(Object o) {}
 }
 
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/logical_or_promotion.dart.textual_outline_modelled.expect
index 8754ed8..4363567 100644
--- a/pkg/front_end/testcases/inference/logical_or_promotion.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {}
@@ -6,7 +5,7 @@
 abstract class B {}
 
 class C {
-  A a;
+  A a = throw '';
   void f(Object o) {}
 }
 
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.expect b/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.expect
index 8b606cf..d9afd3d5 100644
--- a/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.expect
@@ -1,58 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::A* a = null;
-  synthetic constructor •() → self::C*
+  field self::A a = throw "";
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f(core::Object* o) → void {
-    if(o is self::A* || o is self::B*) {
-      if(o is self::A*) {
-        this.{self::C::a} = o{self::A*};
+  method f(core::Object o) → void {
+    if(o is{ForNonNullableByDefault} self::A || o is{ForNonNullableByDefault} self::B) {
+      if(o is{ForNonNullableByDefault} self::A) {
+        this.{self::C::a} = o{self::A};
       }
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.modular.expect b/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.modular.expect
index 8b606cf..d9afd3d5 100644
--- a/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.modular.expect
@@ -1,58 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::A* a = null;
-  synthetic constructor •() → self::C*
+  field self::A a = throw "";
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f(core::Object* o) → void {
-    if(o is self::A* || o is self::B*) {
-      if(o is self::A*) {
-        this.{self::C::a} = o{self::A*};
+  method f(core::Object o) → void {
+    if(o is{ForNonNullableByDefault} self::A || o is{ForNonNullableByDefault} self::B) {
+      if(o is{ForNonNullableByDefault} self::A) {
+        this.{self::C::a} = o{self::A};
       }
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.outline.expect b/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.outline.expect
index d449765..05ab1f1 100644
--- a/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.outline.expect
@@ -1,51 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::A* a;
-  synthetic constructor •() → self::C*
+  field self::A a;
+  synthetic constructor •() → self::C
     ;
-  method f(core::Object* o) → void
+  method f(core::Object o) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.transformed.expect
index 8b606cf..d9afd3d5 100644
--- a/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.transformed.expect
@@ -1,58 +1,28 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::A* a = null;
-  synthetic constructor •() → self::C*
+  field self::A a = throw "";
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f(core::Object* o) → void {
-    if(o is self::A* || o is self::B*) {
-      if(o is self::A*) {
-        this.{self::C::a} = o{self::A*};
+  method f(core::Object o) → void {
+    if(o is{ForNonNullableByDefault} self::A || o is{ForNonNullableByDefault} self::B) {
+      if(o is{ForNonNullableByDefault} self::A) {
+        this.{self::C::a} = o{self::A};
       }
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals.dart b/pkg/front_end/testcases/inference/map_literals.dart
index 4ca5367..874d0e5 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart
+++ b/pkg/front_end/testcases/inference/map_literals.dart
@@ -1,35 +1,31 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 test1() {
-  var /*@ type=Map<int*, String*>* */ x = /*@ typeArgs=int*, String* */ {1: 'x', 2: 'y'};
+  var /*@type=Map<int, String>*/ x = /*@typeArgs=int, String*/ {1: 'x', 2: 'y'};
   x /*@target=Map.[]=*/ [3] = 'z';
-  x /*@target=Map.[]=*/ [
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-  x /*@target=Map.[]=*/ [
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+  x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+  x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
   Map<num, String> y = x;
 }
 
-test2() {
-  var /*@ type=Map<num*, Pattern*>* */ x = /*@ typeArgs=num*, Pattern* */ {
+test2(Pattern p) {
+  var /*@type=Map<num, Pattern>*/ x = /*@typeArgs=num, Pattern*/ {
     1: 'x',
     2: 'y',
     3.0: new RegExp('.')
   };
   x /*@target=Map.[]=*/ [3] = 'z';
-  x /*@target=Map.[]=*/ [
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+  x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
   x /*@target=Map.[]=*/ [4.0] = 'u';
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-  Pattern p = null;
   x /*@target=Map.[]=*/ [2] = p;
-  Map<int, String> y = /*info:ASSIGNMENT_CAST*/ x;
+  Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.textual_outline.expect b/pkg/front_end/testcases/inference/map_literals.dart.textual_outline.expect
index eee2ee4..2406752 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.textual_outline.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
 test1() {}
-test2() {}
+test2(Pattern p) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/map_literals.dart.textual_outline_modelled.expect
index 6c93634..cc0a74b 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
 main() {}
 test1() {}
-test2() {}
+test2(Pattern p) {}
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.weak.expect b/pkg/front_end/testcases/inference/map_literals.dart.weak.expect
index 4ce37be..7ec99b2 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.weak.expect
@@ -1,58 +1,67 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-//                                              ^
+// pkg/front_end/testcases/inference/map_literals.dart:11:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                                                 ^
 //
-// pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-//                                              ^
+// pkg/front_end/testcases/inference/map_literals.dart:12:65: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+//                                                                 ^
 //
-// pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/map_literals.dart:13:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
 //                                                            ^
 //
-// pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
-//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-//                                              ^
+// pkg/front_end/testcases/inference/map_literals.dart:24:65: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//   x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                                                 ^
 //
-// pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+// pkg/front_end/testcases/inference/map_literals.dart:26:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
 //  - 'Pattern' is from 'dart:core'.
 //   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
 //                                                            ^
 //
+// pkg/front_end/testcases/inference/map_literals.dart:28:53: Error: A value of type 'Map<num, Pattern>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Pattern' is from 'dart:core'.
+//   Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x;
+//                                                     ^
+//
 import self as self;
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::Map<core::int*, core::String*>* x = <core::int*, core::String*>{1: "x", 2: "y"};
-  x.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                             ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::Map<core::int, core::String> x = <core::int, core::String>{1: "x", 2: "y"};
+  x.{core::Map::[]=}(3, "z"){(core::int, core::String) → void};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:11:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                                                ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int, "w"){(core::int, core::String) → void};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:65: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+                                                                ^" in 4.0 as{TypeError,ForNonNullableByDefault} core::int, "u"){(core::int, core::String) → void};
+  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:13:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                           ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
-  core::Map<core::num*, core::String*>* y = x;
+                                                           ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
+  core::Map<core::num, core::String> y = x;
 }
-static method test2() → dynamic {
-  core::Map<core::num*, core::Pattern*>* x = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
-  x.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+static method test2(core::Pattern p) → dynamic {
+  core::Map<core::num, core::Pattern> x = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
+  x.{core::Map::[]=}(3, "z"){(core::num, core::Pattern) → void};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:24:65: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+  x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                                                ^" in "hi" as{TypeError,ForNonNullableByDefault} core::num, "w"){(core::num, core::Pattern) → void};
+  x.{core::Map::[]=}(4.0, "u"){(core::num, core::Pattern) → void};
+  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:26:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                           ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
-  has-declared-initializer core::Pattern* p = null;
-  x.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
-  core::Map<core::int*, core::String*>* y = x as{TypeError} core::Map<core::int*, core::String*>*;
+                                                           ^" in 42 as{TypeError,ForNonNullableByDefault} core::Pattern){(core::num, core::Pattern) → void};
+  x.{core::Map::[]=}(2, p){(core::num, core::Pattern) → void};
+  core::Map<core::int, core::String> y = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:28:53: Error: A value of type 'Map<num, Pattern>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+ - 'Pattern' is from 'dart:core'.
+  Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x;
+                                                    ^" in x as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.weak.modular.expect b/pkg/front_end/testcases/inference/map_literals.dart.weak.modular.expect
index 4ce37be..7ec99b2 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.weak.modular.expect
@@ -1,58 +1,67 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-//                                              ^
+// pkg/front_end/testcases/inference/map_literals.dart:11:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                                                 ^
 //
-// pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-//                                              ^
+// pkg/front_end/testcases/inference/map_literals.dart:12:65: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+//                                                                 ^
 //
-// pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/map_literals.dart:13:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
 //                                                            ^
 //
-// pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
-//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-//                                              ^
+// pkg/front_end/testcases/inference/map_literals.dart:24:65: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//   x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                                                 ^
 //
-// pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+// pkg/front_end/testcases/inference/map_literals.dart:26:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
 //  - 'Pattern' is from 'dart:core'.
 //   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
 //                                                            ^
 //
+// pkg/front_end/testcases/inference/map_literals.dart:28:53: Error: A value of type 'Map<num, Pattern>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Pattern' is from 'dart:core'.
+//   Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x;
+//                                                     ^
+//
 import self as self;
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::Map<core::int*, core::String*>* x = <core::int*, core::String*>{1: "x", 2: "y"};
-  x.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                             ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::Map<core::int, core::String> x = <core::int, core::String>{1: "x", 2: "y"};
+  x.{core::Map::[]=}(3, "z"){(core::int, core::String) → void};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:11:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                                                ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int, "w"){(core::int, core::String) → void};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:65: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+                                                                ^" in 4.0 as{TypeError,ForNonNullableByDefault} core::int, "u"){(core::int, core::String) → void};
+  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:13:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                           ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
-  core::Map<core::num*, core::String*>* y = x;
+                                                           ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
+  core::Map<core::num, core::String> y = x;
 }
-static method test2() → dynamic {
-  core::Map<core::num*, core::Pattern*>* x = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
-  x.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+static method test2(core::Pattern p) → dynamic {
+  core::Map<core::num, core::Pattern> x = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
+  x.{core::Map::[]=}(3, "z"){(core::num, core::Pattern) → void};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:24:65: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+  x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                                                ^" in "hi" as{TypeError,ForNonNullableByDefault} core::num, "w"){(core::num, core::Pattern) → void};
+  x.{core::Map::[]=}(4.0, "u"){(core::num, core::Pattern) → void};
+  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:26:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                           ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
-  has-declared-initializer core::Pattern* p = null;
-  x.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
-  core::Map<core::int*, core::String*>* y = x as{TypeError} core::Map<core::int*, core::String*>*;
+                                                           ^" in 42 as{TypeError,ForNonNullableByDefault} core::Pattern){(core::num, core::Pattern) → void};
+  x.{core::Map::[]=}(2, p){(core::num, core::Pattern) → void};
+  core::Map<core::int, core::String> y = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:28:53: Error: A value of type 'Map<num, Pattern>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+ - 'Pattern' is from 'dart:core'.
+  Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x;
+                                                    ^" in x as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.weak.outline.expect b/pkg/front_end/testcases/inference/map_literals.dart.weak.outline.expect
index 893540e..9295137 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.weak.outline.expect
@@ -1,9 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
 static method test1() → dynamic
   ;
-static method test2() → dynamic
+static method test2(core::Pattern p) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect
index 4ce37be..7ec99b2 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect
@@ -1,58 +1,67 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-//                                              ^
+// pkg/front_end/testcases/inference/map_literals.dart:11:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                                                 ^
 //
-// pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-//                                              ^
+// pkg/front_end/testcases/inference/map_literals.dart:12:65: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+//                                                                 ^
 //
-// pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/inference/map_literals.dart:13:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
 //                                                            ^
 //
-// pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
-//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-//                                              ^
+// pkg/front_end/testcases/inference/map_literals.dart:24:65: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//   x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                                                 ^
 //
-// pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+// pkg/front_end/testcases/inference/map_literals.dart:26:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
 //  - 'Pattern' is from 'dart:core'.
 //   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
 //                                                            ^
 //
+// pkg/front_end/testcases/inference/map_literals.dart:28:53: Error: A value of type 'Map<num, Pattern>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Pattern' is from 'dart:core'.
+//   Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x;
+//                                                     ^
+//
 import self as self;
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::Map<core::int*, core::String*>* x = <core::int*, core::String*>{1: "x", 2: "y"};
-  x.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                             ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
-  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  core::Map<core::int, core::String> x = <core::int, core::String>{1: "x", 2: "y"};
+  x.{core::Map::[]=}(3, "z"){(core::int, core::String) → void};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:11:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                                                ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int, "w"){(core::int, core::String) → void};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:65: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+                                                                ^" in 4.0 as{TypeError,ForNonNullableByDefault} core::int, "u"){(core::int, core::String) → void};
+  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:13:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                           ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
-  core::Map<core::num*, core::String*>* y = x;
+                                                           ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
+  core::Map<core::num, core::String> y = x;
 }
-static method test2() → dynamic {
-  core::Map<core::num*, core::Pattern*>* x = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
-  x.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
-      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
-  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+static method test2(core::Pattern p) → dynamic {
+  core::Map<core::num, core::Pattern> x = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
+  x.{core::Map::[]=}(3, "z"){(core::num, core::Pattern) → void};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:24:65: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+  x /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                                                ^" in "hi" as{TypeError,ForNonNullableByDefault} core::num, "w"){(core::num, core::Pattern) → void};
+  x.{core::Map::[]=}(4.0, "u"){(core::num, core::Pattern) → void};
+  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:26:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                           ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
-  has-declared-initializer core::Pattern* p = null;
-  x.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
-  core::Map<core::int*, core::String*>* y = x as{TypeError} core::Map<core::int*, core::String*>*;
+                                                           ^" in 42 as{TypeError,ForNonNullableByDefault} core::Pattern){(core::num, core::Pattern) → void};
+  x.{core::Map::[]=}(2, p){(core::num, core::Pattern) → void};
+  core::Map<core::int, core::String> y = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:28:53: Error: A value of type 'Map<num, Pattern>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+ - 'Pattern' is from 'dart:core'.
+  Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x;
+                                                    ^" in x as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart
index 46e5430..fa526f8 100644
--- a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart
+++ b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 test1() {
-  var /*@ type=Map<Null, Null>* */ x = /*@ typeArgs=Null, Null */ {null: null};
+  var /*@type=Map<Null, Null>*/ x = /*@ typeArgs=Null, Null */ {null: null};
   x /*@target=Map.[]=*/ [
       /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
 }
diff --git a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.textual_outline.expect b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.textual_outline.expect
index f75f219..a73b3f8 100644
--- a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 test1() {}
diff --git a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.textual_outline_modelled.expect
index b1f0123..128ffb9 100644
--- a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.expect b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.expect
index b636b6c..5635d9c 100644
--- a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.expect
@@ -1,9 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/map_literals_can_infer_null.dart:11:38: Error: A value of type 'int' can't be assigned to a variable of type 'Null'.
+//       /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
+//                                      ^
+//
+// pkg/front_end/testcases/inference/map_literals_can_infer_null.dart:11:74: Error: A value of type 'String' can't be assigned to a variable of type 'Null'.
+//       /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
+//                                                                          ^
+//
 import self as self;
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::Map<Null, Null>* x = <Null, Null>{null: null};
-  x.{core::Map::[]=}(3 as{TypeError} Null, "z" as{TypeError} Null){(Null, Null) →* void};
+  core::Map<Null, Null> x = <Null, Null>{null: null};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_can_infer_null.dart:11:38: Error: A value of type 'int' can't be assigned to a variable of type 'Null'.
+      /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
+                                     ^" in 3 as{TypeError,ForNonNullableByDefault} Null, invalid-expression "pkg/front_end/testcases/inference/map_literals_can_infer_null.dart:11:74: Error: A value of type 'String' can't be assigned to a variable of type 'Null'.
+      /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
+                                                                         ^" in "z" as{TypeError,ForNonNullableByDefault} Null){(Null, Null) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.modular.expect b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.modular.expect
index b636b6c..5635d9c 100644
--- a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.modular.expect
@@ -1,9 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/map_literals_can_infer_null.dart:11:38: Error: A value of type 'int' can't be assigned to a variable of type 'Null'.
+//       /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
+//                                      ^
+//
+// pkg/front_end/testcases/inference/map_literals_can_infer_null.dart:11:74: Error: A value of type 'String' can't be assigned to a variable of type 'Null'.
+//       /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
+//                                                                          ^
+//
 import self as self;
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::Map<Null, Null>* x = <Null, Null>{null: null};
-  x.{core::Map::[]=}(3 as{TypeError} Null, "z" as{TypeError} Null){(Null, Null) →* void};
+  core::Map<Null, Null> x = <Null, Null>{null: null};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_can_infer_null.dart:11:38: Error: A value of type 'int' can't be assigned to a variable of type 'Null'.
+      /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
+                                     ^" in 3 as{TypeError,ForNonNullableByDefault} Null, invalid-expression "pkg/front_end/testcases/inference/map_literals_can_infer_null.dart:11:74: Error: A value of type 'String' can't be assigned to a variable of type 'Null'.
+      /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
+                                                                         ^" in "z" as{TypeError,ForNonNullableByDefault} Null){(Null, Null) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.outline.expect b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.outline.expect
index 3619892..c7a3436 100644
--- a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test1() → dynamic
diff --git a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.transformed.expect
index b636b6c..5635d9c 100644
--- a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.transformed.expect
@@ -1,9 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/map_literals_can_infer_null.dart:11:38: Error: A value of type 'int' can't be assigned to a variable of type 'Null'.
+//       /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
+//                                      ^
+//
+// pkg/front_end/testcases/inference/map_literals_can_infer_null.dart:11:74: Error: A value of type 'String' can't be assigned to a variable of type 'Null'.
+//       /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
+//                                                                          ^
+//
 import self as self;
 import "dart:core" as core;
 
 static method test1() → dynamic {
-  core::Map<Null, Null>* x = <Null, Null>{null: null};
-  x.{core::Map::[]=}(3 as{TypeError} Null, "z" as{TypeError} Null){(Null, Null) →* void};
+  core::Map<Null, Null> x = <Null, Null>{null: null};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_can_infer_null.dart:11:38: Error: A value of type 'int' can't be assigned to a variable of type 'Null'.
+      /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
+                                     ^" in 3 as{TypeError,ForNonNullableByDefault} Null, invalid-expression "pkg/front_end/testcases/inference/map_literals_can_infer_null.dart:11:74: Error: A value of type 'String' can't be assigned to a variable of type 'Null'.
+      /*error:INVALID_CAST_LITERAL*/ 3] = /*error:INVALID_CAST_LITERAL*/ 'z';
+                                                                         ^" in "z" as{TypeError,ForNonNullableByDefault} Null){(Null, Null) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart b/pkg/front_end/testcases/inference/map_literals_top_level.dart
index be3ea61..2a4fea6 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-var x1 = /*@ typeArgs=int*, String* */ {1: 'x', 2: 'y'};
+var x1 = /*@typeArgs=int, String*/ {1: 'x', 2: 'y'};
 test1() {
   x1 /*@target=Map.[]=*/ [3] = 'z';
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
@@ -14,15 +14,14 @@
   Map<num, String> y = x1;
 }
 
-var x2 = /*@ typeArgs=num*, Pattern* */ {1: 'x', 2: 'y', 3.0: new RegExp('.')};
-test2() {
+var x2 = /*@typeArgs=num, Pattern*/ {1: 'x', 2: 'y', 3.0: new RegExp('.')};
+test2(Pattern p) {
   x2 /*@target=Map.[]=*/ [3] = 'z';
   x2 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
   x2 /*@target=Map.[]=*/ [4.0] = 'u';
   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-  Pattern p = null;
   x2 /*@target=Map.[]=*/ [2] = p;
-  Map<int, String> y = /*info:ASSIGNMENT_CAST*/ x2;
+  Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x2;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.textual_outline.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.textual_outline.expect
index f049413..ee5fe06 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 var x1 = {1: 'x', 2: 'y'};
 test1() {}
 var x2 = {1: 'x', 2: 'y', 3.0: new RegExp('.')};
-test2() {}
+test2(Pattern p) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.textual_outline_modelled.expect
index 7b6becf..b36b4a5 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 main() {}
 test1() {}
-test2() {}
+test2(Pattern p) {}
 var x1 = {1: 'x', 2: 'y'};
 var x2 = {1: 'x', 2: 'y', 3.0: new RegExp('.')};
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect
index e1e738a..36426b3 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -23,36 +23,45 @@
 //   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
 //                                                             ^
 //
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:24:53: Error: A value of type 'Map<num, Pattern>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Pattern' is from 'dart:core'.
+//   Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x2;
+//                                                     ^
+//
 import self as self;
 import "dart:core" as core;
 
-static field core::Map<core::int*, core::String*>* x1 = <core::int*, core::String*>{1: "x", 2: "y"};
-static field core::Map<core::num*, core::Pattern*>* x2 = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
+static field core::Map<core::int, core::String> x1 = <core::int, core::String>{1: "x", 2: "y"};
+static field core::Map<core::num, core::Pattern> x2 = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
-  self::x1.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
+  self::x1.{core::Map::[]=}(3, "z"){(core::int, core::String) → void};
   self::x1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:11:66: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                 ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
+                                                                 ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int, "w"){(core::int, core::String) → void};
   self::x1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:12:66: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                                                 ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
+                                                                 ^" in 4.0 as{TypeError,ForNonNullableByDefault} core::int, "u"){(core::int, core::String) → void};
   self::x1.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:13:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x1 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
-  core::Map<core::num*, core::String*>* y = self::x1;
+                                                            ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
+  core::Map<core::num, core::String> y = self::x1;
 }
-static method test2() → dynamic {
-  self::x2.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
+static method test2(core::Pattern p) → dynamic {
+  self::x2.{core::Map::[]=}(3, "z"){(core::num, core::Pattern) → void};
   self::x2.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:20:66: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
   x2 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                 ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
-  self::x2.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
+                                                                 ^" in "hi" as{TypeError,ForNonNullableByDefault} core::num, "w"){(core::num, core::Pattern) → void};
+  self::x2.{core::Map::[]=}(4.0, "u"){(core::num, core::Pattern) → void};
   self::x2.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:22:61: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
-  has-declared-initializer core::Pattern* p = null;
-  self::x2.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
-  core::Map<core::int*, core::String*>* y = self::x2 as{TypeError} core::Map<core::int*, core::String*>*;
+                                                            ^" in 42 as{TypeError,ForNonNullableByDefault} core::Pattern){(core::num, core::Pattern) → void};
+  self::x2.{core::Map::[]=}(2, p){(core::num, core::Pattern) → void};
+  core::Map<core::int, core::String> y = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:24:53: Error: A value of type 'Map<num, Pattern>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+ - 'Pattern' is from 'dart:core'.
+  Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x2;
+                                                    ^" in self::x2 as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.modular.expect
index e1e738a..36426b3 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -23,36 +23,45 @@
 //   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
 //                                                             ^
 //
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:24:53: Error: A value of type 'Map<num, Pattern>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Pattern' is from 'dart:core'.
+//   Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x2;
+//                                                     ^
+//
 import self as self;
 import "dart:core" as core;
 
-static field core::Map<core::int*, core::String*>* x1 = <core::int*, core::String*>{1: "x", 2: "y"};
-static field core::Map<core::num*, core::Pattern*>* x2 = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
+static field core::Map<core::int, core::String> x1 = <core::int, core::String>{1: "x", 2: "y"};
+static field core::Map<core::num, core::Pattern> x2 = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
-  self::x1.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
+  self::x1.{core::Map::[]=}(3, "z"){(core::int, core::String) → void};
   self::x1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:11:66: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                 ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
+                                                                 ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int, "w"){(core::int, core::String) → void};
   self::x1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:12:66: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                                                 ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
+                                                                 ^" in 4.0 as{TypeError,ForNonNullableByDefault} core::int, "u"){(core::int, core::String) → void};
   self::x1.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:13:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x1 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
-  core::Map<core::num*, core::String*>* y = self::x1;
+                                                            ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
+  core::Map<core::num, core::String> y = self::x1;
 }
-static method test2() → dynamic {
-  self::x2.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
+static method test2(core::Pattern p) → dynamic {
+  self::x2.{core::Map::[]=}(3, "z"){(core::num, core::Pattern) → void};
   self::x2.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:20:66: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
   x2 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                 ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
-  self::x2.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
+                                                                 ^" in "hi" as{TypeError,ForNonNullableByDefault} core::num, "w"){(core::num, core::Pattern) → void};
+  self::x2.{core::Map::[]=}(4.0, "u"){(core::num, core::Pattern) → void};
   self::x2.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:22:61: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
-  has-declared-initializer core::Pattern* p = null;
-  self::x2.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
-  core::Map<core::int*, core::String*>* y = self::x2 as{TypeError} core::Map<core::int*, core::String*>*;
+                                                            ^" in 42 as{TypeError,ForNonNullableByDefault} core::Pattern){(core::num, core::Pattern) → void};
+  self::x2.{core::Map::[]=}(2, p){(core::num, core::Pattern) → void};
+  core::Map<core::int, core::String> y = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:24:53: Error: A value of type 'Map<num, Pattern>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+ - 'Pattern' is from 'dart:core'.
+  Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x2;
+                                                    ^" in self::x2 as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.outline.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.outline.expect
index f63db32..98007b0 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.outline.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::Map<core::int*, core::String*>* x1;
-static field core::Map<core::num*, core::Pattern*>* x2;
+static field core::Map<core::int, core::String> x1;
+static field core::Map<core::num, core::Pattern> x2;
 static method test1() → dynamic
   ;
-static method test2() → dynamic
+static method test2(core::Pattern p) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect
index e1e738a..36426b3 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -23,36 +23,45 @@
 //   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
 //                                                             ^
 //
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:24:53: Error: A value of type 'Map<num, Pattern>' can't be assigned to a variable of type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Pattern' is from 'dart:core'.
+//   Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x2;
+//                                                     ^
+//
 import self as self;
 import "dart:core" as core;
 
-static field core::Map<core::int*, core::String*>* x1 = <core::int*, core::String*>{1: "x", 2: "y"};
-static field core::Map<core::num*, core::Pattern*>* x2 = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
+static field core::Map<core::int, core::String> x1 = <core::int, core::String>{1: "x", 2: "y"};
+static field core::Map<core::num, core::Pattern> x2 = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
-  self::x1.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
+  self::x1.{core::Map::[]=}(3, "z"){(core::int, core::String) → void};
   self::x1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:11:66: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                 ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
+                                                                 ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int, "w"){(core::int, core::String) → void};
   self::x1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:12:66: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                                                 ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
+                                                                 ^" in 4.0 as{TypeError,ForNonNullableByDefault} core::int, "u"){(core::int, core::String) → void};
   self::x1.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:13:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x1 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
-  core::Map<core::num*, core::String*>* y = self::x1;
+                                                            ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
+  core::Map<core::num, core::String> y = self::x1;
 }
-static method test2() → dynamic {
-  self::x2.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
+static method test2(core::Pattern p) → dynamic {
+  self::x2.{core::Map::[]=}(3, "z"){(core::num, core::Pattern) → void};
   self::x2.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:20:66: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
   x2 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                 ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
-  self::x2.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
+                                                                 ^" in "hi" as{TypeError,ForNonNullableByDefault} core::num, "w"){(core::num, core::Pattern) → void};
+  self::x2.{core::Map::[]=}(4.0, "u"){(core::num, core::Pattern) → void};
   self::x2.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:22:61: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
-  has-declared-initializer core::Pattern* p = null;
-  self::x2.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
-  core::Map<core::int*, core::String*>* y = self::x2 as{TypeError} core::Map<core::int*, core::String*>*;
+                                                            ^" in 42 as{TypeError,ForNonNullableByDefault} core::Pattern){(core::num, core::Pattern) → void};
+  self::x2.{core::Map::[]=}(2, p){(core::num, core::Pattern) → void};
+  core::Map<core::int, core::String> y = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:24:53: Error: A value of type 'Map<num, Pattern>' can't be assigned to a variable of type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+ - 'Pattern' is from 'dart:core'.
+  Map<int, String> y = /*error:INVALID_ASSIGNMENT*/ x2;
+                                                    ^" in self::x2 as{TypeError,ForNonNullableByDefault} core::Map<core::int, core::String>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart
index e5d267b..dea009e 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  D<T> f<T>() => null;
+  D<T> f<T>() => throw '';
 }
 
 class D<T> {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.textual_outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.textual_outline.expect
index f1f6c1f..a2d8b31 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C {
-  D<T> f<T>() => null;
+  D<T> f<T>() => throw '';
 }
 
 class D<T> {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.textual_outline_modelled.expect
index c5f8528..9c9878f 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C {
-  D<T> f<T>() => null;
+  D<T> f<T>() => throw '';
 }
 
 class D<T> {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.expect
index 05bd044..0a34b46 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>() → self::D<self::C::f::T%>
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* f = new self::C::•().{self::C::f}<core::int*>(){() →* self::D<core::int*>*};
+static field self::D<core::int> f = new self::C::•().{self::C::f}<core::int>(){() → self::D<core::int>};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.modular.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.modular.expect
index 05bd044..0a34b46 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.modular.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>() → self::D<self::C::f::T%>
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* f = new self::C::•().{self::C::f}<core::int*>(){() →* self::D<core::int*>*};
+static field self::D<core::int> f = new self::C::•().{self::C::f}<core::int>(){() → self::D<core::int>};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.outline.expect
index 7d2ddd0..b4d7b77 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.outline.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
+  method f<T extends core::Object? = dynamic>() → self::D<self::C::f::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* f;
+static field self::D<core::int> f;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.transformed.expect
index 05bd044..0a34b46 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.transformed.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>() → self::D<self::C::f::T%>
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* f = new self::C::•().{self::C::f}<core::int*>(){() →* self::D<core::int*>*};
+static field self::D<core::int> f = new self::C::•().{self::C::f}<core::int>(){() → self::D<core::int>};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart
index f83e2f3..42908bf 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart
@@ -1,17 +1,17 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  D<T> f<T>() => null;
+  D<T> f<T>() => throw '';
 }
 
 class D<T> {}
 
-C c;
+C c = throw '';
 var f = c. /*@target=C.f*/ f<int>();
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.textual_outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.textual_outline.expect
index 4ce890c..d0553e8 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class C {
-  D<T> f<T>() => null;
+  D<T> f<T>() => throw '';
 }
 
 class D<T> {}
 
-C c;
+C c = throw '';
 var f = c.f<int>();
 main() {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.textual_outline_modelled.expect
index dac60c5..a19a6ec 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
-C c;
+C c = throw '';
 
 class C {
-  D<T> f<T>() => null;
+  D<T> f<T>() => throw '';
 }
 
 class D<T> {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.expect
index 28c5383..7207c5c 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.expect
@@ -1,39 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>() → self::D<self::C::f::T%>
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field self::D<core::int*>* f = self::c.{self::C::f}<core::int*>(){() →* self::D<core::int*>*};
+static field self::C c = throw "";
+static field self::D<core::int> f = self::c.{self::C::f}<core::int>(){() → self::D<core::int>};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.modular.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.modular.expect
index 28c5383..7207c5c 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.modular.expect
@@ -1,39 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>() → self::D<self::C::f::T%>
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field self::D<core::int*>* f = self::c.{self::C::f}<core::int*>(){() →* self::D<core::int*>*};
+static field self::C c = throw "";
+static field self::D<core::int> f = self::c.{self::C::f}<core::int>(){() → self::D<core::int>};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.outline.expect
index 6125640..98d7621 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
+  method f<T extends core::Object? = dynamic>() → self::D<self::C::f::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field self::D<core::int*>* f;
+static field self::C c;
+static field self::D<core::int> f;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.transformed.expect
index 28c5383..7207c5c 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.transformed.expect
@@ -1,39 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>() → self::D<self::C::f::T%>
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field self::D<core::int*>* f = self::c.{self::C::f}<core::int*>(){() →* self::D<core::int*>*};
+static field self::C c = throw "";
+static field self::D<core::int> f = self::c.{self::C::f}<core::int>(){() → self::D<core::int>};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart
index ac2d340..74edbdd 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  static D<T> f<T>() => null;
+  static D<T> f<T>() => throw '';
 }
 
 class D<T> {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.textual_outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.textual_outline.expect
index 528d358..92e283b 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C {
-  static D<T> f<T>() => null;
+  static D<T> f<T>() => throw '';
 }
 
 class D<T> {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.textual_outline_modelled.expect
index d6aaba5..e38feb9 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C {
-  static D<T> f<T>() => null;
+  static D<T> f<T>() => throw '';
 }
 
 class D<T> {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.expect
index b87237a..61542ae 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static method f<T extends core::Object? = dynamic>() → self::D<self::C::f::T%>
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* f = self::C::f<core::int*>();
+static field self::D<core::int> f = self::C::f<core::int>();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.modular.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.modular.expect
index b87237a..61542ae 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.modular.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static method f<T extends core::Object? = dynamic>() → self::D<self::C::f::T%>
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* f = self::C::f<core::int*>();
+static field self::D<core::int> f = self::C::f<core::int>();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.outline.expect
index 78ddd05..ff73f7a 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.outline.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  static method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
+  static method f<T extends core::Object? = dynamic>() → self::D<self::C::f::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* f;
+static field self::D<core::int> f;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.transformed.expect
index b87237a..61542ae 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.transformed.expect
@@ -1,38 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static method f<T extends core::Object? = dynamic>() → self::D<self::C::f::T%>
+    return throw "";
 }
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* f = self::C::f<core::int*>();
+static field self::D<core::int> f = self::C::f<core::int>();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart
index 409f5c3..f077351 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-D<T> f<T>() => null;
+D<T> f<T>() => throw '';
 
 class D<T> {}
 
 var g = f<int>();
 
-main() {
+test() {
   g;
 }
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.textual_outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.textual_outline.expect
index 73214fd..371d917 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
-D<T> f<T>() => null;
+D<T> f<T>() => throw '';
 
 class D<T> {}
 
 var g = f<int>();
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.textual_outline_modelled.expect
index be4c86e..a5d78b7 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
-D<T> f<T>() => null;
+D<T> f<T>() => throw '';
 
 class D<T> {}
 
-main() {}
+test() {}
 var g = f<int>();
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.expect
index a32a635..ec8d020 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* g = self::f<core::int*>();
-static method f<T extends core::Object* = dynamic>() → self::D<self::f::T*>*
-  return null;
-static method main() → dynamic {
+static field self::D<core::int> g = self::f<core::int>();
+static method f<T extends core::Object? = dynamic>() → self::D<self::f::T%>
+  return throw "";
+static method test() → dynamic {
   self::g;
 }
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.modular.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.modular.expect
index a32a635..ec8d020 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* g = self::f<core::int*>();
-static method f<T extends core::Object* = dynamic>() → self::D<self::f::T*>*
-  return null;
-static method main() → dynamic {
+static field self::D<core::int> g = self::f<core::int>();
+static method f<T extends core::Object? = dynamic>() → self::D<self::f::T%>
+  return throw "";
+static method test() → dynamic {
   self::g;
 }
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.outline.expect
index a1fc0bd..039db75 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* g;
-static method f<T extends core::Object* = dynamic>() → self::D<self::f::T*>*
+static field self::D<core::int> g;
+static method f<T extends core::Object? = dynamic>() → self::D<self::f::T%>
   ;
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.transformed.expect
index a32a635..ec8d020 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* g = self::f<core::int*>();
-static method f<T extends core::Object* = dynamic>() → self::D<self::f::T*>*
-  return null;
-static method main() → dynamic {
+static field self::D<core::int> g = self::f<core::int>();
+static method f<T extends core::Object? = dynamic>() → self::D<self::f::T%>
+  return throw "";
+static method test() → dynamic {
   self::g;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart
index 6858497..2598699 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class I<X> {}
 
 mixin M0<X, Y extends String> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline.expect
index 7930d31..0451f7a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class I<X> {}
 
 mixin M0<X, Y extends String> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline_modelled.expect
index 9474532..53f09d4 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends M1 with M0 {}
 
 class I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.expect
index 0d4a458..5e13db8 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends core::String> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, core::String*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::String> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M1&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect
index 0d4a458..5e13db8 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends core::String> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, core::String*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::String> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M1&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.outline.expect
index e554562..0f54052 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.outline.expect
@@ -1,44 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends core::String> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, core::String*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::String> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.transformed.expect
index aa3fb5c..5aa2ce7 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.transformed.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends core::String> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 extends self::M1 implements self::M0<core::int*, core::String*> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 extends self::M1 implements self::M0<core::int, core::String> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M1&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart
index 6f236ea..bfade07 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class I<X> {}
 
 mixin M0<X, Y extends X> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline.expect
index 3cccb82..3466092 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class I<X> {}
 
 mixin M0<X, Y extends X> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline_modelled.expect
index 1f00d34..52236c2 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends M1 with M0 {}
 
 class I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.expect
index 53f7336..b30213b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends self::M0::X% = dynamic> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, core::int*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M1&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect
index 53f7336..b30213b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends self::M0::X% = dynamic> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, core::int*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M1&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.outline.expect
index 858797c..25d4fcf 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.outline.expect
@@ -1,44 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends self::M0::X% = dynamic> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, core::int*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.transformed.expect
index 49e100e..106ab68 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.transformed.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends self::M0::X% = dynamic> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 extends self::M1 implements self::M0<core::int*, core::int*> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 extends self::M1 implements self::M0<core::int, core::int> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M1&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart
index b09deb8..d96bb30 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class I<X> {}
 
 mixin M0<X, Y extends Comparable<Y>> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline.expect
index 86c6e94..b5f2f00 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class I<X> {}
 
 mixin M0<X, Y extends Comparable<Y>> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline_modelled.expect
index 6462f6d..1b55e84 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends M1 with M0 {}
 
 class I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect
index 819871c..1d3ae30 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,45 +14,25 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends core::Comparable<self::M0::Y> = core::Comparable<dynamic>> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, core::Comparable<dynamic>*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::Comparable<dynamic>> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M1&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
index 819871c..1d3ae30 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,45 +14,25 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends core::Comparable<self::M0::Y> = core::Comparable<dynamic>> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, core::Comparable<dynamic>*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::Comparable<dynamic>> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M1&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect
index 9d065b1..61a404a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,43 +14,23 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends core::Comparable<self::M0::Y> = core::Comparable<dynamic>> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, core::Comparable<dynamic>*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, core::Comparable<dynamic>> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect
index d3a2317..f4f276d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,45 +14,25 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends core::Comparable<self::M0::Y> = core::Comparable<dynamic>> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 extends self::M1 implements self::M0<core::int*, core::Comparable<dynamic>*> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 extends self::M1 implements self::M0<core::int, core::Comparable<dynamic>> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M1&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart
index 09bcac5..0137aa08a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class I<X> {}
 
 mixin M0<X, Y extends void Function({String name})> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline.expect
index d90ab5a..2ccbf71 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class I<X> {}
 
 mixin M0<X, Y extends void Function({String name})> on I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline_modelled.expect
index b7f442c..85675ec 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends M1 with M0 {}
 
 class I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.expect
index 21810ba..763d10d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends ({name: core::String}) → void> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, ({name: core::String*}) →* void> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, ({name: core::String}) → void> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M1&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect
index 21810ba..763d10d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends ({name: core::String}) → void> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, ({name: core::String*}) →* void> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, ({name: core::String}) → void> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M1&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.outline.expect
index dd9cb86..6f9bc95 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.outline.expect
@@ -1,44 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends ({name: core::String}) → void> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, ({name: core::String*}) →* void> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int, ({name: core::String}) → void> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.transformed.expect
index 35928d5..a4a0e43 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.transformed.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends ({name: core::String}) → void> extends self::I<self::M0::X%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&M1&M0 extends self::M1 implements self::M0<core::int*, ({name: core::String*}) →* void> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_A&M1&M0*
+abstract class _A&M1&M0 extends self::M1 implements self::M0<core::int, ({name: core::String}) → void> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0
     : super self::M1::•()
     ;
 }
 class A extends self::_A&M1&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M1&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart
index 7d46deb..e5f5448 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class I<X> {}
 
 class J<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline.expect
index 5a2f3a0..e636692 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class I<X> {}
 
 class J<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline_modelled.expect
index f60beeb..75f46ee 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends M2 with M0 {}
 
 class I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.expect
index 42084e3d..9cf56f6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.expect
@@ -1,81 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class J<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::J<self::J::X*>*
+class J<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object implements self::I<self::_M0&I&J::X*>, self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
+abstract class _M0&I&J<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object implements self::I<self::_M0&I&J::X%>, self::J<self::_M0&I&J::Y%> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X%, self::_M0&I&J::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends self::_M0&I&J<self::M0::X%, self::M0::Y%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M2 extends self::M1 implements self::J<core::double*> {
-  synthetic constructor •() → self::M2*
+class M2 extends self::M1 implements self::J<core::double> {
+  synthetic constructor •() → self::M2
     : super self::M1::•()
     ;
 }
-abstract class _A&M2&M0 = self::M2 with self::M0<core::int*, core::double*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M2&M0*
+abstract class _A&M2&M0 = self::M2 with self::M0<core::int, core::double> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M2&M0
     : super self::M2::•()
     ;
 }
 class A extends self::_A&M2&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M2&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect
index 42084e3d..9cf56f6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect
@@ -1,81 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class J<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::J<self::J::X*>*
+class J<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object implements self::I<self::_M0&I&J::X*>, self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
+abstract class _M0&I&J<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object implements self::I<self::_M0&I&J::X%>, self::J<self::_M0&I&J::Y%> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X%, self::_M0&I&J::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends self::_M0&I&J<self::M0::X%, self::M0::Y%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M2 extends self::M1 implements self::J<core::double*> {
-  synthetic constructor •() → self::M2*
+class M2 extends self::M1 implements self::J<core::double> {
+  synthetic constructor •() → self::M2
     : super self::M1::•()
     ;
 }
-abstract class _A&M2&M0 = self::M2 with self::M0<core::int*, core::double*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M2&M0*
+abstract class _A&M2&M0 = self::M2 with self::M0<core::int, core::double> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M2&M0
     : super self::M2::•()
     ;
 }
 class A extends self::_A&M2&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M2&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.outline.expect
index 8b7ce31..58b3e8b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.outline.expect
@@ -1,76 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class J<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::J<self::J::X*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object implements self::I<self::_M0&I&J::X*>, self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-abstract class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> /*isMixinDeclaration*/  {
-}
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class M2 extends self::M1 implements self::J<core::double*> {
-  synthetic constructor •() → self::M2*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     ;
 }
-abstract class _A&M2&M0 = self::M2 with self::M0<core::int*, core::double*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M2&M0*
+class J<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::X%>
+    ;
+}
+abstract class _M0&I&J<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object implements self::I<self::_M0&I&J::X%>, self::J<self::_M0&I&J::Y%> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X%, self::_M0&I&J::Y%>
+    ;
+}
+abstract class M0<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends self::_M0&I&J<self::M0::X%, self::M0::Y%> /*isMixinDeclaration*/  {
+}
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
+    ;
+}
+class M2 extends self::M1 implements self::J<core::double> {
+  synthetic constructor •() → self::M2
+    ;
+}
+abstract class _A&M2&M0 = self::M2 with self::M0<core::int, core::double> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M2&M0
     : super self::M2::•()
     ;
 }
 class A extends self::_A&M2&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.transformed.expect
index 40101bf..17f9f38 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.transformed.expect
@@ -1,81 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class J<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::J<self::J::X*>*
+class J<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object implements self::I<self::_M0&I&J::X*>, self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
+abstract class _M0&I&J<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object implements self::I<self::_M0&I&J::X%>, self::J<self::_M0&I&J::Y%> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X%, self::_M0&I&J::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> /*isMixinDeclaration*/  {
+abstract class M0<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends self::_M0&I&J<self::M0::X%, self::M0::Y%> /*isMixinDeclaration*/  {
 }
-class M1 extends core::Object implements self::I<core::int*> {
-  synthetic constructor •() → self::M1*
+class M1 extends core::Object implements self::I<core::int> {
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M2 extends self::M1 implements self::J<core::double*> {
-  synthetic constructor •() → self::M2*
+class M2 extends self::M1 implements self::J<core::double> {
+  synthetic constructor •() → self::M2
     : super self::M1::•()
     ;
 }
-abstract class _A&M2&M0 extends self::M2 implements self::M0<core::int*, core::double*> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_A&M2&M0*
+abstract class _A&M2&M0 extends self::M2 implements self::M0<core::int, core::double> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_A&M2&M0
     : super self::M2::•()
     ;
 }
 class A extends self::_A&M2&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M2&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart
index 1cecc14..04db533 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class I<X> {}
 
 class M0<T> extends I<List<T>> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.textual_outline.expect
index dab4e5f..dd6e38e 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class I<X> {}
 
 class M0<T> extends I<List<T>> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.textual_outline_modelled.expect
index 4aedd26d..5ca8e99 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends M2<int> with M0 {}
 
 class I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.expect
index f6f01f3..a9334ea 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,43 +9,33 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends self::I<core::List<self::M0::T*>*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends self::I<core::List<self::M0::T%>> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object* = dynamic> extends self::I<core::List<self::M1::T*>*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
+class M1<T extends core::Object? = dynamic> extends self::I<core::List<self::M1::T%>> {
+  synthetic constructor •() → self::M1<self::M1::T%>
     : super self::I::•()
     ;
 }
-class M2<T extends core::Object* = dynamic> extends self::M1<core::Map<self::M2::T*, self::M2::T*>*> {
-  synthetic constructor •() → self::M2<self::M2::T*>*
+class M2<T extends core::Object? = dynamic> extends self::M1<core::Map<self::M2::T%, self::M2::T%>> {
+  synthetic constructor •() → self::M2<self::M2::T%>
     : super self::M1::•()
     ;
 }
-abstract class _A&M2&M0 = self::M2<core::int*> with self::M0<core::Map<core::int*, core::int*>*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M2&M0*
+abstract class _A&M2&M0 = self::M2<core::int> with self::M0<core::Map<core::int, core::int>> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M2&M0
     : super self::M2::•()
     ;
 }
 class A extends self::_A&M2&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M2&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect
index f6f01f3..a9334ea 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,43 +9,33 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends self::I<core::List<self::M0::T*>*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends self::I<core::List<self::M0::T%>> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object* = dynamic> extends self::I<core::List<self::M1::T*>*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
+class M1<T extends core::Object? = dynamic> extends self::I<core::List<self::M1::T%>> {
+  synthetic constructor •() → self::M1<self::M1::T%>
     : super self::I::•()
     ;
 }
-class M2<T extends core::Object* = dynamic> extends self::M1<core::Map<self::M2::T*, self::M2::T*>*> {
-  synthetic constructor •() → self::M2<self::M2::T*>*
+class M2<T extends core::Object? = dynamic> extends self::M1<core::Map<self::M2::T%, self::M2::T%>> {
+  synthetic constructor •() → self::M2<self::M2::T%>
     : super self::M1::•()
     ;
 }
-abstract class _A&M2&M0 = self::M2<core::int*> with self::M0<core::Map<core::int*, core::int*>*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M2&M0*
+abstract class _A&M2&M0 = self::M2<core::int> with self::M0<core::Map<core::int, core::int>> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M2&M0
     : super self::M2::•()
     ;
 }
 class A extends self::_A&M2&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M2&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.outline.expect
index 14be2ee..ac7d6c9 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,39 +9,29 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class M0<T extends core::Object* = dynamic> extends self::I<core::List<self::M0::T*>*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     ;
 }
-class M1<T extends core::Object* = dynamic> extends self::I<core::List<self::M1::T*>*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
+class M0<T extends core::Object? = dynamic> extends self::I<core::List<self::M0::T%>> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     ;
 }
-class M2<T extends core::Object* = dynamic> extends self::M1<core::Map<self::M2::T*, self::M2::T*>*> {
-  synthetic constructor •() → self::M2<self::M2::T*>*
+class M1<T extends core::Object? = dynamic> extends self::I<core::List<self::M1::T%>> {
+  synthetic constructor •() → self::M1<self::M1::T%>
     ;
 }
-abstract class _A&M2&M0 = self::M2<core::int*> with self::M0<core::Map<core::int*, core::int*>*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M2&M0*
+class M2<T extends core::Object? = dynamic> extends self::M1<core::Map<self::M2::T%, self::M2::T%>> {
+  synthetic constructor •() → self::M2<self::M2::T%>
+    ;
+}
+abstract class _A&M2&M0 = self::M2<core::int> with self::M0<core::Map<core::int, core::int>> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M2&M0
     : super self::M2::•()
     ;
 }
 class A extends self::_A&M2&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.transformed.expect
index 04ba48f..668323b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,43 +9,33 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends self::I<core::List<self::M0::T*>*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends self::I<core::List<self::M0::T%>> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super self::I::•()
     ;
 }
-class M1<T extends core::Object* = dynamic> extends self::I<core::List<self::M1::T*>*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
+class M1<T extends core::Object? = dynamic> extends self::I<core::List<self::M1::T%>> {
+  synthetic constructor •() → self::M1<self::M1::T%>
     : super self::I::•()
     ;
 }
-class M2<T extends core::Object* = dynamic> extends self::M1<core::Map<self::M2::T*, self::M2::T*>*> {
-  synthetic constructor •() → self::M2<self::M2::T*>*
+class M2<T extends core::Object? = dynamic> extends self::M1<core::Map<self::M2::T%, self::M2::T%>> {
+  synthetic constructor •() → self::M2<self::M2::T%>
     : super self::M1::•()
     ;
 }
-abstract class _A&M2&M0 extends self::M2<core::int*> implements self::M0<core::Map<core::int*, core::int*>*> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_A&M2&M0*
+abstract class _A&M2&M0 extends self::M2<core::int> implements self::M0<core::Map<core::int, core::int>> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_A&M2&M0
     : super self::M2::•()
     ;
 }
 class A extends self::_A&M2&M0 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M2&M0::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart
index a81facd..2361d30 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class I<X> {}
 
 class M0<T> extends I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline.expect
index bcb4e4e..ae524b7 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class I<X> {}
 
 class M0<T> extends I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline_modelled.expect
index 09a302b..80e75dc 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends M0<int> with M1 {}
 
 class I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.expect
index 21fbce2..fcb14f9 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.expect
@@ -1,36 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super self::I::•()
     ;
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
-abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M0&M1*
+abstract class _A&M0&M1 = self::M0<core::int> with self::M1<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1
     : super self::M0::•()
     ;
 }
 class A extends self::_A&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M0&M1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect
index 21fbce2..fcb14f9 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect
@@ -1,36 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super self::I::•()
     ;
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
-abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M0&M1*
+abstract class _A&M0&M1 = self::M0<core::int> with self::M1<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1
     : super self::M0::•()
     ;
 }
 class A extends self::_A&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M0&M1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.outline.expect
index 77a51bc..772447a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.outline.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class M0<T extends core::Object* = dynamic> extends self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     ;
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+class M0<T extends core::Object? = dynamic> extends self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
+    ;
 }
-abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M0&M1*
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
+}
+abstract class _A&M0&M1 = self::M0<core::int> with self::M1<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1
     : super self::M0::•()
     ;
 }
 class A extends self::_A&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.transformed.expect
index 6604f0b..281c0f6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.transformed.expect
@@ -1,36 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super self::I::•()
     ;
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
-abstract class _A&M0&M1 extends self::M0<core::int*> implements self::M1<core::int*> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_A&M0&M1*
+abstract class _A&M0&M1 extends self::M0<core::int> implements self::M1<core::int> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1
     : super self::M0::•()
     ;
 }
 class A extends self::_A&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M0&M1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart
index 7f1dff7..23edf99 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class I<X> {}
 
 class M0<T> extends I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline.expect
index 8035659..f4ded90 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class I<X> {}
 
 class M0<T> extends I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline_modelled.expect
index 99cac73..9afd4c1 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends M0<int> with M1, M2 {}
 
 class I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.expect
index ac1a6239..04a03fe 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.expect
@@ -1,43 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super self::I::•()
     ;
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
-abstract class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> /*isMixinDeclaration*/  {
+abstract class M2<T extends core::Object? = dynamic> extends self::I<self::M2::T%> /*isMixinDeclaration*/  {
 }
-abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M0&M1*
+abstract class _A&M0&M1 = self::M0<core::int> with self::M1<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1
     : super self::M0::•()
     ;
 }
-abstract class _A&M0&M1&M2 = self::_A&M0&M1 with self::M2<core::int*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M0&M1&M2*
+abstract class _A&M0&M1&M2 = self::_A&M0&M1 with self::M2<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1&M2
     : super self::_A&M0&M1::•()
     ;
 }
 class A extends self::_A&M0&M1&M2 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M0&M1&M2::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect
index ac1a6239..04a03fe 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect
@@ -1,43 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super self::I::•()
     ;
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
-abstract class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> /*isMixinDeclaration*/  {
+abstract class M2<T extends core::Object? = dynamic> extends self::I<self::M2::T%> /*isMixinDeclaration*/  {
 }
-abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M0&M1*
+abstract class _A&M0&M1 = self::M0<core::int> with self::M1<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1
     : super self::M0::•()
     ;
 }
-abstract class _A&M0&M1&M2 = self::_A&M0&M1 with self::M2<core::int*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M0&M1&M2*
+abstract class _A&M0&M1&M2 = self::_A&M0&M1 with self::M2<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1&M2
     : super self::_A&M0&M1::•()
     ;
 }
 class A extends self::_A&M0&M1&M2 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M0&M1&M2::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.outline.expect
index 6f2e7df..06b3cb5 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.outline.expect
@@ -1,41 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class M0<T extends core::Object* = dynamic> extends self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     ;
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+class M0<T extends core::Object? = dynamic> extends self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
+    ;
 }
-abstract class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
-abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M0&M1*
+abstract class M2<T extends core::Object? = dynamic> extends self::I<self::M2::T%> /*isMixinDeclaration*/  {
+}
+abstract class _A&M0&M1 = self::M0<core::int> with self::M1<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1
     : super self::M0::•()
     ;
 }
-abstract class _A&M0&M1&M2 = self::_A&M0&M1 with self::M2<core::int*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&M0&M1&M2*
+abstract class _A&M0&M1&M2 = self::_A&M0&M1 with self::M2<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1&M2
     : super self::_A&M0&M1::•()
     ;
 }
 class A extends self::_A&M0&M1&M2 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.transformed.expect
index 9516020..fe282e2 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.transformed.expect
@@ -1,43 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super self::I::•()
     ;
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
-abstract class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> /*isMixinDeclaration*/  {
+abstract class M2<T extends core::Object? = dynamic> extends self::I<self::M2::T%> /*isMixinDeclaration*/  {
 }
-abstract class _A&M0&M1 extends self::M0<core::int*> implements self::M1<core::int*> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_A&M0&M1*
+abstract class _A&M0&M1 extends self::M0<core::int> implements self::M1<core::int> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1
     : super self::M0::•()
     ;
 }
-abstract class _A&M0&M1&M2 extends self::_A&M0&M1 implements self::M2<core::int*> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_A&M0&M1&M2*
+abstract class _A&M0&M1&M2 extends self::_A&M0&M1 implements self::M2<core::int> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1&M2
     : super self::_A&M0&M1::•()
     ;
 }
 class A extends self::_A&M0&M1&M2 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&M0&M1&M2::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart
index 2caa544..0e8f9f2 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class I<X> {}
 
 class M0<T> extends Object implements I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline.expect
index e13c203..f771fb9 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class I<X> {}
 
 class M0<T> extends Object implements I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline_modelled.expect
index 9310f10..ec16fbb 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends Object with M0, M1<int> {}
 
 class I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.expect
index d9fbc12..3052ecb 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.expect
@@ -6,7 +6,7 @@
 // class A extends Object with M0, M1<int> {}
 //       ^
 //
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,60 +20,30 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends core::Object implements self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0*
+  const synthetic constructor •() → self::_A&Object&M0
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<core::int*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0&M1*
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M0&M1
     : super self::_A&Object&M0::•()
     ;
 }
 class A extends self::_A&Object&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&Object&M0&M1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect
index d9fbc12..3052ecb 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect
@@ -6,7 +6,7 @@
 // class A extends Object with M0, M1<int> {}
 //       ^
 //
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,60 +20,30 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends core::Object implements self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0*
+  const synthetic constructor •() → self::_A&Object&M0
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<core::int*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0&M1*
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M0&M1
     : super self::_A&Object&M0::•()
     ;
 }
 class A extends self::_A&Object&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&Object&M0&M1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.outline.expect
index 58e02afcb..1bf6e32 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.outline.expect
@@ -6,7 +6,7 @@
 // class A extends Object with M0, M1<int> {}
 //       ^
 //
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,58 +20,28 @@
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends core::Object implements self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0*
+  const synthetic constructor •() → self::_A&Object&M0
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<core::int*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0&M1*
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M0&M1
     : super self::_A&Object&M0::•()
     ;
 }
 class A extends self::_A&Object&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart
index f602be6..850e2ff 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class I<X> {}
 
 class M0<T> extends Object implements I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline.expect
index d8111f8..d76d239 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class I<X> {}
 
 class M0<T> extends Object implements I<T> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline_modelled.expect
index 158c0b7..38cc585 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends Object with M0, M1 implements I<int> {}
 
 class I<X> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.expect
index 39d7387..adf375a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.expect
@@ -6,64 +6,34 @@
 // class A extends Object with M0, M1 implements I<int> {}
 //       ^
 //
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends core::Object implements self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0*
+  const synthetic constructor •() → self::_A&Object&M0
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0&M1*
+  const synthetic constructor •() → self::_A&Object&M0&M1
     : super self::_A&Object&M0::•()
     ;
 }
-class A extends self::_A&Object&M0&M1 implements self::I<core::int*> {
-  synthetic constructor •() → self::A*
+class A extends self::_A&Object&M0&M1 implements self::I<core::int> {
+  synthetic constructor •() → self::A
     : super self::_A&Object&M0&M1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect
index 39d7387..adf375a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect
@@ -6,64 +6,34 @@
 // class A extends Object with M0, M1 implements I<int> {}
 //       ^
 //
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends core::Object implements self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0*
+  const synthetic constructor •() → self::_A&Object&M0
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0&M1*
+  const synthetic constructor •() → self::_A&Object&M0&M1
     : super self::_A&Object&M0::•()
     ;
 }
-class A extends self::_A&Object&M0&M1 implements self::I<core::int*> {
-  synthetic constructor •() → self::A*
+class A extends self::_A&Object&M0&M1 implements self::I<core::int> {
+  synthetic constructor •() → self::A
     : super self::_A&Object&M0&M1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.outline.expect
index af04810..ca26ae3 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.outline.expect
@@ -6,62 +6,32 @@
 // class A extends Object with M0, M1 implements I<int> {}
 //       ^
 //
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*>*
+class I<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends core::Object implements self::I<self::M0::T%> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> /*isMixinDeclaration*/  {
+abstract class M1<T extends core::Object? = dynamic> extends self::I<self::M1::T%> /*isMixinDeclaration*/  {
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0*
+  const synthetic constructor •() → self::_A&Object&M0
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0&M1*
+  const synthetic constructor •() → self::_A&Object&M0&M1
     : super self::_A&Object&M0::•()
     ;
 }
-class A extends self::_A&Object&M0&M1 implements self::I<core::int*> {
-  synthetic constructor •() → self::A*
+class A extends self::_A&Object&M0&M1 implements self::I<core::int> {
+  synthetic constructor •() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart
index 6e942bc..ed6e1be 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class I<X, Y> {}
 
 class M0<T> implements I<T, int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.textual_outline.expect
index f6a48734..18ceb4d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class I<X, Y> {}
 
 class M0<T> implements I<T, int> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.textual_outline_modelled.expect
index ee2ae6f..e3a249c 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends Object with M0, M1 {}
 
 class I<X, Y> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.expect
index 5907e7e..4516281 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.expect
@@ -6,77 +6,37 @@
 // class A extends Object with M0, M1 {}
 //       ^
 //
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*, self::I::Y*>*
+class I<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%, self::I::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*, core::int*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends core::Object implements self::I<self::M0::T%, core::int> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M1<T extends core::Object* = dynamic> extends core::Object implements self::I<core::String*, self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
+class M1<T extends core::Object? = dynamic> extends core::Object implements self::I<core::String, self::M1::T%> {
+  synthetic constructor •() → self::M1<self::M1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0*
+  const synthetic constructor •() → self::_A&Object&M0
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0&M1*
+  const synthetic constructor •() → self::_A&Object&M0&M1
     : super self::_A&Object&M0::•()
     ;
 }
 class A extends self::_A&Object&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&Object&M0&M1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.modular.expect
index 5907e7e..4516281 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.modular.expect
@@ -6,77 +6,37 @@
 // class A extends Object with M0, M1 {}
 //       ^
 //
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*, self::I::Y*>*
+class I<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%, self::I::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*, core::int*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends core::Object implements self::I<self::M0::T%, core::int> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M1<T extends core::Object* = dynamic> extends core::Object implements self::I<core::String*, self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
+class M1<T extends core::Object? = dynamic> extends core::Object implements self::I<core::String, self::M1::T%> {
+  synthetic constructor •() → self::M1<self::M1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0*
+  const synthetic constructor •() → self::_A&Object&M0
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0&M1*
+  const synthetic constructor •() → self::_A&Object&M0&M1
     : super self::_A&Object&M0::•()
     ;
 }
 class A extends self::_A&Object&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&Object&M0&M1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.outline.expect
index 3389df4..e7adb9d 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.outline.expect
@@ -6,74 +6,34 @@
 // class A extends Object with M0, M1 {}
 //       ^
 //
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*, self::I::Y*>*
+class I<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%, self::I::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*, core::int*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends core::Object implements self::I<self::M0::T%, core::int> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M1<T extends core::Object* = dynamic> extends core::Object implements self::I<core::String*, self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
+class M1<T extends core::Object? = dynamic> extends core::Object implements self::I<core::String, self::M1::T%> {
+  synthetic constructor •() → self::M1<self::M1::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0*
+  const synthetic constructor •() → self::_A&Object&M0
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0&M1*
+  const synthetic constructor •() → self::_A&Object&M0&M1
     : super self::_A&Object&M0::•()
     ;
 }
 class A extends self::_A&Object&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart
index 236c7a0..64d4550 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class I<X, Y> {}
 
 class M0<T> implements I<T, List<T>> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.textual_outline.expect
index f2a5b07..875a303 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class I<X, Y> {}
 
 class M0<T> implements I<T, List<T>> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.textual_outline_modelled.expect
index f39edfd..e8a5311 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A extends Object with M0, M1 {}
 
 class I<X, Y> {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.expect
index 41a47e4..b555a74 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.expect
@@ -7,77 +7,37 @@
 // class A extends Object with M0, M1 {}
 //       ^
 //
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*, self::I::Y*>*
+class I<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%, self::I::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*, core::List<self::M0::T*>*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends core::Object implements self::I<self::M0::T%, core::List<self::M0::T%>> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M1<T extends core::Object* = dynamic> extends core::Object implements self::I<core::List<self::M1::T*>*, self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
+class M1<T extends core::Object? = dynamic> extends core::Object implements self::I<core::List<self::M1::T%>, self::M1::T%> {
+  synthetic constructor •() → self::M1<self::M1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0*
+  const synthetic constructor •() → self::_A&Object&M0
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0&M1*
+  const synthetic constructor •() → self::_A&Object&M0&M1
     : super self::_A&Object&M0::•()
     ;
 }
 class A extends self::_A&Object&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&Object&M0&M1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.modular.expect
index 41a47e4..b555a74 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.modular.expect
@@ -7,77 +7,37 @@
 // class A extends Object with M0, M1 {}
 //       ^
 //
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*, self::I::Y*>*
+class I<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%, self::I::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*, core::List<self::M0::T*>*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends core::Object implements self::I<self::M0::T%, core::List<self::M0::T%>> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M1<T extends core::Object* = dynamic> extends core::Object implements self::I<core::List<self::M1::T*>*, self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
+class M1<T extends core::Object? = dynamic> extends core::Object implements self::I<core::List<self::M1::T%>, self::M1::T%> {
+  synthetic constructor •() → self::M1<self::M1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0*
+  const synthetic constructor •() → self::_A&Object&M0
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0&M1*
+  const synthetic constructor •() → self::_A&Object&M0&M1
     : super self::_A&Object&M0::•()
     ;
 }
 class A extends self::_A&Object&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&Object&M0&M1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.outline.expect
index cad67ed..102a3df 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.outline.expect
@@ -7,74 +7,34 @@
 // class A extends Object with M0, M1 {}
 //       ^
 //
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class I<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::X*, self::I::Y*>*
+class I<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X%, self::I::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*, core::List<self::M0::T*>*> {
-  synthetic constructor •() → self::M0<self::M0::T*>*
+class M0<T extends core::Object? = dynamic> extends core::Object implements self::I<self::M0::T%, core::List<self::M0::T%>> {
+  synthetic constructor •() → self::M0<self::M0::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class M1<T extends core::Object* = dynamic> extends core::Object implements self::I<core::List<self::M1::T*>*, self::M1::T*> {
-  synthetic constructor •() → self::M1<self::M1::T*>*
+class M1<T extends core::Object? = dynamic> extends core::Object implements self::I<core::List<self::M1::T%>, self::M1::T%> {
+  synthetic constructor •() → self::M1<self::M1::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0*
+  const synthetic constructor •() → self::_A&Object&M0
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_A&Object&M0&M1*
+  const synthetic constructor •() → self::_A&Object&M0&M1
     : super self::_A&Object&M0::•()
     ;
 }
 class A extends self::_A&Object&M0&M1 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart b/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart
index ddfa0d6..bd4ff21 100644
--- a/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart
+++ b/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart b/pkg/front_end/testcases/inference/non_const_invocation.dart
index d374b76..67bbd09 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart
@@ -1,23 +1,23 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 typedef V F<U, V>(U u);
 
 class Foo<T> {
-  Bar<T> get v1 => new /*@ typeArgs=Foo::T* */ Bar();
-  Bar<List<T>> get v2 => new /*@ typeArgs=List<Foo::T*>* */ Bar();
-  Bar<F<T, T>> get v3 => new /*@ typeArgs=(Foo::T*) ->* Foo::T* */ Bar();
+  Bar<T> get v1 => new /*@typeArgs=Foo::T%*/ Bar();
+  Bar<List<T>> get v2 => new /*@typeArgs=List<Foo::T%>*/ Bar();
+  Bar<F<T, T>> get v3 => new /*@typeArgs=(Foo::T%) -> Foo::T%*/ Bar();
   Bar<F<F<T, T>, T>> get v4 =>
-      new /*@ typeArgs=((Foo::T*) ->* Foo::T*) ->* Foo::T* */ Bar();
-  List<T> get v5 => /*@ typeArgs=Foo::T* */ [];
-  List<F<T, T>> get v6 => /*@ typeArgs=(Foo::T*) ->* Foo::T* */ [];
-  Map<T, T> get v7 => /*@ typeArgs=Foo::T*, Foo::T* */ {};
-  Map<F<T, T>, T> get v8 => /*@ typeArgs=(Foo::T*) ->* Foo::T*, Foo::T* */ {};
-  Map<T, F<T, T>> get v9 => /*@ typeArgs=Foo::T*, (Foo::T*) ->* Foo::T* */ {};
+      new /*@typeArgs=((Foo::T%) -> Foo::T%) -> Foo::T%*/ Bar();
+  List<T> get v5 => /*@typeArgs=Foo::T%*/ [];
+  List<F<T, T>> get v6 => /*@typeArgs=(Foo::T%) -> Foo::T%*/ [];
+  Map<T, T> get v7 => /*@typeArgs=Foo::T%, Foo::T%*/ {};
+  Map<F<T, T>, T> get v8 => /*@typeArgs=(Foo::T%) -> Foo::T%, Foo::T%*/ {};
+  Map<T, F<T, T>> get v9 => /*@typeArgs=Foo::T%, (Foo::T%) -> Foo::T%*/ {};
 }
 
 class Bar<T> {
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.textual_outline.expect
index 41dbc19..a12a138 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef V F<U, V>(U u);
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.textual_outline_modelled.expect
index 10f7f3a..6fb4bb9 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Bar<T> {
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.expect
index 5049806..8032820 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.expect
@@ -1,54 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant U extends core::Object* = dynamic, V extends core::Object* = dynamic> = (U*) →* V*;
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+typedef F<contravariant U extends core::Object? = dynamic, V extends core::Object? = dynamic> = (U%) → V%;
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  get v1() → self::Bar<self::Foo::T*>*
-    return new self::Bar::•<self::Foo::T*>();
-  get v2() → self::Bar<core::List<self::Foo::T*>*>*
-    return new self::Bar::•<core::List<self::Foo::T*>*>();
-  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
-    return new self::Bar::•<(self::Foo::T*) →* self::Foo::T*>();
-  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
-    return new self::Bar::•<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>();
-  get v5() → core::List<self::Foo::T*>*
-    return <self::Foo::T*>[];
-  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
-    return <(self::Foo::T*) →* self::Foo::T*>[];
-  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
-    return <self::Foo::T*, self::Foo::T*>{};
-  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
-    return <(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>{};
-  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
-    return <self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>{};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get v1() → self::Bar<self::Foo::T%>
+    return new self::Bar::•<self::Foo::T%>();
+  get v2() → self::Bar<core::List<self::Foo::T%>>
+    return new self::Bar::•<core::List<self::Foo::T%>>();
+  get v3() → self::Bar<(self::Foo::T%) → self::Foo::T%>
+    return new self::Bar::•<(self::Foo::T%) → self::Foo::T%>();
+  get v4() → self::Bar<((self::Foo::T%) → self::Foo::T%) → self::Foo::T%>
+    return new self::Bar::•<((self::Foo::T%) → self::Foo::T%) → self::Foo::T%>();
+  get v5() → core::List<self::Foo::T%>
+    return <self::Foo::T%>[];
+  get v6() → core::List<(self::Foo::T%) → self::Foo::T%>
+    return <(self::Foo::T%) → self::Foo::T%>[];
+  get v7() → core::Map<self::Foo::T%, self::Foo::T%>
+    return <self::Foo::T%, self::Foo::T%>{};
+  get v8() → core::Map<(self::Foo::T%) → self::Foo::T%, self::Foo::T%>
+    return <(self::Foo::T%) → self::Foo::T%, self::Foo::T%>{};
+  get v9() → core::Map<self::Foo::T%, (self::Foo::T%) → self::Foo::T%>
+    return <self::Foo::T%, (self::Foo::T%) → self::Foo::T%>{};
 }
-class Bar<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Bar<self::Bar::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.modular.expect
index 5049806..8032820 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.modular.expect
@@ -1,54 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant U extends core::Object* = dynamic, V extends core::Object* = dynamic> = (U*) →* V*;
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+typedef F<contravariant U extends core::Object? = dynamic, V extends core::Object? = dynamic> = (U%) → V%;
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  get v1() → self::Bar<self::Foo::T*>*
-    return new self::Bar::•<self::Foo::T*>();
-  get v2() → self::Bar<core::List<self::Foo::T*>*>*
-    return new self::Bar::•<core::List<self::Foo::T*>*>();
-  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
-    return new self::Bar::•<(self::Foo::T*) →* self::Foo::T*>();
-  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
-    return new self::Bar::•<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>();
-  get v5() → core::List<self::Foo::T*>*
-    return <self::Foo::T*>[];
-  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
-    return <(self::Foo::T*) →* self::Foo::T*>[];
-  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
-    return <self::Foo::T*, self::Foo::T*>{};
-  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
-    return <(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>{};
-  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
-    return <self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>{};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get v1() → self::Bar<self::Foo::T%>
+    return new self::Bar::•<self::Foo::T%>();
+  get v2() → self::Bar<core::List<self::Foo::T%>>
+    return new self::Bar::•<core::List<self::Foo::T%>>();
+  get v3() → self::Bar<(self::Foo::T%) → self::Foo::T%>
+    return new self::Bar::•<(self::Foo::T%) → self::Foo::T%>();
+  get v4() → self::Bar<((self::Foo::T%) → self::Foo::T%) → self::Foo::T%>
+    return new self::Bar::•<((self::Foo::T%) → self::Foo::T%) → self::Foo::T%>();
+  get v5() → core::List<self::Foo::T%>
+    return <self::Foo::T%>[];
+  get v6() → core::List<(self::Foo::T%) → self::Foo::T%>
+    return <(self::Foo::T%) → self::Foo::T%>[];
+  get v7() → core::Map<self::Foo::T%, self::Foo::T%>
+    return <self::Foo::T%, self::Foo::T%>{};
+  get v8() → core::Map<(self::Foo::T%) → self::Foo::T%, self::Foo::T%>
+    return <(self::Foo::T%) → self::Foo::T%, self::Foo::T%>{};
+  get v9() → core::Map<self::Foo::T%, (self::Foo::T%) → self::Foo::T%>
+    return <self::Foo::T%, (self::Foo::T%) → self::Foo::T%>{};
 }
-class Bar<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Bar<self::Bar::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.outline.expect
index c39f27b..9654182 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.outline.expect
@@ -1,54 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant U extends core::Object* = dynamic, V extends core::Object* = dynamic> = (U*) →* V*;
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+typedef F<contravariant U extends core::Object? = dynamic, V extends core::Object? = dynamic> = (U%) → V%;
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
     ;
-  get v1() → self::Bar<self::Foo::T*>*
+  get v1() → self::Bar<self::Foo::T%>
     ;
-  get v2() → self::Bar<core::List<self::Foo::T*>*>*
+  get v2() → self::Bar<core::List<self::Foo::T%>>
     ;
-  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
+  get v3() → self::Bar<(self::Foo::T%) → self::Foo::T%>
     ;
-  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
+  get v4() → self::Bar<((self::Foo::T%) → self::Foo::T%) → self::Foo::T%>
     ;
-  get v5() → core::List<self::Foo::T*>*
+  get v5() → core::List<self::Foo::T%>
     ;
-  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
+  get v6() → core::List<(self::Foo::T%) → self::Foo::T%>
     ;
-  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
+  get v7() → core::Map<self::Foo::T%, self::Foo::T%>
     ;
-  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
+  get v8() → core::Map<(self::Foo::T%) → self::Foo::T%, self::Foo::T%>
     ;
-  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
+  get v9() → core::Map<self::Foo::T%, (self::Foo::T%) → self::Foo::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Bar<self::Bar::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.transformed.expect
index 939a1a6..9bf894d 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.transformed.expect
@@ -1,54 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant U extends core::Object* = dynamic, V extends core::Object* = dynamic> = (U*) →* V*;
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+typedef F<contravariant U extends core::Object? = dynamic, V extends core::Object? = dynamic> = (U%) → V%;
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  get v1() → self::Bar<self::Foo::T*>*
-    return new self::Bar::•<self::Foo::T*>();
-  get v2() → self::Bar<core::List<self::Foo::T*>*>*
-    return new self::Bar::•<core::List<self::Foo::T*>*>();
-  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
-    return new self::Bar::•<(self::Foo::T*) →* self::Foo::T*>();
-  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
-    return new self::Bar::•<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>();
-  get v5() → core::List<self::Foo::T*>*
-    return core::_GrowableList::•<self::Foo::T*>(0);
-  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
-    return core::_GrowableList::•<(self::Foo::T*) →* self::Foo::T*>(0);
-  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
-    return <self::Foo::T*, self::Foo::T*>{};
-  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
-    return <(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>{};
-  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
-    return <self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>{};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get v1() → self::Bar<self::Foo::T%>
+    return new self::Bar::•<self::Foo::T%>();
+  get v2() → self::Bar<core::List<self::Foo::T%>>
+    return new self::Bar::•<core::List<self::Foo::T%>>();
+  get v3() → self::Bar<(self::Foo::T%) → self::Foo::T%>
+    return new self::Bar::•<(self::Foo::T%) → self::Foo::T%>();
+  get v4() → self::Bar<((self::Foo::T%) → self::Foo::T%) → self::Foo::T%>
+    return new self::Bar::•<((self::Foo::T%) → self::Foo::T%) → self::Foo::T%>();
+  get v5() → core::List<self::Foo::T%>
+    return core::_GrowableList::•<self::Foo::T%>(0);
+  get v6() → core::List<(self::Foo::T%) → self::Foo::T%>
+    return core::_GrowableList::•<(self::Foo::T%) → self::Foo::T%>(0);
+  get v7() → core::Map<self::Foo::T%, self::Foo::T%>
+    return <self::Foo::T%, self::Foo::T%>{};
+  get v8() → core::Map<(self::Foo::T%) → self::Foo::T%, self::Foo::T%>
+    return <(self::Foo::T%) → self::Foo::T%, self::Foo::T%>{};
+  get v9() → core::Map<self::Foo::T%, (self::Foo::T%) → self::Foo::T%>
+    return <self::Foo::T%, (self::Foo::T%) → self::Foo::T%>{};
 }
-class Bar<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Bar<self::Bar::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart
index 3bbd78a..f8ac0dc 100644
--- a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart
+++ b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.textual_outline.expect
index 8bcaff0..d565888 100644
--- a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.textual_outline_modelled.expect
index 8bcaff0..d565888 100644
--- a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.expect b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.expect
index 8a5e873..f4e1d92 100644
--- a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   get x() → dynamic
     return null;
   set x(dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.modular.expect
index 8a5e873..f4e1d92 100644
--- a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   get x() → dynamic
     return null;
   set x(dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.outline.expect
index 5170404..1fd30a8 100644
--- a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   get x() → dynamic
     ;
   set x(dynamic value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.transformed.expect
index 8a5e873..f4e1d92 100644
--- a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   get x() → dynamic
     return null;
   set x(dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart
index 2d019d6..5f0590a 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart
@@ -1,17 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  int f() => null;
+  int f() => throw '';
 }
 
-g(C c) {
-  var /*@ type=int* */ x = /*@ type=C* */ c?. /*@target=C.f*/ f();
-  /*@ type=C* */ c?. /*@target=C.f*/ f();
+g(C? c) {
+  var /*@type=int?*/ x = /*@type=C?*/ /*@promotedType=C*/ c
+      ?. /*@target=C.f*/ f();
+  /*@type=C?*/ /*@promotedType=C*/ c?. /*@target=C.f*/ f();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.textual_outline.expect
index 03e6dc9..c88912e 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class C {
-  int f() => null;
+  int f() => throw '';
 }
 
-g(C c) {}
+g(C? c) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.textual_outline_modelled.expect
index 03e6dc9..c88912e 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class C {
-  int f() => null;
+  int f() => throw '';
 }
 
-g(C c) {}
+g(C? c) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.expect b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.expect
index cbf7329..a0d1fb2 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f() → core::int*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f() → core::int
+    return throw "";
 }
-static method g(self::C* c) → dynamic {
-  core::int* x = let final self::C* #t1 = c in #t1 == null ?{core::int*} null : #t1.{self::C::f}(){() →* core::int*};
-  let final self::C* #t2 = c in #t2 == null ?{core::int*} null : #t2.{self::C::f}(){() →* core::int*};
+static method g(self::C? c) → dynamic {
+  core::int? x = let final self::C? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::C}.{self::C::f}(){() → core::int};
+  let final self::C? #t2 = c in #t2 == null ?{core::int?} null : #t2{self::C}.{self::C::f}(){() → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.modular.expect
index cbf7329..a0d1fb2 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f() → core::int*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f() → core::int
+    return throw "";
 }
-static method g(self::C* c) → dynamic {
-  core::int* x = let final self::C* #t1 = c in #t1 == null ?{core::int*} null : #t1.{self::C::f}(){() →* core::int*};
-  let final self::C* #t2 = c in #t2 == null ?{core::int*} null : #t2.{self::C::f}(){() →* core::int*};
+static method g(self::C? c) → dynamic {
+  core::int? x = let final self::C? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::C}.{self::C::f}(){() → core::int};
+  let final self::C? #t2 = c in #t2 == null ?{core::int?} null : #t2{self::C}.{self::C::f}(){() → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.outline.expect
index 362ce50..0b0291f 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f() → core::int*
+  method f() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method g(self::C* c) → dynamic
+static method g(self::C? c) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.transformed.expect
index cbf7329..a0d1fb2 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f() → core::int*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f() → core::int
+    return throw "";
 }
-static method g(self::C* c) → dynamic {
-  core::int* x = let final self::C* #t1 = c in #t1 == null ?{core::int*} null : #t1.{self::C::f}(){() →* core::int*};
-  let final self::C* #t2 = c in #t2 == null ?{core::int*} null : #t2.{self::C::f}(){() →* core::int*};
+static method g(self::C? c) → dynamic {
+  core::int? x = let final self::C? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::C}.{self::C::f}(){() → core::int};
+  let final self::C? #t2 = c in #t2 == null ?{core::int?} null : #t2{self::C}.{self::C::f}(){() → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart b/pkg/front_end/testcases/inference/null_aware_property_get.dart
index 3d2edef..79e1255 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart
@@ -1,17 +1,17 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  int x;
+  int x = 0;
 }
 
-void f(C c) {
-  var /*@ type=int* */ x = /*@ type=C* */ c?. /*@target=C.x*/ x;
-  /*@ type=C* */ c?. /*@target=C.x*/ x;
+void f(C? c) {
+  var /*@type=int?*/ x = /*@type=C?*/ /*@promotedType=C*/ c?. /*@target=C.x*/ x;
+  /*@type=C?*/ /*@promotedType=C*/ c?. /*@target=C.x*/ x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart.textual_outline.expect b/pkg/front_end/testcases/inference/null_aware_property_get.dart.textual_outline.expect
index 2571154..cb1438a 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class C {
-  int x;
+  int x = 0;
 }
 
-void f(C c) {}
+void f(C? c) {}
 main() {}
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/null_aware_property_get.dart.textual_outline_modelled.expect
index c85f391..8864413 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 class C {
-  int x;
+  int x = 0;
 }
 
 main() {}
-void f(C c) {}
+void f(C? c) {}
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.expect b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.expect
index b8c3acb..4fb550b 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int x = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f(self::C* c) → void {
-  core::int* x = let final self::C* #t1 = c in #t1 == null ?{core::int*} null : #t1.{self::C::x}{core::int*};
-  let final self::C* #t2 = c in #t2 == null ?{core::int*} null : #t2.{self::C::x}{core::int*};
+static method f(self::C? c) → void {
+  core::int? x = let final self::C? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::C}.{self::C::x}{core::int};
+  let final self::C? #t2 = c in #t2 == null ?{core::int?} null : #t2{self::C}.{self::C::x}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.modular.expect b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.modular.expect
index b8c3acb..4fb550b 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int x = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f(self::C* c) → void {
-  core::int* x = let final self::C* #t1 = c in #t1 == null ?{core::int*} null : #t1.{self::C::x}{core::int*};
-  let final self::C* #t2 = c in #t2 == null ?{core::int*} null : #t2.{self::C::x}{core::int*};
+static method f(self::C? c) → void {
+  core::int? x = let final self::C? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::C}.{self::C::x}{core::int};
+  let final self::C? #t2 = c in #t2 == null ?{core::int?} null : #t2{self::C}.{self::C::x}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.outline.expect b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.outline.expect
index cadee5c..5b3e2bc 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::C*
+  field core::int x;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f(self::C* c) → void
+static method f(self::C? c) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.transformed.expect
index b8c3acb..4fb550b 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::C*
+  field core::int x = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f(self::C* c) → void {
-  core::int* x = let final self::C* #t1 = c in #t1 == null ?{core::int*} null : #t1.{self::C::x}{core::int*};
-  let final self::C* #t2 = c in #t2 == null ?{core::int*} null : #t2.{self::C::x}{core::int*};
+static method f(self::C? c) → void {
+  core::int? x = let final self::C? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::C}.{self::C::x}{core::int};
+  let final self::C? #t2 = c in #t2 == null ?{core::int?} null : #t2{self::C}.{self::C::x}{core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart b/pkg/front_end/testcases/inference/null_coalescing_operator.dart
index 8ce2e52..d7698dd 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator.dart
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart
@@ -1,12 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-main() {
-  List<int> x;
-  var /*@ type=List<int*>* */ y = x ?? /*@ typeArgs=int* */ [];
+test(List<int>? x) {
+  var /*@type=List<int>*/ y = x ?? /*@typeArgs=int*/ [];
   List<int> z = y;
 }
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.textual_outline.expect b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.textual_outline.expect
index 4b71679..a183d6e 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
-main() {}
+test(List<int>? x) {}
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.textual_outline_modelled.expect
index 4b71679..a183d6e 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
-main() {}
+test(List<int>? x) {}
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.expect b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.expect
index 15f12a3..bd2bb55 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.expect
@@ -1,9 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  core::List<core::int*>* x;
-  core::List<core::int*>* y = let final core::List<core::int*>* #t1 = x in #t1 == null ?{core::List<core::int*>*} <core::int*>[] : #t1;
-  core::List<core::int*>* z = y;
+static method test(core::List<core::int>? x) → dynamic {
+  core::List<core::int> y = let final core::List<core::int>? #t1 = x in #t1 == null ?{core::List<core::int>} <core::int>[] : #t1{core::List<core::int>};
+  core::List<core::int> z = y;
 }
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.modular.expect b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.modular.expect
index 15f12a3..bd2bb55 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.modular.expect
@@ -1,9 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  core::List<core::int*>* x;
-  core::List<core::int*>* y = let final core::List<core::int*>* #t1 = x in #t1 == null ?{core::List<core::int*>*} <core::int*>[] : #t1;
-  core::List<core::int*>* z = y;
+static method test(core::List<core::int>? x) → dynamic {
+  core::List<core::int> y = let final core::List<core::int>? #t1 = x in #t1 == null ?{core::List<core::int>} <core::int>[] : #t1{core::List<core::int>};
+  core::List<core::int> z = y;
 }
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.outline.expect b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.outline.expect
index 09dc88c..1ca39e5 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.outline.expect
@@ -1,5 +1,6 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method main() → dynamic
+static method test(core::List<core::int>? x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.transformed.expect
index 7a25cb4..a6e0582 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.transformed.expect
@@ -1,9 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  core::List<core::int*>* x;
-  core::List<core::int*>* y = let final core::List<core::int*>* #t1 = x in #t1 == null ?{core::List<core::int*>*} core::_GrowableList::•<core::int*>(0) : #t1;
-  core::List<core::int*>* z = y;
+static method test(core::List<core::int>? x) → dynamic {
+  core::List<core::int> y = let final core::List<core::int>? #t1 = x in #t1 == null ?{core::List<core::int>} core::_GrowableList::•<core::int>(0) : #t1{core::List<core::int>};
+  core::List<core::int> z = y;
 }
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart
index f84a4e4..2663107 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart
@@ -1,11 +1,10 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-main() {
-  List<int> x;
-  List<num> y = x ?? /*@ typeArgs=num* */ [];
+test(List<int>? x) {
+  List<num> y = x ?? /*@typeArgs=num*/ [];
 }
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.textual_outline.expect
index 4b71679..a183d6e 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
-main() {}
+test(List<int>? x) {}
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.textual_outline_modelled.expect
index 4b71679..a183d6e 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
-main() {}
+test(List<int>? x) {}
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.expect b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.expect
index 33d1268..ead8d88 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.expect
@@ -1,8 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  core::List<core::int*>* x;
-  core::List<core::num*>* y = let final core::List<core::int*>* #t1 = x in #t1 == null ?{core::List<core::num*>*} <core::num*>[] : #t1;
+static method test(core::List<core::int>? x) → dynamic {
+  core::List<core::num> y = let final core::List<core::int>? #t1 = x in #t1 == null ?{core::List<core::num>} <core::num>[] : #t1{core::List<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.modular.expect
index 33d1268..ead8d88 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.modular.expect
@@ -1,8 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  core::List<core::int*>* x;
-  core::List<core::num*>* y = let final core::List<core::int*>* #t1 = x in #t1 == null ?{core::List<core::num*>*} <core::num*>[] : #t1;
+static method test(core::List<core::int>? x) → dynamic {
+  core::List<core::num> y = let final core::List<core::int>? #t1 = x in #t1 == null ?{core::List<core::num>} <core::num>[] : #t1{core::List<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.outline.expect
index 09dc88c..1ca39e5 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.outline.expect
@@ -1,5 +1,6 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method main() → dynamic
+static method test(core::List<core::int>? x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.transformed.expect
index c2e2653..ef4d037 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.transformed.expect
@@ -1,8 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  core::List<core::int*>* x;
-  core::List<core::num*>* y = let final core::List<core::int*>* #t1 = x in #t1 == null ?{core::List<core::num*>*} core::_GrowableList::•<core::num*>(0) : #t1;
+static method test(core::List<core::int>? x) → dynamic {
+  core::List<core::num> y = let final core::List<core::int>? #t1 = x in #t1 == null ?{core::List<core::num>} core::_GrowableList::•<core::num>(0) : #t1{core::List<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart
index 82b6a3a..3235b7a 100644
--- a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,10 +11,10 @@
 void foo(int f(Object _)) {}
 
 test() {
-  var /*@ type=(Object*) ->* Null */ f = /*@ returnType=Null */ (Object x) => null;
+  var /*@type=(Object*) ->* Null*/ f = /*@ returnType=Null */ (Object x) => null;
   String y = /*info:DYNAMIC_CAST*/ f(42);
 
-  f = /*@ returnType=Null */ (/*@ type=Object* */ x) => 'hello';
+  f = /*@ returnType=Null */ (/*@type=Object**/ x) => 'hello';
 
   var /*@ type=dynamic */ g = null;
   g = 'hello';
@@ -21,8 +23,8 @@
   h = 'hello';
   (/*info:DYNAMIC_INVOKE*/ h.foo());
 
-  foo(/*@ returnType=Null */ (/*@ type=Object* */ x) => null);
-  foo(/*@ returnType=Null */ (/*@ type=Object* */ x) =>
+  foo(/*@returnType=Null*/ (/*@type=Object**/ x) => null);
+  foo(/*@returnType=Null*/ (/*@type=Object**/ x) =>
       throw "not implemented");
 }
 
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart
new file mode 100644
index 0000000..74c0961
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart
@@ -0,0 +1,28 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+var h = null;
+void foo(int f(Object _)) {}
+
+test() {
+  var /*@type=(Object) -> Null*/ f = /*@ returnType=Null */ (Object x) => null;
+  String? y = f(42);
+
+  f = /*@ returnType=Null */ (/*@type=Object*/ x) => 'hello';
+
+  var /*@ type=dynamic */ g = null;
+  g = 'hello';
+  (/*info:DYNAMIC_INVOKE*/ g.foo());
+
+  h = 'hello';
+  (/*info:DYNAMIC_INVOKE*/ h.foo());
+
+  foo(/*@returnType=int*/ (/*@type=Object*/ x) => 0);
+  foo(/*@returnType=Never*/ (/*@type=Object*/ x) => throw "not implemented");
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.textual_outline.expect
new file mode 100644
index 0000000..4a1f36a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+library test;
+
+var h = null;
+void foo(int f(Object _)) {}
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1183aa1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+library test;
+
+main() {}
+test() {}
+var h = null;
+void foo(int f(Object _)) {}
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.weak.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.weak.expect
new file mode 100644
index 0000000..6ac9534
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.weak.expect
@@ -0,0 +1,28 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart:15:54: Error: A value of type 'String' can't be returned from a function with return type 'Null'.
+//   f = /*@ returnType=Null */ (/*@type=Object*/ x) => 'hello';
+//                                                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h = null;
+static method foo((core::Object) → core::int f) → void {}
+static method test() → dynamic {
+  (core::Object) → Null f = (core::Object x) → Null => null;
+  core::String? y = f(42){(core::Object) → Null};
+  f = (core::Object x) → Null => invalid-expression "pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart:15:54: Error: A value of type 'String' can't be returned from a function with return type 'Null'.
+  f = /*@ returnType=Null */ (/*@type=Object*/ x) => 'hello';
+                                                     ^" in "hello" as{TypeError,ForNonNullableByDefault} Null;
+  has-declared-initializer dynamic g = null;
+  g = "hello";
+  g{dynamic}.foo();
+  self::h = "hello";
+  self::h{dynamic}.foo();
+  self::foo((core::Object x) → core::int => 0);
+  self::foo((core::Object x) → Never => throw "not implemented");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.weak.modular.expect
new file mode 100644
index 0000000..6ac9534
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart:15:54: Error: A value of type 'String' can't be returned from a function with return type 'Null'.
+//   f = /*@ returnType=Null */ (/*@type=Object*/ x) => 'hello';
+//                                                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h = null;
+static method foo((core::Object) → core::int f) → void {}
+static method test() → dynamic {
+  (core::Object) → Null f = (core::Object x) → Null => null;
+  core::String? y = f(42){(core::Object) → Null};
+  f = (core::Object x) → Null => invalid-expression "pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart:15:54: Error: A value of type 'String' can't be returned from a function with return type 'Null'.
+  f = /*@ returnType=Null */ (/*@type=Object*/ x) => 'hello';
+                                                     ^" in "hello" as{TypeError,ForNonNullableByDefault} Null;
+  has-declared-initializer dynamic g = null;
+  g = "hello";
+  g{dynamic}.foo();
+  self::h = "hello";
+  self::h{dynamic}.foo();
+  self::foo((core::Object x) → core::int => 0);
+  self::foo((core::Object x) → Never => throw "not implemented");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.weak.outline.expect
new file mode 100644
index 0000000..ee8ca0a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.weak.outline.expect
@@ -0,0 +1,11 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h;
+static method foo((core::Object) → core::int f) → void
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.weak.transformed.expect
new file mode 100644
index 0000000..6ac9534
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart.weak.transformed.expect
@@ -0,0 +1,28 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart:15:54: Error: A value of type 'String' can't be returned from a function with return type 'Null'.
+//   f = /*@ returnType=Null */ (/*@type=Object*/ x) => 'hello';
+//                                                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h = null;
+static method foo((core::Object) → core::int f) → void {}
+static method test() → dynamic {
+  (core::Object) → Null f = (core::Object x) → Null => null;
+  core::String? y = f(42){(core::Object) → Null};
+  f = (core::Object x) → Null => invalid-expression "pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom2.dart:15:54: Error: A value of type 'String' can't be returned from a function with return type 'Null'.
+  f = /*@ returnType=Null */ (/*@type=Object*/ x) => 'hello';
+                                                     ^" in "hello" as{TypeError,ForNonNullableByDefault} Null;
+  has-declared-initializer dynamic g = null;
+  g = "hello";
+  g{dynamic}.foo();
+  self::h = "hello";
+  self::h{dynamic}.foo();
+  self::foo((core::Object x) → core::int => 0);
+  self::foo((core::Object x) → Never => throw "not implemented");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/overloaded_int_operators.dart b/pkg/front_end/testcases/inference/overloaded_int_operators.dart
index 2d40297..c61122c 100644
--- a/pkg/front_end/testcases/inference/overloaded_int_operators.dart
+++ b/pkg/front_end/testcases/inference/overloaded_int_operators.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,56 +11,56 @@
   double d = 1.0;
 
   // (double, double) -> double
-  var /*@ type=double* */ ddPlus = d /*@target=double.+*/ + d;
-  var /*@ type=double* */ ddMinus = d /*@target=double.-*/ - d;
-  var /*@ type=double* */ ddTimes = d /*@target=double.**/ * d;
-  var /*@ type=double* */ ddMod = d /*@target=double.%*/ % d;
+  var /*@type=double*/ ddPlus = d /*@target=double.+*/ + d;
+  var /*@type=double*/ ddMinus = d /*@target=double.-*/ - d;
+  var /*@type=double*/ ddTimes = d /*@target=double.**/ * d;
+  var /*@type=double*/ ddMod = d /*@target=double.%*/ % d;
 
   // (double, int) -> double
-  var /*@ type=double* */ diPlus = d /*@target=double.+*/ + i;
-  var /*@ type=double* */ diMinus = d /*@target=double.-*/ - i;
-  var /*@ type=double* */ diTimes = d /*@target=double.**/ * i;
-  var /*@ type=double* */ diMod = d /*@target=double.%*/ % i;
+  var /*@type=double*/ diPlus = d /*@target=double.+*/ + i;
+  var /*@type=double*/ diMinus = d /*@target=double.-*/ - i;
+  var /*@type=double*/ diTimes = d /*@target=double.**/ * i;
+  var /*@type=double*/ diMod = d /*@target=double.%*/ % i;
 
   // (double, num) -> double
-  var /*@ type=double* */ dnPlus = d /*@target=double.+*/ + n;
-  var /*@ type=double* */ dnMinus = d /*@target=double.-*/ - n;
-  var /*@ type=double* */ dnTimes = d /*@target=double.**/ * n;
-  var /*@ type=double* */ dnMod = d /*@target=double.%*/ % n;
+  var /*@type=double*/ dnPlus = d /*@target=double.+*/ + n;
+  var /*@type=double*/ dnMinus = d /*@target=double.-*/ - n;
+  var /*@type=double*/ dnTimes = d /*@target=double.**/ * n;
+  var /*@type=double*/ dnMod = d /*@target=double.%*/ % n;
 
   // (int, double) -> double
-  var /*@ type=double* */ idPlus = i /*@target=num.+*/ + d;
-  var /*@ type=double* */ idMinus = i /*@target=num.-*/ - d;
-  var /*@ type=double* */ idTimes = i /*@target=num.**/ * d;
-  var /*@ type=double* */ idMod = i /*@target=num.%*/ % d;
+  var /*@type=double*/ idPlus = i /*@target=num.+*/ + d;
+  var /*@type=double*/ idMinus = i /*@target=num.-*/ - d;
+  var /*@type=double*/ idTimes = i /*@target=num.**/ * d;
+  var /*@type=double*/ idMod = i /*@target=num.%*/ % d;
 
   // (int, int) -> int
-  var /*@ type=int* */ iiPlus = i /*@target=num.+*/ + i;
-  var /*@ type=int* */ iiMinus = i /*@target=num.-*/ - i;
-  var /*@ type=int* */ iiTimes = i /*@target=num.**/ * i;
-  var /*@ type=int* */ iiMod = i /*@target=num.%*/ % i;
+  var /*@type=int*/ iiPlus = i /*@target=num.+*/ + i;
+  var /*@type=int*/ iiMinus = i /*@target=num.-*/ - i;
+  var /*@type=int*/ iiTimes = i /*@target=num.**/ * i;
+  var /*@type=int*/ iiMod = i /*@target=num.%*/ % i;
 
   // (int, num) -> num
-  var /*@ type=num* */ inPlus = i /*@target=num.+*/ + n;
-  var /*@ type=num* */ inMinus = i /*@target=num.-*/ - n;
-  var /*@ type=num* */ inTimes = i /*@target=num.**/ * n;
-  var /*@ type=num* */ inMod = i /*@target=num.%*/ % n;
+  var /*@type=num*/ inPlus = i /*@target=num.+*/ + n;
+  var /*@type=num*/ inMinus = i /*@target=num.-*/ - n;
+  var /*@type=num*/ inTimes = i /*@target=num.**/ * n;
+  var /*@type=num*/ inMod = i /*@target=num.%*/ % n;
 
   // (num, double) -> num
-  var /*@ type=num* */ ndPlus = n /*@target=num.+*/ + d;
-  var /*@ type=num* */ ndMinus = n /*@target=num.-*/ - d;
-  var /*@ type=num* */ ndTimes = n /*@target=num.**/ * d;
-  var /*@ type=num* */ ndMod = n /*@target=num.%*/ % d;
+  var /*@type=double*/ ndPlus = n /*@target=num.+*/ + d;
+  var /*@type=double*/ ndMinus = n /*@target=num.-*/ - d;
+  var /*@type=double*/ ndTimes = n /*@target=num.**/ * d;
+  var /*@type=double*/ ndMod = n /*@target=num.%*/ % d;
 
   // (num, int) -> num
-  var /*@ type=num* */ niPlus = n /*@target=num.+*/ + i;
-  var /*@ type=num* */ niMinus = n /*@target=num.-*/ - i;
-  var /*@ type=num* */ niTimes = n /*@target=num.**/ * i;
-  var /*@ type=num* */ niMod = n /*@target=num.%*/ % i;
+  var /*@type=num*/ niPlus = n /*@target=num.+*/ + i;
+  var /*@type=num*/ niMinus = n /*@target=num.-*/ - i;
+  var /*@type=num*/ niTimes = n /*@target=num.**/ * i;
+  var /*@type=num*/ niMod = n /*@target=num.%*/ % i;
 
   // (num, num) -> num
-  var /*@ type=num* */ nnPlus = n /*@target=num.+*/ + n;
-  var /*@ type=num* */ nnMinus = n /*@target=num.-*/ - n;
-  var /*@ type=num* */ nnTimes = n /*@target=num.**/ * n;
-  var /*@ type=num* */ nnMod = n /*@target=num.%*/ % n;
+  var /*@type=num*/ nnPlus = n /*@target=num.+*/ + n;
+  var /*@type=num*/ nnMinus = n /*@target=num.-*/ - n;
+  var /*@type=num*/ nnTimes = n /*@target=num.**/ * n;
+  var /*@type=num*/ nnMod = n /*@target=num.%*/ % n;
 }
diff --git a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.textual_outline.expect b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.expect b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.expect
index 09b660d..a7da493 100644
--- a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.expect
@@ -1,45 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = 1;
-  core::int* i = 1;
-  core::double* d = 1.0;
-  core::double* ddPlus = d.{core::double::+}(d){(core::num*) →* core::double*};
-  core::double* ddMinus = d.{core::double::-}(d){(core::num*) →* core::double*};
-  core::double* ddTimes = d.{core::double::*}(d){(core::num*) →* core::double*};
-  core::double* ddMod = d.{core::double::%}(d){(core::num*) →* core::double*};
-  core::double* diPlus = d.{core::double::+}(i){(core::num*) →* core::double*};
-  core::double* diMinus = d.{core::double::-}(i){(core::num*) →* core::double*};
-  core::double* diTimes = d.{core::double::*}(i){(core::num*) →* core::double*};
-  core::double* diMod = d.{core::double::%}(i){(core::num*) →* core::double*};
-  core::double* dnPlus = d.{core::double::+}(n){(core::num*) →* core::double*};
-  core::double* dnMinus = d.{core::double::-}(n){(core::num*) →* core::double*};
-  core::double* dnTimes = d.{core::double::*}(n){(core::num*) →* core::double*};
-  core::double* dnMod = d.{core::double::%}(n){(core::num*) →* core::double*};
-  core::double* idPlus = i.{core::num::+}(d){(core::num*) →* core::double*};
-  core::double* idMinus = i.{core::num::-}(d){(core::num*) →* core::double*};
-  core::double* idTimes = i.{core::num::*}(d){(core::num*) →* core::double*};
-  core::double* idMod = i.{core::num::%}(d){(core::num*) →* core::double*};
-  core::int* iiPlus = i.{core::num::+}(i){(core::num*) →* core::int*};
-  core::int* iiMinus = i.{core::num::-}(i){(core::num*) →* core::int*};
-  core::int* iiTimes = i.{core::num::*}(i){(core::num*) →* core::int*};
-  core::int* iiMod = i.{core::num::%}(i){(core::num*) →* core::int*};
-  core::num* inPlus = i.{core::num::+}(n){(core::num*) →* core::num*};
-  core::num* inMinus = i.{core::num::-}(n){(core::num*) →* core::num*};
-  core::num* inTimes = i.{core::num::*}(n){(core::num*) →* core::num*};
-  core::num* inMod = i.{core::num::%}(n){(core::num*) →* core::num*};
-  core::num* ndPlus = n.{core::num::+}(d){(core::num*) →* core::num*};
-  core::num* ndMinus = n.{core::num::-}(d){(core::num*) →* core::num*};
-  core::num* ndTimes = n.{core::num::*}(d){(core::num*) →* core::num*};
-  core::num* ndMod = n.{core::num::%}(d){(core::num*) →* core::num*};
-  core::num* niPlus = n.{core::num::+}(i){(core::num*) →* core::num*};
-  core::num* niMinus = n.{core::num::-}(i){(core::num*) →* core::num*};
-  core::num* niTimes = n.{core::num::*}(i){(core::num*) →* core::num*};
-  core::num* niMod = n.{core::num::%}(i){(core::num*) →* core::num*};
-  core::num* nnPlus = n.{core::num::+}(n){(core::num*) →* core::num*};
-  core::num* nnMinus = n.{core::num::-}(n){(core::num*) →* core::num*};
-  core::num* nnTimes = n.{core::num::*}(n){(core::num*) →* core::num*};
-  core::num* nnMod = n.{core::num::%}(n){(core::num*) →* core::num*};
+  core::num n = 1;
+  core::int i = 1;
+  core::double d = 1.0;
+  core::double ddPlus = d.{core::double::+}(d){(core::num) → core::double};
+  core::double ddMinus = d.{core::double::-}(d){(core::num) → core::double};
+  core::double ddTimes = d.{core::double::*}(d){(core::num) → core::double};
+  core::double ddMod = d.{core::double::%}(d){(core::num) → core::double};
+  core::double diPlus = d.{core::double::+}(i){(core::num) → core::double};
+  core::double diMinus = d.{core::double::-}(i){(core::num) → core::double};
+  core::double diTimes = d.{core::double::*}(i){(core::num) → core::double};
+  core::double diMod = d.{core::double::%}(i){(core::num) → core::double};
+  core::double dnPlus = d.{core::double::+}(n){(core::num) → core::double};
+  core::double dnMinus = d.{core::double::-}(n){(core::num) → core::double};
+  core::double dnTimes = d.{core::double::*}(n){(core::num) → core::double};
+  core::double dnMod = d.{core::double::%}(n){(core::num) → core::double};
+  core::double idPlus = i.{core::num::+}(d){(core::num) → core::double};
+  core::double idMinus = i.{core::num::-}(d){(core::num) → core::double};
+  core::double idTimes = i.{core::num::*}(d){(core::num) → core::double};
+  core::double idMod = i.{core::num::%}(d){(core::num) → core::double};
+  core::int iiPlus = i.{core::num::+}(i){(core::num) → core::int};
+  core::int iiMinus = i.{core::num::-}(i){(core::num) → core::int};
+  core::int iiTimes = i.{core::num::*}(i){(core::num) → core::int};
+  core::int iiMod = i.{core::num::%}(i){(core::num) → core::int};
+  core::num inPlus = i.{core::num::+}(n){(core::num) → core::num};
+  core::num inMinus = i.{core::num::-}(n){(core::num) → core::num};
+  core::num inTimes = i.{core::num::*}(n){(core::num) → core::num};
+  core::num inMod = i.{core::num::%}(n){(core::num) → core::num};
+  core::double ndPlus = n.{core::num::+}(d){(core::num) → core::double};
+  core::double ndMinus = n.{core::num::-}(d){(core::num) → core::double};
+  core::double ndTimes = n.{core::num::*}(d){(core::num) → core::double};
+  core::double ndMod = n.{core::num::%}(d){(core::num) → core::double};
+  core::num niPlus = n.{core::num::+}(i){(core::num) → core::num};
+  core::num niMinus = n.{core::num::-}(i){(core::num) → core::num};
+  core::num niTimes = n.{core::num::*}(i){(core::num) → core::num};
+  core::num niMod = n.{core::num::%}(i){(core::num) → core::num};
+  core::num nnPlus = n.{core::num::+}(n){(core::num) → core::num};
+  core::num nnMinus = n.{core::num::-}(n){(core::num) → core::num};
+  core::num nnTimes = n.{core::num::*}(n){(core::num) → core::num};
+  core::num nnMod = n.{core::num::%}(n){(core::num) → core::num};
 }
diff --git a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.modular.expect b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.modular.expect
index 09b660d..a7da493 100644
--- a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.modular.expect
@@ -1,45 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = 1;
-  core::int* i = 1;
-  core::double* d = 1.0;
-  core::double* ddPlus = d.{core::double::+}(d){(core::num*) →* core::double*};
-  core::double* ddMinus = d.{core::double::-}(d){(core::num*) →* core::double*};
-  core::double* ddTimes = d.{core::double::*}(d){(core::num*) →* core::double*};
-  core::double* ddMod = d.{core::double::%}(d){(core::num*) →* core::double*};
-  core::double* diPlus = d.{core::double::+}(i){(core::num*) →* core::double*};
-  core::double* diMinus = d.{core::double::-}(i){(core::num*) →* core::double*};
-  core::double* diTimes = d.{core::double::*}(i){(core::num*) →* core::double*};
-  core::double* diMod = d.{core::double::%}(i){(core::num*) →* core::double*};
-  core::double* dnPlus = d.{core::double::+}(n){(core::num*) →* core::double*};
-  core::double* dnMinus = d.{core::double::-}(n){(core::num*) →* core::double*};
-  core::double* dnTimes = d.{core::double::*}(n){(core::num*) →* core::double*};
-  core::double* dnMod = d.{core::double::%}(n){(core::num*) →* core::double*};
-  core::double* idPlus = i.{core::num::+}(d){(core::num*) →* core::double*};
-  core::double* idMinus = i.{core::num::-}(d){(core::num*) →* core::double*};
-  core::double* idTimes = i.{core::num::*}(d){(core::num*) →* core::double*};
-  core::double* idMod = i.{core::num::%}(d){(core::num*) →* core::double*};
-  core::int* iiPlus = i.{core::num::+}(i){(core::num*) →* core::int*};
-  core::int* iiMinus = i.{core::num::-}(i){(core::num*) →* core::int*};
-  core::int* iiTimes = i.{core::num::*}(i){(core::num*) →* core::int*};
-  core::int* iiMod = i.{core::num::%}(i){(core::num*) →* core::int*};
-  core::num* inPlus = i.{core::num::+}(n){(core::num*) →* core::num*};
-  core::num* inMinus = i.{core::num::-}(n){(core::num*) →* core::num*};
-  core::num* inTimes = i.{core::num::*}(n){(core::num*) →* core::num*};
-  core::num* inMod = i.{core::num::%}(n){(core::num*) →* core::num*};
-  core::num* ndPlus = n.{core::num::+}(d){(core::num*) →* core::num*};
-  core::num* ndMinus = n.{core::num::-}(d){(core::num*) →* core::num*};
-  core::num* ndTimes = n.{core::num::*}(d){(core::num*) →* core::num*};
-  core::num* ndMod = n.{core::num::%}(d){(core::num*) →* core::num*};
-  core::num* niPlus = n.{core::num::+}(i){(core::num*) →* core::num*};
-  core::num* niMinus = n.{core::num::-}(i){(core::num*) →* core::num*};
-  core::num* niTimes = n.{core::num::*}(i){(core::num*) →* core::num*};
-  core::num* niMod = n.{core::num::%}(i){(core::num*) →* core::num*};
-  core::num* nnPlus = n.{core::num::+}(n){(core::num*) →* core::num*};
-  core::num* nnMinus = n.{core::num::-}(n){(core::num*) →* core::num*};
-  core::num* nnTimes = n.{core::num::*}(n){(core::num*) →* core::num*};
-  core::num* nnMod = n.{core::num::%}(n){(core::num*) →* core::num*};
+  core::num n = 1;
+  core::int i = 1;
+  core::double d = 1.0;
+  core::double ddPlus = d.{core::double::+}(d){(core::num) → core::double};
+  core::double ddMinus = d.{core::double::-}(d){(core::num) → core::double};
+  core::double ddTimes = d.{core::double::*}(d){(core::num) → core::double};
+  core::double ddMod = d.{core::double::%}(d){(core::num) → core::double};
+  core::double diPlus = d.{core::double::+}(i){(core::num) → core::double};
+  core::double diMinus = d.{core::double::-}(i){(core::num) → core::double};
+  core::double diTimes = d.{core::double::*}(i){(core::num) → core::double};
+  core::double diMod = d.{core::double::%}(i){(core::num) → core::double};
+  core::double dnPlus = d.{core::double::+}(n){(core::num) → core::double};
+  core::double dnMinus = d.{core::double::-}(n){(core::num) → core::double};
+  core::double dnTimes = d.{core::double::*}(n){(core::num) → core::double};
+  core::double dnMod = d.{core::double::%}(n){(core::num) → core::double};
+  core::double idPlus = i.{core::num::+}(d){(core::num) → core::double};
+  core::double idMinus = i.{core::num::-}(d){(core::num) → core::double};
+  core::double idTimes = i.{core::num::*}(d){(core::num) → core::double};
+  core::double idMod = i.{core::num::%}(d){(core::num) → core::double};
+  core::int iiPlus = i.{core::num::+}(i){(core::num) → core::int};
+  core::int iiMinus = i.{core::num::-}(i){(core::num) → core::int};
+  core::int iiTimes = i.{core::num::*}(i){(core::num) → core::int};
+  core::int iiMod = i.{core::num::%}(i){(core::num) → core::int};
+  core::num inPlus = i.{core::num::+}(n){(core::num) → core::num};
+  core::num inMinus = i.{core::num::-}(n){(core::num) → core::num};
+  core::num inTimes = i.{core::num::*}(n){(core::num) → core::num};
+  core::num inMod = i.{core::num::%}(n){(core::num) → core::num};
+  core::double ndPlus = n.{core::num::+}(d){(core::num) → core::double};
+  core::double ndMinus = n.{core::num::-}(d){(core::num) → core::double};
+  core::double ndTimes = n.{core::num::*}(d){(core::num) → core::double};
+  core::double ndMod = n.{core::num::%}(d){(core::num) → core::double};
+  core::num niPlus = n.{core::num::+}(i){(core::num) → core::num};
+  core::num niMinus = n.{core::num::-}(i){(core::num) → core::num};
+  core::num niTimes = n.{core::num::*}(i){(core::num) → core::num};
+  core::num niMod = n.{core::num::%}(i){(core::num) → core::num};
+  core::num nnPlus = n.{core::num::+}(n){(core::num) → core::num};
+  core::num nnMinus = n.{core::num::-}(n){(core::num) → core::num};
+  core::num nnTimes = n.{core::num::*}(n){(core::num) → core::num};
+  core::num nnMod = n.{core::num::%}(n){(core::num) → core::num};
 }
diff --git a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.outline.expect b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.transformed.expect
index 09b660d..a7da493 100644
--- a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.transformed.expect
@@ -1,45 +1,45 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = 1;
-  core::int* i = 1;
-  core::double* d = 1.0;
-  core::double* ddPlus = d.{core::double::+}(d){(core::num*) →* core::double*};
-  core::double* ddMinus = d.{core::double::-}(d){(core::num*) →* core::double*};
-  core::double* ddTimes = d.{core::double::*}(d){(core::num*) →* core::double*};
-  core::double* ddMod = d.{core::double::%}(d){(core::num*) →* core::double*};
-  core::double* diPlus = d.{core::double::+}(i){(core::num*) →* core::double*};
-  core::double* diMinus = d.{core::double::-}(i){(core::num*) →* core::double*};
-  core::double* diTimes = d.{core::double::*}(i){(core::num*) →* core::double*};
-  core::double* diMod = d.{core::double::%}(i){(core::num*) →* core::double*};
-  core::double* dnPlus = d.{core::double::+}(n){(core::num*) →* core::double*};
-  core::double* dnMinus = d.{core::double::-}(n){(core::num*) →* core::double*};
-  core::double* dnTimes = d.{core::double::*}(n){(core::num*) →* core::double*};
-  core::double* dnMod = d.{core::double::%}(n){(core::num*) →* core::double*};
-  core::double* idPlus = i.{core::num::+}(d){(core::num*) →* core::double*};
-  core::double* idMinus = i.{core::num::-}(d){(core::num*) →* core::double*};
-  core::double* idTimes = i.{core::num::*}(d){(core::num*) →* core::double*};
-  core::double* idMod = i.{core::num::%}(d){(core::num*) →* core::double*};
-  core::int* iiPlus = i.{core::num::+}(i){(core::num*) →* core::int*};
-  core::int* iiMinus = i.{core::num::-}(i){(core::num*) →* core::int*};
-  core::int* iiTimes = i.{core::num::*}(i){(core::num*) →* core::int*};
-  core::int* iiMod = i.{core::num::%}(i){(core::num*) →* core::int*};
-  core::num* inPlus = i.{core::num::+}(n){(core::num*) →* core::num*};
-  core::num* inMinus = i.{core::num::-}(n){(core::num*) →* core::num*};
-  core::num* inTimes = i.{core::num::*}(n){(core::num*) →* core::num*};
-  core::num* inMod = i.{core::num::%}(n){(core::num*) →* core::num*};
-  core::num* ndPlus = n.{core::num::+}(d){(core::num*) →* core::num*};
-  core::num* ndMinus = n.{core::num::-}(d){(core::num*) →* core::num*};
-  core::num* ndTimes = n.{core::num::*}(d){(core::num*) →* core::num*};
-  core::num* ndMod = n.{core::num::%}(d){(core::num*) →* core::num*};
-  core::num* niPlus = n.{core::num::+}(i){(core::num*) →* core::num*};
-  core::num* niMinus = n.{core::num::-}(i){(core::num*) →* core::num*};
-  core::num* niTimes = n.{core::num::*}(i){(core::num*) →* core::num*};
-  core::num* niMod = n.{core::num::%}(i){(core::num*) →* core::num*};
-  core::num* nnPlus = n.{core::num::+}(n){(core::num*) →* core::num*};
-  core::num* nnMinus = n.{core::num::-}(n){(core::num*) →* core::num*};
-  core::num* nnTimes = n.{core::num::*}(n){(core::num*) →* core::num*};
-  core::num* nnMod = n.{core::num::%}(n){(core::num*) →* core::num*};
+  core::num n = 1;
+  core::int i = 1;
+  core::double d = 1.0;
+  core::double ddPlus = d.{core::double::+}(d){(core::num) → core::double};
+  core::double ddMinus = d.{core::double::-}(d){(core::num) → core::double};
+  core::double ddTimes = d.{core::double::*}(d){(core::num) → core::double};
+  core::double ddMod = d.{core::double::%}(d){(core::num) → core::double};
+  core::double diPlus = d.{core::double::+}(i){(core::num) → core::double};
+  core::double diMinus = d.{core::double::-}(i){(core::num) → core::double};
+  core::double diTimes = d.{core::double::*}(i){(core::num) → core::double};
+  core::double diMod = d.{core::double::%}(i){(core::num) → core::double};
+  core::double dnPlus = d.{core::double::+}(n){(core::num) → core::double};
+  core::double dnMinus = d.{core::double::-}(n){(core::num) → core::double};
+  core::double dnTimes = d.{core::double::*}(n){(core::num) → core::double};
+  core::double dnMod = d.{core::double::%}(n){(core::num) → core::double};
+  core::double idPlus = i.{core::num::+}(d){(core::num) → core::double};
+  core::double idMinus = i.{core::num::-}(d){(core::num) → core::double};
+  core::double idTimes = i.{core::num::*}(d){(core::num) → core::double};
+  core::double idMod = i.{core::num::%}(d){(core::num) → core::double};
+  core::int iiPlus = i.{core::num::+}(i){(core::num) → core::int};
+  core::int iiMinus = i.{core::num::-}(i){(core::num) → core::int};
+  core::int iiTimes = i.{core::num::*}(i){(core::num) → core::int};
+  core::int iiMod = i.{core::num::%}(i){(core::num) → core::int};
+  core::num inPlus = i.{core::num::+}(n){(core::num) → core::num};
+  core::num inMinus = i.{core::num::-}(n){(core::num) → core::num};
+  core::num inTimes = i.{core::num::*}(n){(core::num) → core::num};
+  core::num inMod = i.{core::num::%}(n){(core::num) → core::num};
+  core::double ndPlus = n.{core::num::+}(d){(core::num) → core::double};
+  core::double ndMinus = n.{core::num::-}(d){(core::num) → core::double};
+  core::double ndTimes = n.{core::num::*}(d){(core::num) → core::double};
+  core::double ndMod = n.{core::num::%}(d){(core::num) → core::double};
+  core::num niPlus = n.{core::num::+}(i){(core::num) → core::num};
+  core::num niMinus = n.{core::num::-}(i){(core::num) → core::num};
+  core::num niTimes = n.{core::num::*}(i){(core::num) → core::num};
+  core::num niMod = n.{core::num::%}(i){(core::num) → core::num};
+  core::num nnPlus = n.{core::num::+}(n){(core::num) → core::num};
+  core::num nnMinus = n.{core::num::-}(n){(core::num) → core::num};
+  core::num nnTimes = n.{core::num::*}(n){(core::num) → core::num};
+  core::num nnMod = n.{core::num::%}(n){(core::num) → core::num};
 }
diff --git a/pkg/front_end/testcases/inference/override_equals.dart b/pkg/front_end/testcases/inference/override_equals.dart
index 527dbf9..25ffadf 100644
--- a/pkg/front_end/testcases/inference/override_equals.dart
+++ b/pkg/front_end/testcases/inference/override_equals.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -12,25 +14,25 @@
 
 class SubNullEquality extends NullEquality {
   void test() {
-    var /*@ type=bool* */ super_equals_self =
+    var /*@type=bool**/ super_equals_self =
         super /*@target=NullEquality.==*/ == this;
-    var /*@ type=bool* */ super_equals_null =
+    var /*@type=bool**/ super_equals_null =
         super /*@target=NullEquality.==*/ == null;
-    var /*@ type=bool* */ super_not_equals_self =
+    var /*@type=bool**/ super_not_equals_self =
         super /*@target=NullEquality.==*/ != this;
-    var /*@ type=bool* */ super_not_equals_null =
+    var /*@type=bool**/ super_not_equals_null =
         super /*@target=NullEquality.==*/ != null;
   }
 }
 
 test() {
   NullEquality n = new NullEquality();
-  var /*@ type=bool* */ equals_self = n /*@target=NullEquality.==*/ == n;
-  var /*@ type=bool* */ equals_null = n  == null;
-  var /*@ type=bool* */ null_equals = null  == n;
-  var /*@ type=bool* */ not_equals_self = n /*@target=NullEquality.==*/ != n;
-  var /*@ type=bool* */ not_equals_null = n  != null;
-  var /*@ type=bool* */ null_not_equals = null  != n;
+  var /*@type=bool**/ equals_self = n /*@target=NullEquality.==*/ == n;
+  var /*@type=bool**/ equals_null = n  == null;
+  var /*@type=bool**/ null_equals = null  == n;
+  var /*@type=bool**/ not_equals_self = n /*@target=NullEquality.==*/ != n;
+  var /*@type=bool**/ not_equals_null = n  != null;
+  var /*@type=bool**/ null_not_equals = null  != n;
 }
 
 main() {
diff --git a/pkg/front_end/testcases/inference/override_equals.dart.weak.outline.expect b/pkg/front_end/testcases/inference/override_equals.dart.weak.outline.expect
index cf84f5e..b0f6144 100644
--- a/pkg/front_end/testcases/inference/override_equals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/override_equals.dart.weak.outline.expect
@@ -31,5 +31,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///override_equals.dart:9:4 -> InstanceConstant(const _Override{})
+Evaluated: StaticGet @ org-dartlang-testcase:///override_equals.dart:11:4 -> InstanceConstant(const _Override{})
 Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart
index e62b139..ebc84b6 100644
--- a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart
+++ b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class A<X> {
   final foo = "bar";
 }
diff --git a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.textual_outline.expect b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.textual_outline.expect
index 8f4f760..60962ed 100644
--- a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X> {
   final foo = "bar";
 }
diff --git a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.textual_outline_modelled.expect
index a3ccc03..dbeb61d 100644
--- a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X> {
   final foo = "bar";
 }
diff --git a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.expect b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.expect
index d9defc4..9f2b2f3 100644
--- a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  final field core::String* foo = "bar";
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  final field core::String foo = "bar";
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<Y extends core::Object* = dynamic> extends self::A<self::B::Y*> {
-  final field core::String* foo;
-  constructor •(core::String* foo) → self::B<self::B::Y*>*
+class B<Y extends core::Object? = dynamic> extends self::A<self::B::Y%> {
+  final field core::String foo;
+  constructor •(core::String foo) → self::B<self::B::Y%>
     : self::B::foo = foo, super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.modular.expect
index d9defc4..9f2b2f3 100644
--- a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  final field core::String* foo = "bar";
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  final field core::String foo = "bar";
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<Y extends core::Object* = dynamic> extends self::A<self::B::Y*> {
-  final field core::String* foo;
-  constructor •(core::String* foo) → self::B<self::B::Y*>*
+class B<Y extends core::Object? = dynamic> extends self::A<self::B::Y%> {
+  final field core::String foo;
+  constructor •(core::String foo) → self::B<self::B::Y%>
     : self::B::foo = foo, super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.outline.expect b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.outline.expect
index 82a92a6..7e1dddf 100644
--- a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  final field core::String* foo;
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  final field core::String foo;
+  synthetic constructor •() → self::A<self::A::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<Y extends core::Object* = dynamic> extends self::A<self::B::Y*> {
-  final field core::String* foo;
-  constructor •(core::String* foo) → self::B<self::B::Y*>*
+class B<Y extends core::Object? = dynamic> extends self::A<self::B::Y%> {
+  final field core::String foo;
+  constructor •(core::String foo) → self::B<self::B::Y%>
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.transformed.expect
index d9defc4..9f2b2f3 100644
--- a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  final field core::String* foo = "bar";
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  final field core::String foo = "bar";
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<Y extends core::Object* = dynamic> extends self::A<self::B::Y*> {
-  final field core::String* foo;
-  constructor •(core::String* foo) → self::B<self::B::Y*>*
+class B<Y extends core::Object? = dynamic> extends self::A<self::B::Y%> {
+  final field core::String foo;
+  constructor •(core::String foo) → self::B<self::B::Y%>
     : self::B::foo = foo, super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart
index 8fb352d..bcc1a18 100644
--- a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart
@@ -1,9 +1,9 @@
 // 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=2.9
+
 abstract class A<X> {
-  void foo({Iterable<X> x});
+  void foo({Iterable<X>? x});
 }
 
 class B<Y> implements A<Y> {
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.textual_outline.expect
index 2d86f4e..241417f 100644
--- a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.textual_outline.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 abstract class A<X> {
-  void foo({Iterable<X> x});
+  void foo({Iterable<X>? x});
 }
 
 class B<Y> implements A<Y> {
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.textual_outline_modelled.expect
index 2d86f4e..241417f 100644
--- a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 abstract class A<X> {
-  void foo({Iterable<X> x});
+  void foo({Iterable<X>? x});
 }
 
 class B<Y> implements A<Y> {
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.expect b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.expect
index 4e88a92..5dfaa36 100644
--- a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.expect
@@ -1,38 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract method foo({covariant-by-class core::Iterable<self::A::X*>* x = #C1}) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo({covariant-by-class core::Iterable<self::A::X%>? x = #C1}) → void;
 }
-class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
-  synthetic constructor •() → self::B<self::B::Y*>*
+class B<Y extends core::Object? = dynamic> extends core::Object implements self::A<self::B::Y%> {
+  synthetic constructor •() → self::B<self::B::Y%>
     : super core::Object::•()
     ;
-  method foo({covariant-by-class core::Iterable<self::B::Y*>* x = #C1}) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo({covariant-by-class core::Iterable<self::B::Y%>? x = #C1}) → void {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.modular.expect
index 4e88a92..5dfaa36 100644
--- a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.modular.expect
@@ -1,38 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract method foo({covariant-by-class core::Iterable<self::A::X*>* x = #C1}) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo({covariant-by-class core::Iterable<self::A::X%>? x = #C1}) → void;
 }
-class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
-  synthetic constructor •() → self::B<self::B::Y*>*
+class B<Y extends core::Object? = dynamic> extends core::Object implements self::A<self::B::Y%> {
+  synthetic constructor •() → self::B<self::B::Y%>
     : super core::Object::•()
     ;
-  method foo({covariant-by-class core::Iterable<self::B::Y*>* x = #C1}) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo({covariant-by-class core::Iterable<self::B::Y%>? x = #C1}) → void {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect
index ad8cba6..c15335c 100644
--- a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect
@@ -1,37 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     ;
-  abstract method foo({covariant-by-class core::Iterable<self::A::X*>* x = null}) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo({covariant-by-class core::Iterable<self::A::X%>? x = null}) → void;
 }
-class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
-  synthetic constructor •() → self::B<self::B::Y*>*
+class B<Y extends core::Object? = dynamic> extends core::Object implements self::A<self::B::Y%> {
+  synthetic constructor •() → self::B<self::B::Y%>
     ;
-  method foo({covariant-by-class core::Iterable<self::B::Y*>* x = null}) → void
+  method foo({covariant-by-class core::Iterable<self::B::Y%>? x = null}) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.transformed.expect
index 4e88a92..5dfaa36 100644
--- a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.transformed.expect
@@ -1,38 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+abstract class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract method foo({covariant-by-class core::Iterable<self::A::X*>* x = #C1}) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo({covariant-by-class core::Iterable<self::A::X%>? x = #C1}) → void;
 }
-class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
-  synthetic constructor •() → self::B<self::B::Y*>*
+class B<Y extends core::Object? = dynamic> extends core::Object implements self::A<self::B::Y%> {
+  synthetic constructor •() → self::B<self::B::Y%>
     : super core::Object::•()
     ;
-  method foo({covariant-by-class core::Iterable<self::B::Y*>* x = #C1}) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo({covariant-by-class core::Iterable<self::B::Y%>? x = #C1}) → void {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart
index 224947f..4d2f8c2 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart
+++ b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart
@@ -1,19 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-void optional_toplevel([List<int> x = /*@ typeArgs=int* */ const []]) {}
+void optional_toplevel([List<int> x = /*@typeArgs=int*/ const []]) {}
 
-void named_toplevel({List<int> x: /*@ typeArgs=int* */ const []}) {}
+void named_toplevel({List<int> x: /*@typeArgs=int*/ const []}) {}
 
 main() {
-  void optional_local([List<int> x = /*@ typeArgs=int* */ const []]) {}
-  void named_local({List<int> x: /*@ typeArgs=int* */ const []}) {}
-  var /*@ type=([List<int*>*]) ->* Null */ optional_closure = /*@ returnType=Null */ (
-      [List<int> x = /*@ typeArgs=int* */ const []]) {};
-  var /*@ type=({x: List<int*>*}) ->* Null */ name_closure = /*@ returnType=Null */ (
-      {List<int> x: /*@ typeArgs=int* */ const []}) {};
+  void optional_local([List<int> x = /*@typeArgs=int*/ const []]) {}
+  void named_local({List<int> x: /*@typeArgs=int*/ const []}) {}
+  var /*@type=([List<int>]) -> Null*/ optional_closure = /*@ returnType=Null */ (
+      [List<int> x = /*@typeArgs=int*/ const []]) {};
+  var /*@type=({x: List<int>}) -> Null*/ name_closure = /*@ returnType=Null */ (
+      {List<int> x: /*@typeArgs=int*/ const []}) {};
 }
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.textual_outline.expect
index 6ef32b7..0f15872d 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void optional_toplevel([List<int> x = const []]) {}
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.textual_outline_modelled.expect
index 8c19d42..88548f3 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.expect
index b20f8c7..5a7148b 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method optional_toplevel([core::List<core::int*>* x = #C1]) → void {}
-static method named_toplevel({core::List<core::int*>* x = #C1}) → void {}
+static method optional_toplevel([core::List<core::int> x = #C1]) → void {}
+static method named_toplevel({core::List<core::int> x = #C1}) → void {}
 static method main() → dynamic {
-  function optional_local([core::List<core::int*>* x = #C1]) → void {}
-  function named_local({core::List<core::int*>* x = #C1}) → void {}
-  ([core::List<core::int*>*]) →* Null optional_closure = ([core::List<core::int*>* x = #C1]) → Null {};
-  ({x: core::List<core::int*>*}) →* Null name_closure = ({core::List<core::int*>* x = #C1}) → Null {};
+  function optional_local([core::List<core::int> x = #C1]) → void {}
+  function named_local({core::List<core::int> x = #C1}) → void {}
+  ([core::List<core::int>]) → Null optional_closure = ([core::List<core::int> x = #C1]) → Null {};
+  ({x: core::List<core::int>}) → Null name_closure = ({core::List<core::int> x = #C1}) → Null {};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.modular.expect
index b20f8c7..5a7148b 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method optional_toplevel([core::List<core::int*>* x = #C1]) → void {}
-static method named_toplevel({core::List<core::int*>* x = #C1}) → void {}
+static method optional_toplevel([core::List<core::int> x = #C1]) → void {}
+static method named_toplevel({core::List<core::int> x = #C1}) → void {}
 static method main() → dynamic {
-  function optional_local([core::List<core::int*>* x = #C1]) → void {}
-  function named_local({core::List<core::int*>* x = #C1}) → void {}
-  ([core::List<core::int*>*]) →* Null optional_closure = ([core::List<core::int*>* x = #C1]) → Null {};
-  ({x: core::List<core::int*>*}) →* Null name_closure = ({core::List<core::int*>* x = #C1}) → Null {};
+  function optional_local([core::List<core::int> x = #C1]) → void {}
+  function named_local({core::List<core::int> x = #C1}) → void {}
+  ([core::List<core::int>]) → Null optional_closure = ([core::List<core::int> x = #C1]) → Null {};
+  ({x: core::List<core::int>}) → Null name_closure = ({core::List<core::int> x = #C1}) → Null {};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.outline.expect
index 719b6e3..5632814 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method optional_toplevel([has-declared-initializer core::List<core::int*>* x]) → void
+static method optional_toplevel([has-declared-initializer core::List<core::int> x]) → void
   ;
-static method named_toplevel({has-declared-initializer core::List<core::int*>* x}) → void
+static method named_toplevel({has-declared-initializer core::List<core::int> x}) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.transformed.expect
index b20f8c7..5a7148b 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method optional_toplevel([core::List<core::int*>* x = #C1]) → void {}
-static method named_toplevel({core::List<core::int*>* x = #C1}) → void {}
+static method optional_toplevel([core::List<core::int> x = #C1]) → void {}
+static method named_toplevel({core::List<core::int> x = #C1}) → void {}
 static method main() → dynamic {
-  function optional_local([core::List<core::int*>* x = #C1]) → void {}
-  function named_local({core::List<core::int*>* x = #C1}) → void {}
-  ([core::List<core::int*>*]) →* Null optional_closure = ([core::List<core::int*>* x = #C1]) → Null {};
-  ({x: core::List<core::int*>*}) →* Null name_closure = ({core::List<core::int*>* x = #C1}) → Null {};
+  function optional_local([core::List<core::int> x = #C1]) → void {}
+  function named_local({core::List<core::int> x = #C1}) → void {}
+  ([core::List<core::int>]) → Null optional_closure = ([core::List<core::int> x = #C1]) → Null {};
+  ({x: core::List<core::int>}) → Null name_closure = ({core::List<core::int> x = #C1}) → Null {};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart
index df73b5c..ee24659 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,25 +10,25 @@
   C.named(void func({T x})) {}
 }
 
-void optional_toplevel([x = /*@ typeArgs=int* */ const [0]]) {}
+void optional_toplevel([x = /*@typeArgs=int*/ const [0]]) {}
 
-void named_toplevel({x: /*@ typeArgs=int* */ const [0]}) {}
+void named_toplevel({x: /*@typeArgs=int*/ const [0]}) {}
 
 main() {
-  void optional_local([/*@ type=dynamic */ x = /*@ typeArgs=int* */ const [0]]) {}
-  void named_local({/*@ type=dynamic */ x: /*@ typeArgs=int* */ const [0]}) {}
-  var /*@ type=C<dynamic>* */ c_optional_toplevel =
+  void optional_local([/*@ type=dynamic */ x = /*@typeArgs=int*/ const [0]]) {}
+  void named_local({/*@ type=dynamic */ x: /*@typeArgs=int*/ const [0]}) {}
+  var /*@type=C<dynamic>*/ c_optional_toplevel =
       new /*@ typeArgs=dynamic */ C.optional(optional_toplevel);
-  var /*@ type=C<dynamic>* */ c_named_toplevel =
+  var /*@type=C<dynamic>*/ c_named_toplevel =
       new /*@ typeArgs=dynamic */ C.named(named_toplevel);
-  var /*@ type=C<dynamic>* */ c_optional_local =
+  var /*@type=C<dynamic>*/ c_optional_local =
       new /*@ typeArgs=dynamic */ C.optional(optional_local);
-  var /*@ type=C<dynamic>* */ c_named_local =
+  var /*@type=C<dynamic>*/ c_named_local =
       new /*@ typeArgs=dynamic */ C.named(named_local);
-  var /*@ type=C<dynamic>* */ c_optional_closure =
-      new /*@ typeArgs=dynamic */ C.optional(/*@ returnType=Null */ (
-          [/*@ type=dynamic */ x = /*@ typeArgs=int* */ const [0]]) {});
-  var /*@ type=C<dynamic>* */ c_named_closure = new /*@ typeArgs=dynamic */ C.named(
-      /*@ returnType=Null */ (
-          {/*@ type=dynamic */ x: /*@ typeArgs=int* */ const [0]}) {});
+  var /*@type=C<Object?>*/ c_optional_closure =
+      new /*@typeArgs=Object?*/ C.optional(/*@returnType=void*/ (
+          [/*@type=Object?*/ x = /*@typeArgs=int*/ const [0]]) {});
+  var /*@type=C<Object?>*/ c_named_closure = new /*@typeArgs=Object?*/ C.named(
+      /*@returnType=void*/ (
+          {/*@type=Object?*/ x: /*@typeArgs=int*/ const [0]}) {});
 }
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.textual_outline.expect
index 1acd773..99ee48d 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.textual_outline_modelled.expect
index 06acc3ee..b07f840 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.expect
index d6fb1da..97cc063 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.expect
@@ -1,34 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor optional(([self::C::T*]) →* void func) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor optional(([self::C::T%]) → void func) → self::C<self::C::T%>
     : super core::Object::•() {}
-  constructor named(({x: self::C::T*}) →* void func) → self::C<self::C::T*>*
+  constructor named(({x: self::C::T%}) → void func) → self::C<self::C::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method optional_toplevel([dynamic x = #C2]) → void {}
 static method named_toplevel({dynamic x = #C2}) → void {}
 static method main() → dynamic {
   function optional_local([dynamic x = #C2]) → void {}
   function named_local({dynamic x = #C2}) → void {}
-  self::C<dynamic>* c_optional_toplevel = new self::C::optional<dynamic>(#C3);
-  self::C<dynamic>* c_named_toplevel = new self::C::named<dynamic>(#C4);
-  self::C<dynamic>* c_optional_local = new self::C::optional<dynamic>(optional_local);
-  self::C<dynamic>* c_named_local = new self::C::named<dynamic>(named_local);
-  self::C<dynamic>* c_optional_closure = new self::C::optional<dynamic>(([dynamic x = #C2]) → Null {});
-  self::C<dynamic>* c_named_closure = new self::C::named<dynamic>(({dynamic x = #C2}) → Null {});
+  self::C<dynamic> c_optional_toplevel = new self::C::optional<dynamic>(#C3);
+  self::C<dynamic> c_named_toplevel = new self::C::named<dynamic>(#C4);
+  self::C<dynamic> c_optional_local = new self::C::optional<dynamic>(optional_local);
+  self::C<dynamic> c_named_local = new self::C::named<dynamic>(named_local);
+  self::C<core::Object?> c_optional_closure = new self::C::optional<core::Object?>(([core::Object? x = #C2]) → void {});
+  self::C<core::Object?> c_named_closure = new self::C::named<core::Object?>(({core::Object? x = #C2}) → void {});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.modular.expect
index d6fb1da..97cc063 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.modular.expect
@@ -1,34 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor optional(([self::C::T*]) →* void func) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor optional(([self::C::T%]) → void func) → self::C<self::C::T%>
     : super core::Object::•() {}
-  constructor named(({x: self::C::T*}) →* void func) → self::C<self::C::T*>*
+  constructor named(({x: self::C::T%}) → void func) → self::C<self::C::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method optional_toplevel([dynamic x = #C2]) → void {}
 static method named_toplevel({dynamic x = #C2}) → void {}
 static method main() → dynamic {
   function optional_local([dynamic x = #C2]) → void {}
   function named_local({dynamic x = #C2}) → void {}
-  self::C<dynamic>* c_optional_toplevel = new self::C::optional<dynamic>(#C3);
-  self::C<dynamic>* c_named_toplevel = new self::C::named<dynamic>(#C4);
-  self::C<dynamic>* c_optional_local = new self::C::optional<dynamic>(optional_local);
-  self::C<dynamic>* c_named_local = new self::C::named<dynamic>(named_local);
-  self::C<dynamic>* c_optional_closure = new self::C::optional<dynamic>(([dynamic x = #C2]) → Null {});
-  self::C<dynamic>* c_named_closure = new self::C::named<dynamic>(({dynamic x = #C2}) → Null {});
+  self::C<dynamic> c_optional_toplevel = new self::C::optional<dynamic>(#C3);
+  self::C<dynamic> c_named_toplevel = new self::C::named<dynamic>(#C4);
+  self::C<dynamic> c_optional_local = new self::C::optional<dynamic>(optional_local);
+  self::C<dynamic> c_named_local = new self::C::named<dynamic>(named_local);
+  self::C<core::Object?> c_optional_closure = new self::C::optional<core::Object?>(([core::Object? x = #C2]) → void {});
+  self::C<core::Object?> c_named_closure = new self::C::named<core::Object?>(({core::Object? x = #C2}) → void {});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.outline.expect
index 1a51e70..1171080 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor optional(([self::C::T*]) →* void func) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor optional(([self::C::T%]) → void func) → self::C<self::C::T%>
     ;
-  constructor named(({x: self::C::T*}) →* void func) → self::C<self::C::T*>*
+  constructor named(({x: self::C::T%}) → void func) → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method optional_toplevel([has-declared-initializer dynamic x]) → void
   ;
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.transformed.expect
index d6fb1da..97cc063 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.transformed.expect
@@ -1,34 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor optional(([self::C::T*]) →* void func) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor optional(([self::C::T%]) → void func) → self::C<self::C::T%>
     : super core::Object::•() {}
-  constructor named(({x: self::C::T*}) →* void func) → self::C<self::C::T*>*
+  constructor named(({x: self::C::T%}) → void func) → self::C<self::C::T%>
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method optional_toplevel([dynamic x = #C2]) → void {}
 static method named_toplevel({dynamic x = #C2}) → void {}
 static method main() → dynamic {
   function optional_local([dynamic x = #C2]) → void {}
   function named_local({dynamic x = #C2}) → void {}
-  self::C<dynamic>* c_optional_toplevel = new self::C::optional<dynamic>(#C3);
-  self::C<dynamic>* c_named_toplevel = new self::C::named<dynamic>(#C4);
-  self::C<dynamic>* c_optional_local = new self::C::optional<dynamic>(optional_local);
-  self::C<dynamic>* c_named_local = new self::C::named<dynamic>(named_local);
-  self::C<dynamic>* c_optional_closure = new self::C::optional<dynamic>(([dynamic x = #C2]) → Null {});
-  self::C<dynamic>* c_named_closure = new self::C::named<dynamic>(({dynamic x = #C2}) → Null {});
+  self::C<dynamic> c_optional_toplevel = new self::C::optional<dynamic>(#C3);
+  self::C<dynamic> c_named_toplevel = new self::C::named<dynamic>(#C4);
+  self::C<dynamic> c_optional_local = new self::C::optional<dynamic>(optional_local);
+  self::C<dynamic> c_named_local = new self::C::named<dynamic>(named_local);
+  self::C<core::Object?> c_optional_closure = new self::C::optional<core::Object?>(([core::Object? x = #C2]) → void {});
+  self::C<core::Object?> c_named_closure = new self::C::named<core::Object?>(({core::Object? x = #C2}) → void {});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart b/pkg/front_end/testcases/inference/promote_bounds.dart
index ebf30d4..4974ce1 100644
--- a/pkg/front_end/testcases/inference/promote_bounds.dart
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -20,7 +22,7 @@
   }
   if (a is C) {
     // Promoted; we can now call bar.
-    /*@ promotedType=f::T* & C* */ a. /*@target=C.bar*/ bar();
+    /*@promotedType=f::T* & C**/ a. /*@target=C.bar*/ bar();
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/promote_from_logical_rhs.dart b/pkg/front_end/testcases/inference/promote_from_logical_rhs.dart
index 542e1fd..37ececd 100644
--- a/pkg/front_end/testcases/inference/promote_from_logical_rhs.dart
+++ b/pkg/front_end/testcases/inference/promote_from_logical_rhs.dart
@@ -1,13 +1,15 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void test(Object a, bool b) {
   if (b && a is int) {
-    print(/*@ promotedType=int* */ a);
+    print(/*@promotedType=int**/ a);
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/promotion_subtype_check.dart b/pkg/front_end/testcases/inference/promotion_subtype_check.dart
index c4283c0..3702cbd 100644
--- a/pkg/front_end/testcases/inference/promotion_subtype_check.dart
+++ b/pkg/front_end/testcases/inference/promotion_subtype_check.dart
@@ -1,15 +1,17 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void f(Object x) {
   if (x is int) {
-    if (/*@ promotedType=int* */ x is String) {
+    if (/*@promotedType=int**/ x is String) {
       // Promotion blocked; String is not a subtype of int.
-      var /*@ type=int* */ y = /*@ promotedType=int* */ x;
+      var /*@type=int**/ y = /*@promotedType=int**/ x;
     }
   }
 }
@@ -17,7 +19,7 @@
 void g(int x) {
   if (x is String) {
     // Promotion blocked; String is not a subtype of int.
-    var /*@ type=int* */ y = x;
+    var /*@type=int**/ y = x;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart
index 82df1a3..830f5f2 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,7 +10,7 @@
 }
 
 main() {
-  var /*@ type=A* */ a = new A();
+  var /*@type=A*/ a = new A();
   A b = a; // doesn't require down cast
   print(a. /*@target=A.x*/ x); // doesn't require dynamic invoke
   print(a. /*@target=A.x*/ x /*@target=num.+*/ +
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.textual_outline.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.textual_outline.expect
index 36cb1e5..99e1514 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.textual_outline_modelled.expect
index 36cb1e5..99e1514 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.expect
index 3e27040..0009f97 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•();
-  self::A* b = a;
-  core::print(a.{self::A::x}{core::int*});
-  core::print(a.{self::A::x}{core::int*}.{core::num::+}(2){(core::num*) →* core::int*});
+  self::A a = new self::A::•();
+  self::A b = a;
+  core::print(a.{self::A::x}{core::int});
+  core::print(a.{self::A::x}{core::int}.{core::num::+}(2){(core::num) → core::int});
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.modular.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.modular.expect
index 3e27040..0009f97 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•();
-  self::A* b = a;
-  core::print(a.{self::A::x}{core::int*});
-  core::print(a.{self::A::x}{core::int*}.{core::num::+}(2){(core::num*) →* core::int*});
+  self::A a = new self::A::•();
+  self::A b = a;
+  core::print(a.{self::A::x}{core::int});
+  core::print(a.{self::A::x}{core::int}.{core::num::+}(2){(core::num) → core::int});
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.outline.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.outline.expect
index affd7cd..4d0ddba 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::A*
+  field core::int x;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.transformed.expect
index 3e27040..0009f97 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•();
-  self::A* b = a;
-  core::print(a.{self::A::x}{core::int*});
-  core::print(a.{self::A::x}{core::int*}.{core::num::+}(2){(core::num*) →* core::int*});
+  self::A a = new self::A::•();
+  self::A b = a;
+  core::print(a.{self::A::x}{core::int});
+  core::print(a.{self::A::x}{core::int}.{core::num::+}(2){(core::num) → core::int});
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart
index fd2c5ab..e9e527f 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.textual_outline.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.textual_outline.expect
index 36cb1e5..99e1514 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.textual_outline_modelled.expect
index 36cb1e5..99e1514 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.expect
index 06148db..037b1ea 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   dynamic a = new self::A::•();
-  self::A* b = a as{TypeError,ForDynamic} self::A*;
+  self::A b = a as{TypeError,ForDynamic,ForNonNullableByDefault} self::A;
   core::print(a{dynamic}.x);
   core::print(a{dynamic}.x{dynamic}.+(2));
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.modular.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.modular.expect
index 06148db..037b1ea 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   dynamic a = new self::A::•();
-  self::A* b = a as{TypeError,ForDynamic} self::A*;
+  self::A b = a as{TypeError,ForDynamic,ForNonNullableByDefault} self::A;
   core::print(a{dynamic}.x);
   core::print(a{dynamic}.x{dynamic}.+(2));
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.outline.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.outline.expect
index affd7cd..4d0ddba 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::A*
+  field core::int x;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.transformed.expect
index 06148db..037b1ea 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   dynamic a = new self::A::•();
-  self::A* b = a as{TypeError,ForDynamic} self::A*;
+  self::A b = a as{TypeError,ForDynamic,ForNonNullableByDefault} self::A;
   core::print(a{dynamic}.x);
   core::print(a{dynamic}.x{dynamic}.+(2));
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart
index e87e17e..46acb1c 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,7 +10,7 @@
 }
 
 test5() {
-  var /*@ type=A* */ a1 = new A();
+  var /*@type=A*/ a1 = new A();
   a1. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ "hi";
 
   A a2 = new A();
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.textual_outline.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.textual_outline.expect
index ebcd777..40b29e6 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.textual_outline_modelled.expect
index 98064a4..6ee5c2f 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.expect
index 81035d4..ede0e3d 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,29 +14,19 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test5() → dynamic {
-  self::A* a1 = new self::A::•();
+  self::A a1 = new self::A::•();
   a1.{self::A::x} = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a1. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                                       ^" in "hi" as{TypeError} core::int*;
-  self::A* a2 = new self::A::•();
+                                                       ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
+  self::A a2 = new self::A::•();
   a2.{self::A::x} = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a2. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                                       ^" in "hi" as{TypeError} core::int*;
+                                                       ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.modular.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.modular.expect
index 81035d4..ede0e3d 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,29 +14,19 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test5() → dynamic {
-  self::A* a1 = new self::A::•();
+  self::A a1 = new self::A::•();
   a1.{self::A::x} = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a1. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                                       ^" in "hi" as{TypeError} core::int*;
-  self::A* a2 = new self::A::•();
+                                                       ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
+  self::A a2 = new self::A::•();
   a2.{self::A::x} = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a2. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                                       ^" in "hi" as{TypeError} core::int*;
+                                                       ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.outline.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.outline.expect
index d580646..076f1a5 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::A*
+  field core::int x;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test5() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.transformed.expect
index 81035d4..ede0e3d 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,29 +14,19 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 2;
-  synthetic constructor •() → self::A*
+  field core::int x = 2;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test5() → dynamic {
-  self::A* a1 = new self::A::•();
+  self::A a1 = new self::A::•();
   a1.{self::A::x} = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a1. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                                       ^" in "hi" as{TypeError} core::int*;
-  self::A* a2 = new self::A::•();
+                                                       ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
+  self::A a2 = new self::A::•();
   a2.{self::A::x} = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   a2. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                                       ^" in "hi" as{TypeError} core::int*;
+                                                       ^" in "hi" as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart
index c0b3b7a..761256f 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -22,7 +22,7 @@
 }
 
 void main() {
-  var /*@ type=D* */ d1 = new D();
+  var /*@type=D*/ d1 = new D();
   print(d1. /*@target=D.c*/ c. /*@target=C.b*/ b. /*@target=B.a*/ a
       . /*@target=A.x*/ x);
 
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.textual_outline.expect
index 34c4748..774ec6d 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.textual_outline_modelled.expect
index 34c4748..774ec6d 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.expect
index 91157a6..89b8b38 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.expect
@@ -1,74 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 42;
-  synthetic constructor •() → self::A*
+  field core::int x = 42;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field self::A* a = new self::A::•();
-  synthetic constructor •() → self::B*
+  field self::A a = new self::A::•();
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::B* b = new self::B::•();
-  synthetic constructor •() → self::C*
+  field self::B b = new self::B::•();
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  field self::C* c = new self::C::•();
-  synthetic constructor •() → self::D*
+  field self::C c = new self::C::•();
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  self::D* d1 = new self::D::•();
-  core::print(d1.{self::D::c}{self::C*}.{self::C::b}{self::B*}.{self::B::a}{self::A*}.{self::A::x}{core::int*});
-  self::D* d2 = new self::D::•();
-  core::print(d2.{self::D::c}{self::C*}.{self::C::b}{self::B*}.{self::B::a}{self::A*}.{self::A::x}{core::int*});
+  self::D d1 = new self::D::•();
+  core::print(d1.{self::D::c}{self::C}.{self::C::b}{self::B}.{self::B::a}{self::A}.{self::A::x}{core::int});
+  self::D d2 = new self::D::•();
+  core::print(d2.{self::D::c}{self::C}.{self::C::b}{self::B}.{self::B::a}{self::A}.{self::A::x}{core::int});
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.modular.expect
index 91157a6..89b8b38 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.modular.expect
@@ -1,74 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 42;
-  synthetic constructor •() → self::A*
+  field core::int x = 42;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field self::A* a = new self::A::•();
-  synthetic constructor •() → self::B*
+  field self::A a = new self::A::•();
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::B* b = new self::B::•();
-  synthetic constructor •() → self::C*
+  field self::B b = new self::B::•();
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  field self::C* c = new self::C::•();
-  synthetic constructor •() → self::D*
+  field self::C c = new self::C::•();
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  self::D* d1 = new self::D::•();
-  core::print(d1.{self::D::c}{self::C*}.{self::C::b}{self::B*}.{self::B::a}{self::A*}.{self::A::x}{core::int*});
-  self::D* d2 = new self::D::•();
-  core::print(d2.{self::D::c}{self::C*}.{self::C::b}{self::B*}.{self::B::a}{self::A*}.{self::A::x}{core::int*});
+  self::D d1 = new self::D::•();
+  core::print(d1.{self::D::c}{self::C}.{self::C::b}{self::B}.{self::B::a}{self::A}.{self::A::x}{core::int});
+  self::D d2 = new self::D::•();
+  core::print(d2.{self::D::c}{self::C}.{self::C::b}{self::B}.{self::B::a}{self::A}.{self::A::x}{core::int});
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.outline.expect
index 26547fa..b1bd458 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.outline.expect
@@ -1,66 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::A*
+  field core::int x;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field self::A* a;
-  synthetic constructor •() → self::B*
+  field self::A a;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::B* b;
-  synthetic constructor •() → self::C*
+  field self::B b;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  field self::C* c;
-  synthetic constructor •() → self::D*
+  field self::C c;
+  synthetic constructor •() → self::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.transformed.expect
index 91157a6..89b8b38 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.transformed.expect
@@ -1,74 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x = 42;
-  synthetic constructor •() → self::A*
+  field core::int x = 42;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field self::A* a = new self::A::•();
-  synthetic constructor •() → self::B*
+  field self::A a = new self::A::•();
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::B* b = new self::B::•();
-  synthetic constructor •() → self::C*
+  field self::B b = new self::B::•();
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  field self::C* c = new self::C::•();
-  synthetic constructor •() → self::D*
+  field self::C c = new self::C::•();
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  self::D* d1 = new self::D::•();
-  core::print(d1.{self::D::c}{self::C*}.{self::C::b}{self::B*}.{self::B::a}{self::A*}.{self::A::x}{core::int*});
-  self::D* d2 = new self::D::•();
-  core::print(d2.{self::D::c}{self::C*}.{self::C::b}{self::B*}.{self::B::a}{self::A*}.{self::A::x}{core::int*});
+  self::D d1 = new self::D::•();
+  core::print(d1.{self::D::c}{self::C}.{self::C::b}{self::B}.{self::B::a}{self::A}.{self::A::x}{core::int});
+  self::D d2 = new self::D::•();
+  core::print(d2.{self::D::c}{self::C}.{self::C::b}{self::B}.{self::B::a}{self::A}.{self::A::x}{core::int});
 }
diff --git a/pkg/front_end/testcases/inference/propagate_variable_get.dart b/pkg/front_end/testcases/inference/propagate_variable_get.dart
index 4f0c207..6765072 100644
--- a/pkg/front_end/testcases/inference/propagate_variable_get.dart
+++ b/pkg/front_end/testcases/inference/propagate_variable_get.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=int* */ a = 0;
-  var /*@ type=int* */ b = a;
+  var /*@type=int*/ a = 0;
+  var /*@type=int*/ b = a;
 }
diff --git a/pkg/front_end/testcases/inference/propagate_variable_get.dart.textual_outline.expect b/pkg/front_end/testcases/inference/propagate_variable_get.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/propagate_variable_get.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/propagate_variable_get.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/propagate_variable_get.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/propagate_variable_get.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/propagate_variable_get.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/propagate_variable_get.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.expect b/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.expect
index ba60f97..10ed85d 100644
--- a/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* a = 0;
-  core::int* b = a;
+  core::int a = 0;
+  core::int b = a;
 }
diff --git a/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.modular.expect b/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.modular.expect
index ba60f97..10ed85d 100644
--- a/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* a = 0;
-  core::int* b = a;
+  core::int a = 0;
+  core::int b = a;
 }
diff --git a/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.outline.expect b/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.transformed.expect
index ba60f97..10ed85d 100644
--- a/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* a = 0;
-  core::int* b = a;
+  core::int a = 0;
+  core::int b = a;
 }
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart b/pkg/front_end/testcases/inference/property_get_toplevel.dart
index f2dcbfd..7a41275 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -13,7 +13,7 @@
 
 C c = new C();
 var function_ref = c. /*@target=C.function*/ function;
-var function_ref_list = /*@ typeArgs=() ->* int* */ [
+var function_ref_list = /*@typeArgs=() -> int*/ [
   c. /*@target=C.function*/ function
 ];
 
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.textual_outline.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.textual_outline.expect
index 8b55787..46d302a 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.textual_outline_modelled.expect
index 26ae364..cb636c41 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 C c = new C();
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.expect
index 4c93980..a22dc68 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* field = 0;
-  synthetic constructor •() → self::C*
+  field core::int field = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get getter() → core::int*
+  get getter() → core::int
     return 0;
-  method function() → core::int*
+  method function() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c = new self::C::•();
-static field () →* core::int* function_ref = self::c.{self::C::function}{() →* core::int*};
-static field core::List<() →* core::int*>* function_ref_list = <() →* core::int*>[self::c.{self::C::function}{() →* core::int*}];
+static field self::C c = new self::C::•();
+static field () → core::int function_ref = self::c.{self::C::function}{() → core::int};
+static field core::List<() → core::int> function_ref_list = <() → core::int>[self::c.{self::C::function}{() → core::int}];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.modular.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.modular.expect
index 4c93980..a22dc68 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* field = 0;
-  synthetic constructor •() → self::C*
+  field core::int field = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get getter() → core::int*
+  get getter() → core::int
     return 0;
-  method function() → core::int*
+  method function() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c = new self::C::•();
-static field () →* core::int* function_ref = self::c.{self::C::function}{() →* core::int*};
-static field core::List<() →* core::int*>* function_ref_list = <() →* core::int*>[self::c.{self::C::function}{() →* core::int*}];
+static field self::C c = new self::C::•();
+static field () → core::int function_ref = self::c.{self::C::function}{() → core::int};
+static field core::List<() → core::int> function_ref_list = <() → core::int>[self::c.{self::C::function}{() → core::int}];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.outline.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.outline.expect
index e6e57bd..c8dd1db 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.outline.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* field;
-  synthetic constructor •() → self::C*
+  field core::int field;
+  synthetic constructor •() → self::C
     ;
-  get getter() → core::int*
+  get getter() → core::int
     ;
-  method function() → core::int*
+  method function() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field () →* core::int* function_ref;
-static field core::List<() →* core::int*>* function_ref_list;
+static field self::C c;
+static field () → core::int function_ref;
+static field core::List<() → core::int> function_ref_list;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.transformed.expect
index eab5b2e..c1d7fe4 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.transformed.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* field = 0;
-  synthetic constructor •() → self::C*
+  field core::int field = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get getter() → core::int*
+  get getter() → core::int
     return 0;
-  method function() → core::int*
+  method function() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c = new self::C::•();
-static field () →* core::int* function_ref = self::c.{self::C::function}{() →* core::int*};
-static field core::List<() →* core::int*>* function_ref_list = core::_GrowableList::_literal1<() →* core::int*>(self::c.{self::C::function}{() →* core::int*});
+static field self::C c = new self::C::•();
+static field () → core::int function_ref = self::c.{self::C::function}{() → core::int};
+static field core::List<() → core::int> function_ref_list = core::_GrowableList::_literal1<() → core::int>(self::c.{self::C::function}{() → core::int});
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_set.dart b/pkg/front_end/testcases/inference/property_set.dart
index d8af34b..4ce5880 100644
--- a/pkg/front_end/testcases/inference/property_set.dart
+++ b/pkg/front_end/testcases/inference/property_set.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -14,34 +16,34 @@
   A<int> a_int = new A<int>();
   A<Object> a_object = new A<Object>();
   A<dynamic> a_dynamic = new A<dynamic>();
-  var /*@ type=List<int*>* */ x_int =
-      a_int. /*@target=A.x*/ x = /*@ typeArgs=int* */ [0];
-  var /*@ type=List<int*>* */ y_int =
-      a_int. /*@target=A.y*/ y = /*@ typeArgs=int* */ [0];
-  var /*@ type=List<Object*>* */ x_object =
-      a_object. /*@target=A.x*/ x = /*@ typeArgs=Object* */ [0];
-  var /*@ type=List<Object*>* */ y_object =
-      a_object. /*@target=A.y*/ y = /*@ typeArgs=Object* */ [0];
-  var /*@ type=List<dynamic>* */ x_dynamic =
+  var /*@type=List<int*>**/ x_int =
+      a_int. /*@target=A.x*/ x = /*@typeArgs=int**/ [0];
+  var /*@type=List<int*>**/ y_int =
+      a_int. /*@target=A.y*/ y = /*@typeArgs=int**/ [0];
+  var /*@type=List<Object*>**/ x_object =
+      a_object. /*@target=A.x*/ x = /*@typeArgs=Object**/ [0];
+  var /*@type=List<Object*>**/ y_object =
+      a_object. /*@target=A.y*/ y = /*@typeArgs=Object**/ [0];
+  var /*@type=List<dynamic>**/ x_dynamic =
       a_dynamic. /*@target=A.x*/ x = /*@ typeArgs=dynamic */ [0];
-  var /*@ type=List<dynamic>* */ y_dynamic =
+  var /*@type=List<dynamic>**/ y_dynamic =
       a_dynamic. /*@target=A.y*/ y = /*@ typeArgs=dynamic */ [0];
-  var /*@ type=List<int*>* */ x_int_explicit = a_int. /*@target=A.x*/ x = <int>[0];
-  var /*@ type=List<int*>* */ y_int_explicit = a_int. /*@target=A.y*/ y = <int>[0];
-  var /*@ type=List<int*>* */ x_object_explicit =
+  var /*@type=List<int*>**/ x_int_explicit = a_int. /*@target=A.x*/ x = <int>[0];
+  var /*@type=List<int*>**/ y_int_explicit = a_int. /*@target=A.y*/ y = <int>[0];
+  var /*@type=List<int*>**/ x_object_explicit =
       a_object. /*@target=A.x*/ x = <int>[0];
-  var /*@ type=List<int*>* */ y_object_explicit =
+  var /*@type=List<int*>**/ y_object_explicit =
       a_object. /*@target=A.y*/ y = <int>[0];
-  var /*@ type=List<int*>* */ x_dynamic_explicit =
+  var /*@type=List<int*>**/ x_dynamic_explicit =
       a_dynamic. /*@target=A.x*/ x = <int>[0];
-  var /*@ type=List<int*>* */ y_dynamic_explicit =
+  var /*@type=List<int*>**/ y_dynamic_explicit =
       a_dynamic. /*@target=A.y*/ y = <int>[0];
-  List<int> x_int_downward = a_int. /*@target=A.x*/ x = /*@ typeArgs=int* */ [0];
-  List<int> y_int_downward = a_int. /*@target=A.y*/ y = /*@ typeArgs=int* */ [0];
+  List<int> x_int_downward = a_int. /*@target=A.x*/ x = /*@typeArgs=int**/ [0];
+  List<int> y_int_downward = a_int. /*@target=A.y*/ y = /*@typeArgs=int**/ [0];
   List<int> x_object_downward =
-      a_object. /*@target=A.x*/ x = /*@ typeArgs=Object* */ [0];
+      a_object. /*@target=A.x*/ x = /*@typeArgs=Object**/ [0];
   List<int> y_object_downward =
-      a_object. /*@target=A.y*/ y = /*@ typeArgs=Object* */ [0];
+      a_object. /*@target=A.y*/ y = /*@typeArgs=Object**/ [0];
   List<int> x_dynamic_downward =
       a_dynamic. /*@target=A.x*/ x = /*@ typeArgs=dynamic */ [0];
   List<int> y_dynamic_downward =
diff --git a/pkg/front_end/testcases/inference/property_set2.dart b/pkg/front_end/testcases/inference/property_set2.dart
new file mode 100644
index 0000000..6a065da
--- /dev/null
+++ b/pkg/front_end/testcases/inference/property_set2.dart
@@ -0,0 +1,43 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A<T> {
+  List<T> x = throw '';
+  void set y(List<T> value) {}
+}
+
+test() {
+  A<int> a_int = new A<int>();
+  A<Object> a_object = new A<Object>();
+  A<dynamic> a_dynamic = new A<dynamic>();
+  var /*@type=List<int>*/ x_int =
+      a_int. /*@target=A.x*/ x = /*@typeArgs=int*/ [0];
+  var /*@type=List<int>*/ y_int =
+      a_int. /*@target=A.y*/ y = /*@typeArgs=int*/ [0];
+  var /*@type=List<Object>*/ x_object =
+      a_object. /*@target=A.x*/ x = /*@typeArgs=Object*/ [0];
+  var /*@type=List<Object>*/ y_object =
+      a_object. /*@target=A.y*/ y = /*@typeArgs=Object*/ [0];
+  var /*@type=List<dynamic>*/ x_dynamic =
+      a_dynamic. /*@target=A.x*/ x = /*@ typeArgs=dynamic */ [0];
+  var /*@type=List<dynamic>*/ y_dynamic =
+      a_dynamic. /*@target=A.y*/ y = /*@ typeArgs=dynamic */ [0];
+  var /*@type=List<int>*/ x_int_explicit = a_int. /*@target=A.x*/ x = <int>[0];
+  var /*@type=List<int>*/ y_int_explicit = a_int. /*@target=A.y*/ y = <int>[0];
+  var /*@type=List<int>*/ x_object_explicit =
+      a_object. /*@target=A.x*/ x = <int>[0];
+  var /*@type=List<int>*/ y_object_explicit =
+      a_object. /*@target=A.y*/ y = <int>[0];
+  var /*@type=List<int>*/ x_dynamic_explicit =
+      a_dynamic. /*@target=A.x*/ x = <int>[0];
+  var /*@type=List<int>*/ y_dynamic_explicit =
+      a_dynamic. /*@target=A.y*/ y = <int>[0];
+  List<int> x_int_downward = a_int. /*@target=A.x*/ x = /*@typeArgs=int*/ [0];
+  List<int> y_int_downward = a_int. /*@target=A.y*/ y = /*@typeArgs=int*/ [0];
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/property_set2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/property_set2.dart.textual_outline.expect
new file mode 100644
index 0000000..dbde52b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/property_set2.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+library test;
+
+class A<T> {
+  List<T> x = throw '';
+  void set y(List<T> value) {}
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/property_set2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/property_set2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bc34eb3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/property_set2.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+library test;
+
+class A<T> {
+  List<T> x = throw '';
+  void set y(List<T> value) {}
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/inference/property_set2.dart.weak.expect b/pkg/front_end/testcases/inference/property_set2.dart.weak.expect
new file mode 100644
index 0000000..660c23e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/property_set2.dart.weak.expect
@@ -0,0 +1,31 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field core::List<self::A::T%> x = throw "";
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  set y(covariant-by-class core::List<self::A::T%> value) → void {}
+}
+static method test() → dynamic {
+  self::A<core::int> a_int = new self::A::•<core::int>();
+  self::A<core::Object> a_object = new self::A::•<core::Object>();
+  self::A<dynamic> a_dynamic = new self::A::•<dynamic>();
+  core::List<core::int> x_int = a_int.{self::A::x} = <core::int>[0];
+  core::List<core::int> y_int = a_int.{self::A::y} = <core::int>[0];
+  core::List<core::Object> x_object = a_object.{self::A::x} = <core::Object>[0];
+  core::List<core::Object> y_object = a_object.{self::A::y} = <core::Object>[0];
+  core::List<dynamic> x_dynamic = a_dynamic.{self::A::x} = <dynamic>[0];
+  core::List<dynamic> y_dynamic = a_dynamic.{self::A::y} = <dynamic>[0];
+  core::List<core::int> x_int_explicit = a_int.{self::A::x} = <core::int>[0];
+  core::List<core::int> y_int_explicit = a_int.{self::A::y} = <core::int>[0];
+  core::List<core::int> x_object_explicit = a_object.{self::A::x} = <core::int>[0];
+  core::List<core::int> y_object_explicit = a_object.{self::A::y} = <core::int>[0];
+  core::List<core::int> x_dynamic_explicit = a_dynamic.{self::A::x} = <core::int>[0];
+  core::List<core::int> y_dynamic_explicit = a_dynamic.{self::A::y} = <core::int>[0];
+  core::List<core::int> x_int_downward = a_int.{self::A::x} = <core::int>[0];
+  core::List<core::int> y_int_downward = a_int.{self::A::y} = <core::int>[0];
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_set2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/property_set2.dart.weak.modular.expect
new file mode 100644
index 0000000..660c23e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/property_set2.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field core::List<self::A::T%> x = throw "";
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  set y(covariant-by-class core::List<self::A::T%> value) → void {}
+}
+static method test() → dynamic {
+  self::A<core::int> a_int = new self::A::•<core::int>();
+  self::A<core::Object> a_object = new self::A::•<core::Object>();
+  self::A<dynamic> a_dynamic = new self::A::•<dynamic>();
+  core::List<core::int> x_int = a_int.{self::A::x} = <core::int>[0];
+  core::List<core::int> y_int = a_int.{self::A::y} = <core::int>[0];
+  core::List<core::Object> x_object = a_object.{self::A::x} = <core::Object>[0];
+  core::List<core::Object> y_object = a_object.{self::A::y} = <core::Object>[0];
+  core::List<dynamic> x_dynamic = a_dynamic.{self::A::x} = <dynamic>[0];
+  core::List<dynamic> y_dynamic = a_dynamic.{self::A::y} = <dynamic>[0];
+  core::List<core::int> x_int_explicit = a_int.{self::A::x} = <core::int>[0];
+  core::List<core::int> y_int_explicit = a_int.{self::A::y} = <core::int>[0];
+  core::List<core::int> x_object_explicit = a_object.{self::A::x} = <core::int>[0];
+  core::List<core::int> y_object_explicit = a_object.{self::A::y} = <core::int>[0];
+  core::List<core::int> x_dynamic_explicit = a_dynamic.{self::A::x} = <core::int>[0];
+  core::List<core::int> y_dynamic_explicit = a_dynamic.{self::A::y} = <core::int>[0];
+  core::List<core::int> x_int_downward = a_int.{self::A::x} = <core::int>[0];
+  core::List<core::int> y_int_downward = a_int.{self::A::y} = <core::int>[0];
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_set2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/property_set2.dart.weak.outline.expect
new file mode 100644
index 0000000..8c0595d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/property_set2.dart.weak.outline.expect
@@ -0,0 +1,15 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field core::List<self::A::T%> x;
+  synthetic constructor •() → self::A<self::A::T%>
+    ;
+  set y(covariant-by-class core::List<self::A::T%> value) → void
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/property_set2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/property_set2.dart.weak.transformed.expect
new file mode 100644
index 0000000..512d3b5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/property_set2.dart.weak.transformed.expect
@@ -0,0 +1,31 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field core::List<self::A::T%> x = throw "";
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  set y(covariant-by-class core::List<self::A::T%> value) → void {}
+}
+static method test() → dynamic {
+  self::A<core::int> a_int = new self::A::•<core::int>();
+  self::A<core::Object> a_object = new self::A::•<core::Object>();
+  self::A<dynamic> a_dynamic = new self::A::•<dynamic>();
+  core::List<core::int> x_int = a_int.{self::A::x} = core::_GrowableList::_literal1<core::int>(0);
+  core::List<core::int> y_int = a_int.{self::A::y} = core::_GrowableList::_literal1<core::int>(0);
+  core::List<core::Object> x_object = a_object.{self::A::x} = core::_GrowableList::_literal1<core::Object>(0);
+  core::List<core::Object> y_object = a_object.{self::A::y} = core::_GrowableList::_literal1<core::Object>(0);
+  core::List<dynamic> x_dynamic = a_dynamic.{self::A::x} = core::_GrowableList::_literal1<dynamic>(0);
+  core::List<dynamic> y_dynamic = a_dynamic.{self::A::y} = core::_GrowableList::_literal1<dynamic>(0);
+  core::List<core::int> x_int_explicit = a_int.{self::A::x} = core::_GrowableList::_literal1<core::int>(0);
+  core::List<core::int> y_int_explicit = a_int.{self::A::y} = core::_GrowableList::_literal1<core::int>(0);
+  core::List<core::int> x_object_explicit = a_object.{self::A::x} = core::_GrowableList::_literal1<core::int>(0);
+  core::List<core::int> y_object_explicit = a_object.{self::A::y} = core::_GrowableList::_literal1<core::int>(0);
+  core::List<core::int> x_dynamic_explicit = a_dynamic.{self::A::x} = core::_GrowableList::_literal1<core::int>(0);
+  core::List<core::int> y_dynamic_explicit = a_dynamic.{self::A::y} = core::_GrowableList::_literal1<core::int>(0);
+  core::List<core::int> x_int_downward = a_int.{self::A::x} = core::_GrowableList::_literal1<core::int>(0);
+  core::List<core::int> y_int_downward = a_int.{self::A::y} = core::_GrowableList::_literal1<core::int>(0);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart b/pkg/front_end/testcases/inference/property_set_bad_setter.dart
index 3075b83..22eb876 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,7 +10,7 @@
 }
 
 void f(A a) {
-  var /*@ type=int* */ x = a. /*@target=A.x*/ x = 0;
+  var /*@type=int*/ x = a. /*@target=A.x*/ x = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.textual_outline.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.textual_outline.expect
index cf3ef2f..6eadbb2 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.textual_outline_modelled.expect
index 29a7b77..3df6a19 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.expect
index 3e05504..515ee5b 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   set x(dynamic #synthetic) → void {
@@ -19,18 +19,8 @@
             ^";
     {}
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f(self::A* a) → void {
-  core::int* x = a.{self::A::x} = 0;
+static method f(self::A a) → void {
+  core::int x = a.{self::A::x} = 0;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.modular.expect
index 3e05504..515ee5b 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   set x(dynamic #synthetic) → void {
@@ -19,18 +19,8 @@
             ^";
     {}
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f(self::A* a) → void {
-  core::int* x = a.{self::A::x} = 0;
+static method f(self::A a) → void {
+  core::int x = a.{self::A::x} = 0;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.outline.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.outline.expect
index 9e79f00..4826b8e 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   set x(dynamic #synthetic) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f(self::A* a) → void
+static method f(self::A a) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.transformed.expect
index 3e05504..515ee5b 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   set x(dynamic #synthetic) → void {
@@ -19,18 +19,8 @@
             ^";
     {}
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f(self::A* a) → void {
-  core::int* x = a.{self::A::x} = 0;
+static method f(self::A a) → void {
+  core::int x = a.{self::A::x} = 0;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart b/pkg/front_end/testcases/inference/recursive_generic_function.dart
index 7d21559..141df10 100644
--- a/pkg/front_end/testcases/inference/recursive_generic_function.dart
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void _mergeSort<T>(
     T Function(T) list, int compare(T a, T b), T Function(T) target) {
-  /*@ typeArgs=_mergeSort::T* */ _mergeSort(list, compare, target);
-  /*@ typeArgs=_mergeSort::T* */ _mergeSort(list, compare, list);
-  /*@ typeArgs=_mergeSort::T* */ _mergeSort(target, compare, target);
-  /*@ typeArgs=_mergeSort::T* */ _mergeSort(target, compare, list);
+  /*@typeArgs=_mergeSort::T%*/ _mergeSort(list, compare, target);
+  /*@typeArgs=_mergeSort::T%*/ _mergeSort(list, compare, list);
+  /*@typeArgs=_mergeSort::T%*/ _mergeSort(target, compare, target);
+  /*@typeArgs=_mergeSort::T%*/ _mergeSort(target, compare, list);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.textual_outline.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.textual_outline.expect
index 8fcc501..f07684b 100644
--- a/pkg/front_end/testcases/inference/recursive_generic_function.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void _mergeSort<T>(
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.textual_outline_modelled.expect
index 0d9a760..0f5ec10 100644
--- a/pkg/front_end/testcases/inference/recursive_generic_function.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.expect
index d617cd4..fbf4644 100644
--- a/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method _mergeSort<T extends core::Object* = dynamic>((self::_mergeSort::T*) →* self::_mergeSort::T* list, (self::_mergeSort::T*, self::_mergeSort::T*) →* core::int* compare, (self::_mergeSort::T*) →* self::_mergeSort::T* target) → void {
-  self::_mergeSort<self::_mergeSort::T*>(list, compare, target);
-  self::_mergeSort<self::_mergeSort::T*>(list, compare, list);
-  self::_mergeSort<self::_mergeSort::T*>(target, compare, target);
-  self::_mergeSort<self::_mergeSort::T*>(target, compare, list);
+static method _mergeSort<T extends core::Object? = dynamic>((self::_mergeSort::T%) → self::_mergeSort::T% list, (self::_mergeSort::T%, self::_mergeSort::T%) → core::int compare, (self::_mergeSort::T%) → self::_mergeSort::T% target) → void {
+  self::_mergeSort<self::_mergeSort::T%>(list, compare, target);
+  self::_mergeSort<self::_mergeSort::T%>(list, compare, list);
+  self::_mergeSort<self::_mergeSort::T%>(target, compare, target);
+  self::_mergeSort<self::_mergeSort::T%>(target, compare, list);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.modular.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.modular.expect
index d617cd4..fbf4644 100644
--- a/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method _mergeSort<T extends core::Object* = dynamic>((self::_mergeSort::T*) →* self::_mergeSort::T* list, (self::_mergeSort::T*, self::_mergeSort::T*) →* core::int* compare, (self::_mergeSort::T*) →* self::_mergeSort::T* target) → void {
-  self::_mergeSort<self::_mergeSort::T*>(list, compare, target);
-  self::_mergeSort<self::_mergeSort::T*>(list, compare, list);
-  self::_mergeSort<self::_mergeSort::T*>(target, compare, target);
-  self::_mergeSort<self::_mergeSort::T*>(target, compare, list);
+static method _mergeSort<T extends core::Object? = dynamic>((self::_mergeSort::T%) → self::_mergeSort::T% list, (self::_mergeSort::T%, self::_mergeSort::T%) → core::int compare, (self::_mergeSort::T%) → self::_mergeSort::T% target) → void {
+  self::_mergeSort<self::_mergeSort::T%>(list, compare, target);
+  self::_mergeSort<self::_mergeSort::T%>(list, compare, list);
+  self::_mergeSort<self::_mergeSort::T%>(target, compare, target);
+  self::_mergeSort<self::_mergeSort::T%>(target, compare, list);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.outline.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.outline.expect
index 57132d9..a3720ab 100644
--- a/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method _mergeSort<T extends core::Object* = dynamic>((self::_mergeSort::T*) →* self::_mergeSort::T* list, (self::_mergeSort::T*, self::_mergeSort::T*) →* core::int* compare, (self::_mergeSort::T*) →* self::_mergeSort::T* target) → void
+static method _mergeSort<T extends core::Object? = dynamic>((self::_mergeSort::T%) → self::_mergeSort::T% list, (self::_mergeSort::T%, self::_mergeSort::T%) → core::int compare, (self::_mergeSort::T%) → self::_mergeSort::T% target) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.transformed.expect
index d617cd4..fbf4644 100644
--- a/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method _mergeSort<T extends core::Object* = dynamic>((self::_mergeSort::T*) →* self::_mergeSort::T* list, (self::_mergeSort::T*, self::_mergeSort::T*) →* core::int* compare, (self::_mergeSort::T*) →* self::_mergeSort::T* target) → void {
-  self::_mergeSort<self::_mergeSort::T*>(list, compare, target);
-  self::_mergeSort<self::_mergeSort::T*>(list, compare, list);
-  self::_mergeSort<self::_mergeSort::T*>(target, compare, target);
-  self::_mergeSort<self::_mergeSort::T*>(target, compare, list);
+static method _mergeSort<T extends core::Object? = dynamic>((self::_mergeSort::T%) → self::_mergeSort::T% list, (self::_mergeSort::T%, self::_mergeSort::T%) → core::int compare, (self::_mergeSort::T%) → self::_mergeSort::T% target) → void {
+  self::_mergeSort<self::_mergeSort::T%>(list, compare, target);
+  self::_mergeSort<self::_mergeSort::T%>(list, compare, list);
+  self::_mergeSort<self::_mergeSort::T%>(target, compare, target);
+  self::_mergeSort<self::_mergeSort::T%>(target, compare, list);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/reference_to_typedef.dart b/pkg/front_end/testcases/inference/reference_to_typedef.dart
index a7f5bce..59ec3b8 100644
--- a/pkg/front_end/testcases/inference/reference_to_typedef.dart
+++ b/pkg/front_end/testcases/inference/reference_to_typedef.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/reference_to_typedef.dart.textual_outline.expect b/pkg/front_end/testcases/inference/reference_to_typedef.dart.textual_outline.expect
index cd84e0a..1868d7f 100644
--- a/pkg/front_end/testcases/inference/reference_to_typedef.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/reference_to_typedef.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef void F();
diff --git a/pkg/front_end/testcases/inference/reference_to_typedef.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/reference_to_typedef.dart.textual_outline_modelled.expect
index e5cc853..808266d 100644
--- a/pkg/front_end/testcases/inference/reference_to_typedef.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/reference_to_typedef.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 final x = F;
diff --git a/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.expect b/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.expect
index 1c7e0ba..fafacad 100644
--- a/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* void;
-static final field core::Type* x = #C1;
+typedef F = () → void;
+static final field core::Type x = #C1;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.modular.expect
index 1c7e0ba..fafacad 100644
--- a/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* void;
-static final field core::Type* x = #C1;
+typedef F = () → void;
+static final field core::Type x = #C1;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.outline.expect b/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.outline.expect
index a1ba81e..84bd88c 100644
--- a/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* void;
-static final field core::Type* x;
+typedef F = () → void;
+static final field core::Type x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.transformed.expect
index 1c7e0ba..fafacad 100644
--- a/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* void;
-static final field core::Type* x = #C1;
+typedef F = () → void;
+static final field core::Type x = #C1;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart
index 7f43a40..5d5d77a 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C<T extends num> {
-  T a;
+  T a = throw '';
 
   void op(double b) {
     double r1 = /*@target=C.a*/ a /*@target=num.+*/ + b;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.textual_outline.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.textual_outline.expect
index 971cc80..370c31a 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C<T extends num> {
-  T a;
+  T a = throw '';
   void op(double b) {}
 }
 
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.textual_outline_modelled.expect
index 971cc80..370c31a 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C<T extends num> {
-  T a;
+  T a = throw '';
   void op(double b) {}
 }
 
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.expect
index a3cae75..60f1a5a 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num*> extends core::Object {
-  covariant-by-class field self::C::T* a = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::num> extends core::Object {
+  covariant-by-class field self::C::T a = throw "";
+  synthetic constructor •() → self::C<self::C::T>
     : super core::Object::•()
     ;
-  method op(core::double* b) → void {
-    core::double* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
-    core::double* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
-    core::double* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
-    core::double* r4 = this.{self::C::a}{self::C::T*}.{core::num::/}(b){(core::num*) →* core::double*};
+  method op(core::double b) → void {
+    core::double r1 = this.{self::C::a}{self::C::T}.{core::num::+}(b){(core::num) → core::double};
+    core::double r2 = this.{self::C::a}{self::C::T}.{core::num::-}(b){(core::num) → core::double};
+    core::double r3 = this.{self::C::a}{self::C::T}.{core::num::*}(b){(core::num) → core::double};
+    core::double r4 = this.{self::C::a}{self::C::T}.{core::num::/}(b){(core::num) → core::double};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.modular.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.modular.expect
index a3cae75..60f1a5a 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num*> extends core::Object {
-  covariant-by-class field self::C::T* a = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::num> extends core::Object {
+  covariant-by-class field self::C::T a = throw "";
+  synthetic constructor •() → self::C<self::C::T>
     : super core::Object::•()
     ;
-  method op(core::double* b) → void {
-    core::double* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
-    core::double* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
-    core::double* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
-    core::double* r4 = this.{self::C::a}{self::C::T*}.{core::num::/}(b){(core::num*) →* core::double*};
+  method op(core::double b) → void {
+    core::double r1 = this.{self::C::a}{self::C::T}.{core::num::+}(b){(core::num) → core::double};
+    core::double r2 = this.{self::C::a}{self::C::T}.{core::num::-}(b){(core::num) → core::double};
+    core::double r3 = this.{self::C::a}{self::C::T}.{core::num::*}(b){(core::num) → core::double};
+    core::double r4 = this.{self::C::a}{self::C::T}.{core::num::/}(b){(core::num) → core::double};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.outline.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.outline.expect
index da27d89..6a812b9 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num*> extends core::Object {
-  covariant-by-class field self::C::T* a;
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::num> extends core::Object {
+  covariant-by-class field self::C::T a;
+  synthetic constructor •() → self::C<self::C::T>
     ;
-  method op(core::double* b) → void
+  method op(core::double b) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.transformed.expect
index a3cae75..60f1a5a 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::num*> extends core::Object {
-  covariant-by-class field self::C::T* a = null;
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::num> extends core::Object {
+  covariant-by-class field self::C::T a = throw "";
+  synthetic constructor •() → self::C<self::C::T>
     : super core::Object::•()
     ;
-  method op(core::double* b) → void {
-    core::double* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
-    core::double* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
-    core::double* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
-    core::double* r4 = this.{self::C::a}{self::C::T*}.{core::num::/}(b){(core::num*) →* core::double*};
+  method op(core::double b) → void {
+    core::double r1 = this.{self::C::a}{self::C::T}.{core::num::+}(b){(core::num) → core::double};
+    core::double r2 = this.{self::C::a}{self::C::T}.{core::num::-}(b){(core::num) → core::double};
+    core::double r3 = this.{self::C::a}{self::C::T}.{core::num::*}(b){(core::num) → core::double};
+    core::double r4 = this.{self::C::a}{self::C::T}.{core::num::/}(b){(core::num) → core::double};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart
index 1aed2a5..b96cac2 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart
index 1254252..ad69ed2 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart b/pkg/front_end/testcases/inference/setter_return_type.dart
index dc08ca3..62c1657 100644
--- a/pkg/front_end/testcases/inference/setter_return_type.dart
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.textual_outline.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.textual_outline.expect
index 595a9b1..9143a0a 100644
--- a/pkg/front_end/testcases/inference/setter_return_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.textual_outline_modelled.expect
index 1ef3897dc..3f4534d 100644
--- a/pkg/front_end/testcases/inference/setter_return_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I {
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.weak.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.weak.expect
index b816e0d..4073f45 100644
--- a/pkg/front_end/testcases/inference/setter_return_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.weak.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int value) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int value) → void {}
 }
 class D extends self::C implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(core::int* value) → void {}
+  set x(core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.weak.modular.expect
index b816e0d..4073f45 100644
--- a/pkg/front_end/testcases/inference/setter_return_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.weak.modular.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int value) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int value) → void {}
 }
 class D extends self::C implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(core::int* value) → void {}
+  set x(core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.weak.outline.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.weak.outline.expect
index a846937..dac680d 100644
--- a/pkg/front_end/testcases/inference/setter_return_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.weak.outline.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  set x(core::int* value) → void
+  set x(core::int value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  set x(core::int* value) → void
+  set x(core::int value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  set x(core::int* value) → void
+  set x(core::int value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.weak.transformed.expect
index b816e0d..4073f45 100644
--- a/pkg/front_end/testcases/inference/setter_return_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.weak.transformed.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int value) → void {}
 }
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  set x(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(core::int value) → void {}
 }
 class D extends self::C implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(core::int* value) → void {}
+  set x(core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/simple_literal_bool.dart b/pkg/front_end/testcases/inference/simple_literal_bool.dart
index 9f2adf0..d1f1a07 100644
--- a/pkg/front_end/testcases/inference/simple_literal_bool.dart
+++ b/pkg/front_end/testcases/inference/simple_literal_bool.dart
@@ -1,12 +1,12 @@
 // 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.md file.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 var a = true;
 
 main() {
-  var /*@ type=bool* */ b = false;
+  var /*@type=bool*/ b = false;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_bool.dart.textual_outline.expect b/pkg/front_end/testcases/inference/simple_literal_bool.dart.textual_outline.expect
index 26a8389..452bced 100644
--- a/pkg/front_end/testcases/inference/simple_literal_bool.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_bool.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var a = true;
diff --git a/pkg/front_end/testcases/inference/simple_literal_bool.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/simple_literal_bool.dart.textual_outline_modelled.expect
index 1983f24..c7a57ef 100644
--- a/pkg/front_end/testcases/inference/simple_literal_bool.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_bool.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.expect b/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.expect
index da6bc88..3142326 100644
--- a/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a = true;
+static field core::bool a = true;
 static method main() → dynamic {
-  core::bool* b = false;
+  core::bool b = false;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.modular.expect b/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.modular.expect
index da6bc88..3142326 100644
--- a/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a = true;
+static field core::bool a = true;
 static method main() → dynamic {
-  core::bool* b = false;
+  core::bool b = false;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.outline.expect b/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.outline.expect
index 7cc78f5..e19ef3e 100644
--- a/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a;
+static field core::bool a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.transformed.expect
index da6bc88..3142326 100644
--- a/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a = true;
+static field core::bool a = true;
 static method main() → dynamic {
-  core::bool* b = false;
+  core::bool b = false;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_double.dart b/pkg/front_end/testcases/inference/simple_literal_double.dart
index 0bd3218..c595708 100644
--- a/pkg/front_end/testcases/inference/simple_literal_double.dart
+++ b/pkg/front_end/testcases/inference/simple_literal_double.dart
@@ -1,12 +1,12 @@
 // 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.md file.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 var a = 1.2;
 
 main() {
-  var /*@ type=double* */ b = 3.4;
+  var /*@type=double*/ b = 3.4;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_double.dart.textual_outline.expect b/pkg/front_end/testcases/inference/simple_literal_double.dart.textual_outline.expect
index 861c194..04971e0 100644
--- a/pkg/front_end/testcases/inference/simple_literal_double.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_double.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var a = 1.2;
diff --git a/pkg/front_end/testcases/inference/simple_literal_double.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/simple_literal_double.dart.textual_outline_modelled.expect
index 81cac4a..cb4b7ad 100644
--- a/pkg/front_end/testcases/inference/simple_literal_double.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_double.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.expect b/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.expect
index ce86f42..2d4ba73 100644
--- a/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::double* a = 1.2;
+static field core::double a = 1.2;
 static method main() → dynamic {
-  core::double* b = 3.4;
+  core::double b = 3.4;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.modular.expect b/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.modular.expect
index ce86f42..2d4ba73 100644
--- a/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::double* a = 1.2;
+static field core::double a = 1.2;
 static method main() → dynamic {
-  core::double* b = 3.4;
+  core::double b = 3.4;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.outline.expect b/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.outline.expect
index ce3f6d5..74caa82 100644
--- a/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::double* a;
+static field core::double a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.transformed.expect
index ce86f42..2d4ba73 100644
--- a/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::double* a = 1.2;
+static field core::double a = 1.2;
 static method main() → dynamic {
-  core::double* b = 3.4;
+  core::double b = 3.4;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_int.dart b/pkg/front_end/testcases/inference/simple_literal_int.dart
index 0152502..c01ba89 100644
--- a/pkg/front_end/testcases/inference/simple_literal_int.dart
+++ b/pkg/front_end/testcases/inference/simple_literal_int.dart
@@ -1,12 +1,12 @@
 // 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.md file.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 var a = 1;
 
 main() {
-  var /*@ type=int* */ b = 2;
+  var /*@type=int*/ b = 2;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_int.dart.textual_outline.expect b/pkg/front_end/testcases/inference/simple_literal_int.dart.textual_outline.expect
index 6c10111..83e091a 100644
--- a/pkg/front_end/testcases/inference/simple_literal_int.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_int.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var a = 1;
diff --git a/pkg/front_end/testcases/inference/simple_literal_int.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/simple_literal_int.dart.textual_outline_modelled.expect
index ab8010e..60b453a 100644
--- a/pkg/front_end/testcases/inference/simple_literal_int.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_int.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.expect b/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.expect
index 02faaca..87185b7 100644
--- a/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* a = 1;
+static field core::int a = 1;
 static method main() → dynamic {
-  core::int* b = 2;
+  core::int b = 2;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.modular.expect b/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.modular.expect
index 02faaca..87185b7 100644
--- a/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* a = 1;
+static field core::int a = 1;
 static method main() → dynamic {
-  core::int* b = 2;
+  core::int b = 2;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.outline.expect b/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.outline.expect
index 0596698..df51585 100644
--- a/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* a;
+static field core::int a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.transformed.expect
index 02faaca..87185b7 100644
--- a/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* a = 1;
+static field core::int a = 1;
 static method main() → dynamic {
-  core::int* b = 2;
+  core::int b = 2;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_null.dart b/pkg/front_end/testcases/inference/simple_literal_null.dart
index 426f43b..6ca0f65 100644
--- a/pkg/front_end/testcases/inference/simple_literal_null.dart
+++ b/pkg/front_end/testcases/inference/simple_literal_null.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/simple_literal_null.dart.textual_outline.expect b/pkg/front_end/testcases/inference/simple_literal_null.dart.textual_outline.expect
index 8612b00..5ca6d2a 100644
--- a/pkg/front_end/testcases/inference/simple_literal_null.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_null.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var a = null;
diff --git a/pkg/front_end/testcases/inference/simple_literal_null.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/simple_literal_null.dart.textual_outline_modelled.expect
index e43735f..931bd7b 100644
--- a/pkg/front_end/testcases/inference/simple_literal_null.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_null.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.expect b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.expect
index 0368614..d4be84a 100644
--- a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static field dynamic a = null;
diff --git a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.modular.expect b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.modular.expect
index 0368614..d4be84a 100644
--- a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static field dynamic a = null;
diff --git a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.outline.expect b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.outline.expect
index 7e1ab76..86abf76 100644
--- a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static field dynamic a;
diff --git a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.transformed.expect
index 0368614..d4be84a 100644
--- a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static field dynamic a = null;
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart b/pkg/front_end/testcases/inference/static_method_tear_off.dart
index 69de61c..e5f1b45 100644
--- a/pkg/front_end/testcases/inference/static_method_tear_off.dart
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 const v = C.f;
 
 class C {
-  static int f(String s) => null;
+  static int f(String s) => throw '';
 }
 
 main() {
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart.textual_outline.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.textual_outline.expect
index 656d9fb..6a6de4e 100644
--- a/pkg/front_end/testcases/inference/static_method_tear_off.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 const v = C.f;
 
 class C {
-  static int f(String s) => null;
+  static int f(String s) => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.textual_outline_modelled.expect
index b234f45..d3ea8a9 100644
--- a/pkg/front_end/testcases/inference/static_method_tear_off.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class C {
-  static int f(String s) => null;
+  static int f(String s) => throw '';
 }
 
 const v = C.f;
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.expect
index b89fa7d..5e5928a 100644
--- a/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static method f(core::String* s) → core::int*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static method f(core::String s) → core::int
+    return throw "";
 }
-static const field (core::String*) →* core::int* v = #C1;
+static const field (core::String) → core::int v = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.modular.expect
index b89fa7d..5e5928a 100644
--- a/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static method f(core::String* s) → core::int*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static method f(core::String s) → core::int
+    return throw "";
 }
-static const field (core::String*) →* core::int* v = #C1;
+static const field (core::String) → core::int v = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.outline.expect
index b2c575b..76e4573 100644
--- a/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  static method f(core::String* s) → core::int*
+  static method f(core::String s) → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field (core::String*) →* core::int* v = self::C::f;
+static const field (core::String) → core::int v = self::C::f;
 static method main() → dynamic
   ;
 
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.transformed.expect
index b89fa7d..5e5928a 100644
--- a/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static method f(core::String* s) → core::int*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static method f(core::String s) → core::int
+    return throw "";
 }
-static const field (core::String*) →* core::int* v = #C1;
+static const field (core::String) → core::int v = #C1;
 static method main() → dynamic {
   #C1;
 }
diff --git a/pkg/front_end/testcases/inference/string_literal.dart b/pkg/front_end/testcases/inference/string_literal.dart
index d58188d..6eb5292 100644
--- a/pkg/front_end/testcases/inference/string_literal.dart
+++ b/pkg/front_end/testcases/inference/string_literal.dart
@@ -1,7 +1,7 @@
 // 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.md file.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,8 +11,8 @@
 var c = 'c ${x} cc' 'ccc';
 
 main() {
-  var /*@ type=int* */ x = 1;
-  var /*@ type=String* */ a = 'aaa';
-  var /*@ type=String* */ b = 'b ${x} bb';
-  var /*@ type=String* */ c = 'c ${x} cc' 'ccc';
+  var /*@type=int*/ x = 1;
+  var /*@type=String*/ a = 'aaa';
+  var /*@type=String*/ b = 'b ${x} bb';
+  var /*@type=String*/ c = 'c ${x} cc' 'ccc';
 }
diff --git a/pkg/front_end/testcases/inference/string_literal.dart.textual_outline.expect b/pkg/front_end/testcases/inference/string_literal.dart.textual_outline.expect
index cb60ad8..40f25d4 100644
--- a/pkg/front_end/testcases/inference/string_literal.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/string_literal.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var x = 1;
diff --git a/pkg/front_end/testcases/inference/string_literal.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/string_literal.dart.textual_outline_modelled.expect
index 64d1894..8bb8a7d 100644
--- a/pkg/front_end/testcases/inference/string_literal.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/string_literal.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/string_literal.dart.weak.expect b/pkg/front_end/testcases/inference/string_literal.dart.weak.expect
index c59623a..cf36cdb 100644
--- a/pkg/front_end/testcases/inference/string_literal.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/string_literal.dart.weak.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* x = 1;
-static field core::String* a = "aaa";
-static field core::String* b = "b ${self::x} bb";
-static field core::String* c = "c ${self::x} ccccc";
+static field core::int x = 1;
+static field core::String a = "aaa";
+static field core::String b = "b ${self::x} bb";
+static field core::String c = "c ${self::x} ccccc";
 static method main() → dynamic {
-  core::int* x = 1;
-  core::String* a = "aaa";
-  core::String* b = "b ${x} bb";
-  core::String* c = "c ${x} ccccc";
+  core::int x = 1;
+  core::String a = "aaa";
+  core::String b = "b ${x} bb";
+  core::String c = "c ${x} ccccc";
 }
diff --git a/pkg/front_end/testcases/inference/string_literal.dart.weak.modular.expect b/pkg/front_end/testcases/inference/string_literal.dart.weak.modular.expect
index c59623a..cf36cdb 100644
--- a/pkg/front_end/testcases/inference/string_literal.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/string_literal.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* x = 1;
-static field core::String* a = "aaa";
-static field core::String* b = "b ${self::x} bb";
-static field core::String* c = "c ${self::x} ccccc";
+static field core::int x = 1;
+static field core::String a = "aaa";
+static field core::String b = "b ${self::x} bb";
+static field core::String c = "c ${self::x} ccccc";
 static method main() → dynamic {
-  core::int* x = 1;
-  core::String* a = "aaa";
-  core::String* b = "b ${x} bb";
-  core::String* c = "c ${x} ccccc";
+  core::int x = 1;
+  core::String a = "aaa";
+  core::String b = "b ${x} bb";
+  core::String c = "c ${x} ccccc";
 }
diff --git a/pkg/front_end/testcases/inference/string_literal.dart.weak.outline.expect b/pkg/front_end/testcases/inference/string_literal.dart.weak.outline.expect
index 506fd95..a73a704 100644
--- a/pkg/front_end/testcases/inference/string_literal.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/string_literal.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* x;
-static field core::String* a;
-static field core::String* b;
-static field core::String* c;
+static field core::int x;
+static field core::String a;
+static field core::String b;
+static field core::String c;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/string_literal.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/string_literal.dart.weak.transformed.expect
index c59623a..cf36cdb 100644
--- a/pkg/front_end/testcases/inference/string_literal.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/string_literal.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* x = 1;
-static field core::String* a = "aaa";
-static field core::String* b = "b ${self::x} bb";
-static field core::String* c = "c ${self::x} ccccc";
+static field core::int x = 1;
+static field core::String a = "aaa";
+static field core::String b = "b ${self::x} bb";
+static field core::String c = "c ${self::x} ccccc";
 static method main() → dynamic {
-  core::int* x = 1;
-  core::String* a = "aaa";
-  core::String* b = "b ${x} bb";
-  core::String* c = "c ${x} ccccc";
+  core::int x = 1;
+  core::String a = "aaa";
+  core::String b = "b ${x} bb";
+  core::String c = "c ${x} ccccc";
 }
diff --git a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart
index 708acd6..38ba514 100644
--- a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart
+++ b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  List<num> x = /*@ typeArgs=num* */ [0];
+  List<num> x = /*@typeArgs=num*/ [0];
 }
 
-List<num> y = /*@ typeArgs=num* */ [0];
+List<num> y = /*@typeArgs=num*/ [0];
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.textual_outline.expect b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.textual_outline.expect
index ac7ed69..46a9d5d9 100644
--- a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.textual_outline_modelled.expect
index bb4438d..fa8bd40 100644
--- a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<num> y = [0];
diff --git a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.expect b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.expect
index d1ef879..0415cc5 100644
--- a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::List<core::num*>* x = <core::num*>[0];
-  synthetic constructor •() → self::C*
+  field core::List<core::num> x = <core::num>[0];
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<core::num*>* y = <core::num*>[0];
+static field core::List<core::num> y = <core::num>[0];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.modular.expect b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.modular.expect
index d1ef879..0415cc5 100644
--- a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.modular.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::List<core::num*>* x = <core::num*>[0];
-  synthetic constructor •() → self::C*
+  field core::List<core::num> x = <core::num>[0];
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<core::num*>* y = <core::num*>[0];
+static field core::List<core::num> y = <core::num>[0];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.outline.expect b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.outline.expect
index 8ced609..51db08a 100644
--- a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::List<core::num*>* x;
-  synthetic constructor •() → self::C*
+  field core::List<core::num> x;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<core::num*>* y;
+static field core::List<core::num> y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.transformed.expect
index b689fb3..2402ae6 100644
--- a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.transformed.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::List<core::num*>* x = core::_GrowableList::_literal1<core::num*>(0);
-  synthetic constructor •() → self::C*
+  field core::List<core::num> x = core::_GrowableList::_literal1<core::num>(0);
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<core::num*>* y = core::_GrowableList::_literal1<core::num*>(0);
+static field core::List<core::num> y = core::_GrowableList::_literal1<core::num>(0);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart b/pkg/front_end/testcases/inference/super_index_set.dart
index e549a00..7ab32d9 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart
+++ b/pkg/front_end/testcases/inference/super_index_set.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B {
   void operator []=(int x, String y) {}
@@ -16,8 +16,7 @@
 class C extends B {
   void operator []=(Object x, Object y) {}
   void h() {
-    super /*@target=B.[]=*/ [
-        /*@ typeArgs=int* */ f()] = /*@ typeArgs=String* */ f();
+    super /*@target=B.[]=*/ [/*@typeArgs=int*/ f()] = /*@typeArgs=String*/ f();
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.textual_outline.expect b/pkg/front_end/testcases/inference/super_index_set.dart.textual_outline.expect
index 909d41f..9c38a60 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B {
   void operator []=(int x, String y) {}
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/super_index_set.dart.textual_outline_modelled.expect
index 2dd9e86..cf88a37 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B {
   void operator []=(int x, String y) {}
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.weak.expect b/pkg/front_end/testcases/inference/super_index_set.dart.weak.expect
index 8b870ab..4ff0059 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.weak.expect
@@ -1,34 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator []=(core::int* x, core::String* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(core::int x, core::String y) → void {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  operator []=(core::Object* x, core::Object* y) → void {}
+  operator []=(core::Object x, core::Object y) → void {}
   method h() → void {
-    super.{self::B::[]=}(self::f<core::int*>(), self::f<core::String*>());
+    super.{self::B::[]=}(self::f<core::int>(), self::f<core::String>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_index_set.dart.weak.modular.expect
index 8b870ab..4ff0059 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.weak.modular.expect
@@ -1,34 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator []=(core::int* x, core::String* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(core::int x, core::String y) → void {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  operator []=(core::Object* x, core::Object* y) → void {}
+  operator []=(core::Object x, core::Object y) → void {}
   method h() → void {
-    super.{self::B::[]=}(self::f<core::int*>(), self::f<core::String*>());
+    super.{self::B::[]=}(self::f<core::int>(), self::f<core::String>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_index_set.dart.weak.outline.expect
index 5f49e59..9682c96 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.weak.outline.expect
@@ -1,34 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator []=(core::int* x, core::String* y) → void
+  operator []=(core::int x, core::String y) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  operator []=(core::Object* x, core::Object* y) → void
+  operator []=(core::Object x, core::Object y) → void
     ;
   method h() → void
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_index_set.dart.weak.transformed.expect
index 8b870ab..4ff0059 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.weak.transformed.expect
@@ -1,34 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator []=(core::int* x, core::String* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(core::int x, core::String y) → void {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  operator []=(core::Object* x, core::Object* y) → void {}
+  operator []=(core::Object x, core::Object y) → void {}
   method h() → void {
-    super.{self::B::[]=}(self::f<core::int*>(), self::f<core::String*>());
+    super.{self::B::[]=}(self::f<core::int>(), self::f<core::String>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart b/pkg/front_end/testcases/inference/super_index_set_substitution.dart
index 2787d8a..7a60a4a 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B<T> {
   void operator []=(Map<int, T> x, List<T> y) {}
@@ -17,8 +17,8 @@
   void operator []=(Object x, Object y) {}
   void h() {
     super /*@target=B.[]=*/ [
-            /*@ typeArgs=Map<int*, Future<C::U*>*>* */ f()] =
-        /*@ typeArgs=List<Future<C::U*>*>* */ f();
+            /*@typeArgs=Map<int, Future<C::U%>>*/ f()] =
+        /*@typeArgs=List<Future<C::U%>>*/ f();
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.textual_outline.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.textual_outline.expect
index b1af21d..d865785 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B<T> {
   void operator []=(Map<int, T> x, List<T> y) {}
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.textual_outline_modelled.expect
index 8b2dd86..583939d 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B<T> {
   void operator []=(Map<int, T> x, List<T> y) {}
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.expect
index e59a920..ed2a1fb 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  operator []=(covariant-by-class core::Map<core::int*, self::B::T*>* x, covariant-by-class core::List<self::B::T*>* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(covariant-by-class core::Map<core::int, self::B::T%> x, covariant-by-class core::List<self::B::T%> y) → void {}
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  operator []=(covariant-by-class core::Object* x, covariant-by-class core::Object* y) → void {}
+  operator []=(covariant-by-class core::Object x, covariant-by-class core::Object y) → void {}
   method h() → void {
-    super.{self::B::[]=}(self::f<core::Map<core::int*, asy::Future<self::C::U*>*>*>(), self::f<core::List<asy::Future<self::C::U*>*>*>());
+    super.{self::B::[]=}(self::f<core::Map<core::int, asy::Future<self::C::U%>>>(), self::f<core::List<asy::Future<self::C::U%>>>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.modular.expect
index e59a920..ed2a1fb 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.modular.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  operator []=(covariant-by-class core::Map<core::int*, self::B::T*>* x, covariant-by-class core::List<self::B::T*>* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(covariant-by-class core::Map<core::int, self::B::T%> x, covariant-by-class core::List<self::B::T%> y) → void {}
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  operator []=(covariant-by-class core::Object* x, covariant-by-class core::Object* y) → void {}
+  operator []=(covariant-by-class core::Object x, covariant-by-class core::Object y) → void {}
   method h() → void {
-    super.{self::B::[]=}(self::f<core::Map<core::int*, asy::Future<self::C::U*>*>*>(), self::f<core::List<asy::Future<self::C::U*>*>*>());
+    super.{self::B::[]=}(self::f<core::Map<core::int, asy::Future<self::C::U%>>>(), self::f<core::List<asy::Future<self::C::U%>>>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.outline.expect
index 0dcfd55..6334ce2 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.outline.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  operator []=(covariant-by-class core::Map<core::int*, self::B::T*>* x, covariant-by-class core::List<self::B::T*>* y) → void
+  operator []=(covariant-by-class core::Map<core::int, self::B::T%> x, covariant-by-class core::List<self::B::T%> y) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     ;
-  operator []=(covariant-by-class core::Object* x, covariant-by-class core::Object* y) → void
+  operator []=(covariant-by-class core::Object x, covariant-by-class core::Object y) → void
     ;
   method h() → void
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.transformed.expect
index e59a920..ed2a1fb 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.transformed.expect
@@ -1,35 +1,25 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  operator []=(covariant-by-class core::Map<core::int*, self::B::T*>* x, covariant-by-class core::List<self::B::T*>* y) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(covariant-by-class core::Map<core::int, self::B::T%> x, covariant-by-class core::List<self::B::T%> y) → void {}
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  operator []=(covariant-by-class core::Object* x, covariant-by-class core::Object* y) → void {}
+  operator []=(covariant-by-class core::Object x, covariant-by-class core::Object y) → void {}
   method h() → void {
-    super.{self::B::[]=}(self::f<core::Map<core::int*, asy::Future<self::C::U*>*>*>(), self::f<core::List<asy::Future<self::C::U*>*>*>());
+    super.{self::B::[]=}(self::f<core::Map<core::int, asy::Future<self::C::U%>>>(), self::f<core::List<asy::Future<self::C::U%>>>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart b/pkg/front_end/testcases/inference/super_initializer.dart
index 5dfdd57..4607f58 100644
--- a/pkg/front_end/testcases/inference/super_initializer.dart
+++ b/pkg/front_end/testcases/inference/super_initializer.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C extends B {
-  C() : super(/*@ typeArgs=int* */ f());
+  C() : super(/*@typeArgs=int*/ f());
 }
 
 class B {
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/inference/super_initializer.dart.textual_outline.expect
index f2f1a1a..d843dbd 100644
--- a/pkg/front_end/testcases/inference/super_initializer.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/super_initializer.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C extends B {
   C() : super(f());
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/super_initializer.dart.textual_outline_modelled.expect
index 9f2e248..f04a4dc 100644
--- a/pkg/front_end/testcases/inference/super_initializer.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/super_initializer.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B {
   B(int x);
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart.weak.expect b/pkg/front_end/testcases/inference/super_initializer.dart.weak.expect
index 8e244eb..9dce3cd 100644
--- a/pkg/front_end/testcases/inference/super_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_initializer.dart.weak.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::B {
-  constructor •() → self::C*
-    : super self::B::•(self::f<core::int*>())
+  constructor •() → self::C
+    : super self::B::•(self::f<core::int>())
     ;
 }
 class B extends core::Object {
-  constructor •(core::int* x) → self::B*
+  constructor •(core::int x) → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_initializer.dart.weak.modular.expect
index 8e244eb..9dce3cd 100644
--- a/pkg/front_end/testcases/inference/super_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/super_initializer.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::B {
-  constructor •() → self::C*
-    : super self::B::•(self::f<core::int*>())
+  constructor •() → self::C
+    : super self::B::•(self::f<core::int>())
     ;
 }
 class B extends core::Object {
-  constructor •(core::int* x) → self::B*
+  constructor •(core::int x) → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_initializer.dart.weak.outline.expect
index e88cb35..6605727 100644
--- a/pkg/front_end/testcases/inference/super_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_initializer.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::B {
-  constructor •() → self::C*
+  constructor •() → self::C
     ;
 }
 class B extends core::Object {
-  constructor •(core::int* x) → self::B*
+  constructor •(core::int x) → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_initializer.dart.weak.transformed.expect
index 8e244eb..9dce3cd 100644
--- a/pkg/front_end/testcases/inference/super_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_initializer.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::B {
-  constructor •() → self::C*
-    : super self::B::•(self::f<core::int*>())
+  constructor •() → self::C
+    : super self::B::•(self::f<core::int>())
     ;
 }
 class B extends core::Object {
-  constructor •(core::int* x) → self::B*
+  constructor •(core::int x) → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart b/pkg/front_end/testcases/inference/super_initializer_substitution.dart
index ad63740..aae6dd0 100644
--- a/pkg/front_end/testcases/inference/super_initializer_substitution.dart
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart
@@ -1,18 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B<T> {
   B(T t);
 }
 
 class C<U> extends B<List<U>> {
-  C() : super(/*@ typeArgs=List<C::U*>* */ f());
+  C() : super(/*@typeArgs=List<C::U%>*/ f());
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.textual_outline.expect b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.textual_outline.expect
index 9d56fff..0db52fa 100644
--- a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B<T> {
   B(T t);
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.textual_outline_modelled.expect
index 9d56fff..0db52fa 100644
--- a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B<T> {
   B(T t);
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.expect b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.expect
index 1d91491..bb6439c 100644
--- a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B::T* t) → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B::T% t) → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<core::List<self::C::U*>*> {
-  constructor •() → self::C<self::C::U*>*
-    : super self::B::•(self::f<core::List<self::C::U*>*>())
+class C<U extends core::Object? = dynamic> extends self::B<core::List<self::C::U%>> {
+  constructor •() → self::C<self::C::U%>
+    : super self::B::•(self::f<core::List<self::C::U%>>())
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.modular.expect
index 1d91491..bb6439c 100644
--- a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B::T* t) → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B::T% t) → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<core::List<self::C::U*>*> {
-  constructor •() → self::C<self::C::U*>*
-    : super self::B::•(self::f<core::List<self::C::U*>*>())
+class C<U extends core::Object? = dynamic> extends self::B<core::List<self::C::U%>> {
+  constructor •() → self::C<self::C::U%>
+    : super self::B::•(self::f<core::List<self::C::U%>>())
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.outline.expect
index 0df9ae4..eaa8d7c 100644
--- a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B::T* t) → self::B<self::B::T*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class C<U extends core::Object* = dynamic> extends self::B<core::List<self::C::U*>*> {
-  constructor •() → self::C<self::C::U*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B::T% t) → self::B<self::B::T%>
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+class C<U extends core::Object? = dynamic> extends self::B<core::List<self::C::U%>> {
+  constructor •() → self::C<self::C::U%>
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.transformed.expect
index 1d91491..bb6439c 100644
--- a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B::T* t) → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B::T% t) → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<core::List<self::C::U*>*> {
-  constructor •() → self::C<self::C::U*>*
-    : super self::B::•(self::f<core::List<self::C::U*>*>())
+class C<U extends core::Object? = dynamic> extends self::B<core::List<self::C::U%>> {
+  constructor •() → self::C<self::C::U%>
+    : super self::B::•(self::f<core::List<self::C::U%>>())
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation.dart b/pkg/front_end/testcases/inference/super_method_invocation.dart
index 39ee9b8..fc3500f 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation.dart
+++ b/pkg/front_end/testcases/inference/super_method_invocation.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,7 +11,7 @@
 
 class D extends C {
   void g() {
-    var /*@ type=int* */ x = super. /*@target=C.f*/ f();
+    var /*@type=int*/ x = super. /*@target=C.f*/ f();
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/super_method_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/inference/super_method_invocation.dart.textual_outline.expect
index 29cd1d8..705378f 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/super_method_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/super_method_invocation.dart.textual_outline_modelled.expect
index 29cd1d8..705378f 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.expect b/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.expect
index f51320a..e106e60 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f() → core::int*
+  method f() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    core::int* x = super.{self::C::f}();
+    core::int x = super.{self::C::f}();
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.modular.expect
index f51320a..e106e60 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.modular.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f() → core::int*
+  method f() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    core::int* x = super.{self::C::f}();
+    core::int x = super.{self::C::f}();
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.outline.expect
index 27ee2c0..7fa8ea0 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f() → core::int*
+  method f() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.transformed.expect
index f51320a..e106e60 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.transformed.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f() → core::int*
+  method f() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    core::int* x = super.{self::C::f}();
+    core::int x = super.{self::C::f}();
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart
index 4f06f3a..57dc709 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart
@@ -1,27 +1,27 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class D<T> {}
 
 class E<T> extends D<T> {}
 
 class B<T> {
-  D<T> g(E<T> x) => null;
+  D<T> g(E<T> x) => throw '';
 }
 
 class C<U> extends B<Future<U>> {
-  E<Future<U>> g(Object x) => null;
+  E<Future<U>> g(Object x) => throw '';
   void h() {
-    var /*@ type=D<Future<C::U*>*>* */ x =
-        super. /*@target=B.g*/ g(/*@ typeArgs=E<Future<C::U*>*>* */ f());
+    var /*@type=D<Future<C::U%>>*/ x =
+        super. /*@target=B.g*/ g(/*@typeArgs=E<Future<C::U%>>*/ f());
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.textual_outline.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.textual_outline.expect
index 39ee085..002896d 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.textual_outline.expect
@@ -1,20 +1,19 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class D<T> {}
 
 class E<T> extends D<T> {}
 
 class B<T> {
-  D<T> g(E<T> x) => null;
+  D<T> g(E<T> x) => throw '';
 }
 
 class C<U> extends B<Future<U>> {
-  E<Future<U>> g(Object x) => null;
+  E<Future<U>> g(Object x) => throw '';
   void h() {}
 }
 
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.textual_outline_modelled.expect
index 24b0f1f..4aacb07 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.textual_outline_modelled.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B<T> {
-  D<T> g(E<T> x) => null;
+  D<T> g(E<T> x) => throw '';
 }
 
 class C<U> extends B<Future<U>> {
-  E<Future<U>> g(Object x) => null;
+  E<Future<U>> g(Object x) => throw '';
   void h() {}
 }
 
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.expect
index 940c20e..bae0ca9 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.expect
@@ -1,57 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     : super self::D::•()
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method g(covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method g(covariant-by-class self::E<self::B::T%> x) → self::D<self::B::T%>
+    return throw "";
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  method g(covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
-    return null;
+  method g(covariant-by-class core::Object x) → self::E<asy::Future<self::C::U%>>
+    return throw "";
   method h() → void {
-    self::D<asy::Future<self::C::U*>*>* x = super.{self::B::g}(self::f<self::E<asy::Future<self::C::U*>*>*>());
+    self::D<asy::Future<self::C::U%>> x = super.{self::B::g}(self::f<self::E<asy::Future<self::C::U%>>>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.modular.expect
index 940c20e..bae0ca9 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.modular.expect
@@ -1,57 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     : super self::D::•()
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method g(covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method g(covariant-by-class self::E<self::B::T%> x) → self::D<self::B::T%>
+    return throw "";
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  method g(covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
-    return null;
+  method g(covariant-by-class core::Object x) → self::E<asy::Future<self::C::U%>>
+    return throw "";
   method h() → void {
-    self::D<asy::Future<self::C::U*>*>* x = super.{self::B::g}(self::f<self::E<asy::Future<self::C::U*>*>*>());
+    self::D<asy::Future<self::C::U%>> x = super.{self::B::g}(self::f<self::E<asy::Future<self::C::U%>>>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.outline.expect
index d0fbc6d..9a0ecd6 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.outline.expect
@@ -1,53 +1,33 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     ;
-  method g(covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  method g(covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
+  method g(covariant-by-class self::E<self::B::T%> x) → self::D<self::B::T%>
+    ;
+}
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
+    ;
+  method g(covariant-by-class core::Object x) → self::E<asy::Future<self::C::U%>>
     ;
   method h() → void
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.transformed.expect
index 940c20e..bae0ca9 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.transformed.expect
@@ -1,57 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     : super self::D::•()
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method g(covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method g(covariant-by-class self::E<self::B::T%> x) → self::D<self::B::T%>
+    return throw "";
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  method g(covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
-    return null;
+  method g(covariant-by-class core::Object x) → self::E<asy::Future<self::C::U%>>
+    return throw "";
   method h() → void {
-    self::D<asy::Future<self::C::U*>*>* x = super.{self::B::g}(self::f<self::E<asy::Future<self::C::U*>*>*>());
+    self::D<asy::Future<self::C::U%>> x = super.{self::B::g}(self::f<self::E<asy::Future<self::C::U%>>>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart b/pkg/front_end/testcases/inference/super_property_get.dart
index e49d278..ddbb7d8 100644
--- a/pkg/front_end/testcases/inference/super_property_get.dart
+++ b/pkg/front_end/testcases/inference/super_property_get.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,7 +11,7 @@
 
 class D extends C {
   void g() {
-    var /*@ type=int* */ y = super. /*@target=C.x*/ x;
+    var /*@type=int*/ y = super. /*@target=C.x*/ x;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart.textual_outline.expect b/pkg/front_end/testcases/inference/super_property_get.dart.textual_outline.expect
index e7b5570..e878396 100644
--- a/pkg/front_end/testcases/inference/super_property_get.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/super_property_get.dart.textual_outline_modelled.expect
index e7b5570..e878396 100644
--- a/pkg/front_end/testcases/inference/super_property_get.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/super_property_get.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart.weak.expect b/pkg/front_end/testcases/inference/super_property_get.dart.weak.expect
index c9a8df8..317cfe9 100644
--- a/pkg/front_end/testcases/inference/super_property_get.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_property_get.dart.weak.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* x = 0;
-  synthetic constructor •() → self::C*
+  field core::int x = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::x};
+    core::int y = super.{self::C::x};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_property_get.dart.weak.modular.expect
index c9a8df8..317cfe9 100644
--- a/pkg/front_end/testcases/inference/super_property_get.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/super_property_get.dart.weak.modular.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* x = 0;
-  synthetic constructor •() → self::C*
+  field core::int x = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::x};
+    core::int y = super.{self::C::x};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_property_get.dart.weak.outline.expect
index e568011..83d87a5 100644
--- a/pkg/front_end/testcases/inference/super_property_get.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::C*
+  field core::int x;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_property_get.dart.weak.transformed.expect
index c9a8df8..317cfe9 100644
--- a/pkg/front_end/testcases/inference/super_property_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_get.dart.weak.transformed.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* x = 0;
-  synthetic constructor •() → self::C*
+  field core::int x = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::x};
+    core::int y = super.{self::C::x};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart
index ea4f783..1a92fd8 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart
@@ -1,17 +1,17 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C {
-  var f = /*@ returnType=int* */ () => 0;
+  var f = /*@returnType=int*/ () => 0;
 }
 
 class D extends C {
   void g() {
-    var /*@ type=int* */ y = super. /*@target=C.f*/ f();
+    var /*@type=int*/ y = super. /*@target=C.f*/ f();
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.textual_outline.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.textual_outline.expect
index 368ca1c..7d71a90 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.textual_outline_modelled.expect
index 368ca1c..7d71a90 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.expect
index 23c68ac..d4dbf44 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field () →* core::int* f = () → core::int* => 0;
-  synthetic constructor •() → self::C*
+  field () → core::int f = () → core::int => 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::f}(){() →* core::int*};
+    core::int y = super.{self::C::f}(){() → core::int};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.modular.expect
index 23c68ac..d4dbf44 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.modular.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field () →* core::int* f = () → core::int* => 0;
-  synthetic constructor •() → self::C*
+  field () → core::int f = () → core::int => 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::f}(){() →* core::int*};
+    core::int y = super.{self::C::f}(){() → core::int};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.outline.expect
index 51a9277..291ae49 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field () →* core::int* f;
-  synthetic constructor •() → self::C*
+  field () → core::int f;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.transformed.expect
index 23c68ac..d4dbf44 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.transformed.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field () →* core::int* f = () → core::int* => 0;
-  synthetic constructor •() → self::C*
+  field () → core::int f = () → core::int => 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::f}(){() →* core::int*};
+    core::int y = super.{self::C::f}(){() → core::int};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart
index 8ba71ce..f45edc6 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -15,7 +15,7 @@
 
 class D extends C {
   void g() {
-    var /*@ type=int* */ y =
+    var /*@type=int*/ y =
         super. /*@target=C.f*/ f /*@target=CallableClass.call*/ ();
   }
 }
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.textual_outline.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.textual_outline.expect
index 272f197..f9b1f9f 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class CallableClass {
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.textual_outline_modelled.expect
index 6788ddb..4764b64 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.expect
index f32675f..2f27930 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.expect
@@ -1,46 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class CallableClass extends core::Object {
-  synthetic constructor •() → self::CallableClass*
+  synthetic constructor •() → self::CallableClass
     : super core::Object::•()
     ;
-  method call() → core::int*
+  method call() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::CallableClass* f = new self::CallableClass::•();
-  synthetic constructor •() → self::C*
+  field self::CallableClass f = new self::CallableClass::•();
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::f}.{self::CallableClass::call}(){() →* core::int*};
+    core::int y = super.{self::C::f}.{self::CallableClass::call}(){() → core::int};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.modular.expect
index f32675f..2f27930 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.modular.expect
@@ -1,46 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class CallableClass extends core::Object {
-  synthetic constructor •() → self::CallableClass*
+  synthetic constructor •() → self::CallableClass
     : super core::Object::•()
     ;
-  method call() → core::int*
+  method call() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::CallableClass* f = new self::CallableClass::•();
-  synthetic constructor •() → self::C*
+  field self::CallableClass f = new self::CallableClass::•();
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::f}.{self::CallableClass::call}(){() →* core::int*};
+    core::int y = super.{self::C::f}.{self::CallableClass::call}(){() → core::int};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.outline.expect
index ada3854..d69e58c 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.outline.expect
@@ -1,40 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class CallableClass extends core::Object {
-  synthetic constructor •() → self::CallableClass*
+  synthetic constructor •() → self::CallableClass
     ;
-  method call() → core::int*
+  method call() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::CallableClass* f;
-  synthetic constructor •() → self::C*
+  field self::CallableClass f;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.transformed.expect
index f32675f..2f27930 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.transformed.expect
@@ -1,46 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class CallableClass extends core::Object {
-  synthetic constructor •() → self::CallableClass*
+  synthetic constructor •() → self::CallableClass
     : super core::Object::•()
     ;
-  method call() → core::int*
+  method call() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::CallableClass* f = new self::CallableClass::•();
-  synthetic constructor •() → self::C*
+  field self::CallableClass f = new self::CallableClass::•();
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::f}.{self::CallableClass::call}(){() →* core::int*};
+    core::int y = super.{self::C::f}.{self::CallableClass::call}(){() → core::int};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart b/pkg/front_end/testcases/inference/super_property_get_substitution.dart
index 820d642..21ff586 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -12,14 +12,14 @@
 class E<T> extends D<T> {}
 
 class B<T> {
-  D<T> x;
+  D<T> x = throw '';
 }
 
 class C<U> extends B<Future<U>> {
-  E<Future<U>> get x => null;
+  E<Future<U>> get x => throw '';
   void set x(Object x) {}
   void g() {
-    var /*@ type=D<Future<C::U*>*>* */ y = super. /*@target=B.x*/ x;
+    var /*@type=D<Future<C::U%>>*/ y = super. /*@target=B.x*/ x;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.textual_outline.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.textual_outline.expect
index 7ba44c9..0a867ef 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
@@ -8,11 +7,11 @@
 class E<T> extends D<T> {}
 
 class B<T> {
-  D<T> x;
+  D<T> x = throw '';
 }
 
 class C<U> extends B<Future<U>> {
-  E<Future<U>> get x => null;
+  E<Future<U>> get x => throw '';
   void set x(Object x) {}
   void g() {}
 }
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.textual_outline_modelled.expect
index 21b91de..8c62019 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.textual_outline_modelled.expect
@@ -1,14 +1,13 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
 class B<T> {
-  D<T> x;
+  D<T> x = throw '';
 }
 
 class C<U> extends B<Future<U>> {
-  E<Future<U>> get x => null;
+  E<Future<U>> get x => throw '';
   void g() {}
   void set x(Object x) {}
 }
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.expect
index 752cdaf..352bab1 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.expect
@@ -1,55 +1,35 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     : super self::D::•()
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::D<self::B::T*>* x = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::D<self::B::T%> x = throw "";
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  get x() → self::E<asy::Future<self::C::U*>*>*
-    return null;
-  set x(covariant-by-class core::Object* x) → void {}
+  get x() → self::E<asy::Future<self::C::U%>>
+    return throw "";
+  set x(covariant-by-class core::Object x) → void {}
   method g() → void {
-    self::D<asy::Future<self::C::U*>*>* y = super.{self::B::x};
+    self::D<asy::Future<self::C::U%>> y = super.{self::B::x};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.modular.expect
index 752cdaf..352bab1 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.modular.expect
@@ -1,55 +1,35 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     : super self::D::•()
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::D<self::B::T*>* x = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::D<self::B::T%> x = throw "";
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  get x() → self::E<asy::Future<self::C::U*>*>*
-    return null;
-  set x(covariant-by-class core::Object* x) → void {}
+  get x() → self::E<asy::Future<self::C::U%>>
+    return throw "";
+  set x(covariant-by-class core::Object x) → void {}
   method g() → void {
-    self::D<asy::Future<self::C::U*>*>* y = super.{self::B::x};
+    self::D<asy::Future<self::C::U%>> y = super.{self::B::x};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.outline.expect
index 94018b3..9536c32 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.outline.expect
@@ -1,49 +1,29 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::D<self::B::T*>* x;
-  synthetic constructor •() → self::B<self::B::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::D<self::B::T%> x;
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  get x() → self::E<asy::Future<self::C::U*>*>*
+}
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     ;
-  set x(covariant-by-class core::Object* x) → void
+  get x() → self::E<asy::Future<self::C::U%>>
+    ;
+  set x(covariant-by-class core::Object x) → void
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.transformed.expect
index 752cdaf..352bab1 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.transformed.expect
@@ -1,55 +1,35 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     : super self::D::•()
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::D<self::B::T*>* x = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::D<self::B::T%> x = throw "";
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  get x() → self::E<asy::Future<self::C::U*>*>*
-    return null;
-  set x(covariant-by-class core::Object* x) → void {}
+  get x() → self::E<asy::Future<self::C::U%>>
+    return throw "";
+  set x(covariant-by-class core::Object x) → void {}
   method g() → void {
-    self::D<asy::Future<self::C::U*>*>* y = super.{self::B::x};
+    self::D<asy::Future<self::C::U%>> y = super.{self::B::x};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart
index 1a62bf6..373e419 100644
--- a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart
+++ b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,7 +11,7 @@
 
 class D extends C {
   void g() {
-    var /*@ type=() ->* int* */ y = super. /*@target=C.f*/ f;
+    var /*@type=() -> int*/ y = super. /*@target=C.f*/ f;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.textual_outline.expect b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.textual_outline.expect
index 29cd1d8..705378f 100644
--- a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.textual_outline_modelled.expect
index 29cd1d8..705378f 100644
--- a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.expect b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.expect
index 5f7255e..fddaf84 100644
--- a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f() → core::int*
+  method f() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    () →* core::int* y = super.{self::C::f};
+    () → core::int y = super.{self::C::f};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.modular.expect
index 5f7255e..fddaf84 100644
--- a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.modular.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f() → core::int*
+  method f() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    () →* core::int* y = super.{self::C::f};
+    () → core::int y = super.{self::C::f};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.outline.expect
index 27ee2c0..7fa8ea0 100644
--- a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f() → core::int*
+  method f() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.transformed.expect
index 5f7255e..fddaf84 100644
--- a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.transformed.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f() → core::int*
+  method f() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method g() → void {
-    () →* core::int* y = super.{self::C::f};
+    () → core::int y = super.{self::C::f};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart b/pkg/front_end/testcases/inference/super_property_set_substitution.dart
index 32fb252..6cd4a53 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart
@@ -1,27 +1,27 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class D<T> {}
 
 class E<T> extends D<T> {}
 
 class B<T> {
-  D<T> x;
+  D<T> x = throw '';
 }
 
 class C<U> extends B<Future<U>> {
-  E<Future<U>> get x => null;
+  E<Future<U>> get x => throw '';
   void set x(Object x) {}
   void g() {
-    super.x = /*@ typeArgs=D<Future<C::U*>*>* */ f();
+    super.x = /*@typeArgs=D<Future<C::U%>>*/ f();
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.textual_outline.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.textual_outline.expect
index 2dccd93..3ec323d 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.textual_outline.expect
@@ -1,20 +1,19 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class D<T> {}
 
 class E<T> extends D<T> {}
 
 class B<T> {
-  D<T> x;
+  D<T> x = throw '';
 }
 
 class C<U> extends B<Future<U>> {
-  E<Future<U>> get x => null;
+  E<Future<U>> get x => throw '';
   void set x(Object x) {}
   void g() {}
 }
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.textual_outline_modelled.expect
index a6e272f..cc04643 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.textual_outline_modelled.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B<T> {
-  D<T> x;
+  D<T> x = throw '';
 }
 
 class C<U> extends B<Future<U>> {
-  E<Future<U>> get x => null;
+  E<Future<U>> get x => throw '';
   void g() {}
   void set x(Object x) {}
 }
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.expect
index 2b490e3..559bc71 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.expect
@@ -1,57 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     : super self::D::•()
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::D<self::B::T*>* x = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::D<self::B::T%> x = throw "";
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  get x() → self::E<asy::Future<self::C::U*>*>*
-    return null;
-  set x(covariant-by-class core::Object* x) → void {}
+  get x() → self::E<asy::Future<self::C::U%>>
+    return throw "";
+  set x(covariant-by-class core::Object x) → void {}
   method g() → void {
-    super.{self::B::x} = self::f<self::D<asy::Future<self::C::U*>*>*>();
+    super.{self::B::x} = self::f<self::D<asy::Future<self::C::U%>>>();
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.modular.expect
index 2b490e3..559bc71 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.modular.expect
@@ -1,57 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     : super self::D::•()
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::D<self::B::T*>* x = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::D<self::B::T%> x = throw "";
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  get x() → self::E<asy::Future<self::C::U*>*>*
-    return null;
-  set x(covariant-by-class core::Object* x) → void {}
+  get x() → self::E<asy::Future<self::C::U%>>
+    return throw "";
+  set x(covariant-by-class core::Object x) → void {}
   method g() → void {
-    super.{self::B::x} = self::f<self::D<asy::Future<self::C::U*>*>*>();
+    super.{self::B::x} = self::f<self::D<asy::Future<self::C::U%>>>();
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.outline.expect
index b8d091c..63a8313 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.outline.expect
@@ -1,54 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::D<self::B::T*>* x;
-  synthetic constructor •() → self::B<self::B::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::D<self::B::T%> x;
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  get x() → self::E<asy::Future<self::C::U*>*>*
+}
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     ;
-  set x(covariant-by-class core::Object* x) → void
+  get x() → self::E<asy::Future<self::C::U%>>
+    ;
+  set x(covariant-by-class core::Object x) → void
     ;
   method g() → void
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.transformed.expect
index 2b490e3..559bc71 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.transformed.expect
@@ -1,57 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     : super self::D::•()
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::D<self::B::T*>* x = null;
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::D<self::B::T%> x = throw "";
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  get x() → self::E<asy::Future<self::C::U*>*>*
-    return null;
-  set x(covariant-by-class core::Object* x) → void {}
+  get x() → self::E<asy::Future<self::C::U%>>
+    return throw "";
+  set x(covariant-by-class core::Object x) → void {}
   method g() → void {
-    super.{self::B::x} = self::f<self::D<asy::Future<self::C::U*>*>*>();
+    super.{self::B::x} = self::f<self::D<asy::Future<self::C::U%>>>();
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/switch_continue.dart b/pkg/front_end/testcases/inference/switch_continue.dart
index 30f84bc..2ee10f6 100644
--- a/pkg/front_end/testcases/inference/switch_continue.dart
+++ b/pkg/front_end/testcases/inference/switch_continue.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/switch_continue.dart.textual_outline.expect b/pkg/front_end/testcases/inference/switch_continue.dart.textual_outline.expect
index 05c56c1..de6340a 100644
--- a/pkg/front_end/testcases/inference/switch_continue.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/switch_continue.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void test(int x, void f()) {}
diff --git a/pkg/front_end/testcases/inference/switch_continue.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/switch_continue.dart.textual_outline_modelled.expect
index 570eb3d..3712403 100644
--- a/pkg/front_end/testcases/inference/switch_continue.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/switch_continue.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/switch_continue.dart.weak.expect b/pkg/front_end/testcases/inference/switch_continue.dart.weak.expect
index 64406d0..aa4038a 100644
--- a/pkg/front_end/testcases/inference/switch_continue.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/switch_continue.dart.weak.expect
@@ -1,20 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test(core::int* x, () →* void f) → void {
+static method test(core::int x, () → void f) → void {
   #L1:
   switch(x) {
     #L2:
     case #C1:
       {
-        f(){() →* void};
+        f(){() → void};
         continue #L3;
       }
     #L3:
     case #C2:
       {
-        f(){() →* void};
+        f(){() → void};
         break #L1;
       }
   }
diff --git a/pkg/front_end/testcases/inference/switch_continue.dart.weak.modular.expect b/pkg/front_end/testcases/inference/switch_continue.dart.weak.modular.expect
index 64406d0..aa4038a 100644
--- a/pkg/front_end/testcases/inference/switch_continue.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/switch_continue.dart.weak.modular.expect
@@ -1,20 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test(core::int* x, () →* void f) → void {
+static method test(core::int x, () → void f) → void {
   #L1:
   switch(x) {
     #L2:
     case #C1:
       {
-        f(){() →* void};
+        f(){() → void};
         continue #L3;
       }
     #L3:
     case #C2:
       {
-        f(){() →* void};
+        f(){() → void};
         break #L1;
       }
   }
diff --git a/pkg/front_end/testcases/inference/switch_continue.dart.weak.outline.expect b/pkg/front_end/testcases/inference/switch_continue.dart.weak.outline.expect
index 972d948..4f84e4e 100644
--- a/pkg/front_end/testcases/inference/switch_continue.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/switch_continue.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test(core::int* x, () →* void f) → void
+static method test(core::int x, () → void f) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/switch_continue.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/switch_continue.dart.weak.transformed.expect
index 64406d0..aa4038a 100644
--- a/pkg/front_end/testcases/inference/switch_continue.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/switch_continue.dart.weak.transformed.expect
@@ -1,20 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test(core::int* x, () →* void f) → void {
+static method test(core::int x, () → void f) → void {
   #L1:
   switch(x) {
     #L2:
     case #C1:
       {
-        f(){() →* void};
+        f(){() → void};
         continue #L3;
       }
     #L3:
     case #C2:
       {
-        f(){() →* void};
+        f(){() → void};
         break #L1;
       }
   }
diff --git a/pkg/front_end/testcases/inference/symbol_literal.dart b/pkg/front_end/testcases/inference/symbol_literal.dart
index f5a5d24..7aeae82 100644
--- a/pkg/front_end/testcases/inference/symbol_literal.dart
+++ b/pkg/front_end/testcases/inference/symbol_literal.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void test() {
-  var /*@ type=Symbol* */ x = #foo;
+  var /*@type=Symbol*/ x = #foo;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/symbol_literal.dart.textual_outline.expect b/pkg/front_end/testcases/inference/symbol_literal.dart.textual_outline.expect
index dfdb7cb..a6bcf94 100644
--- a/pkg/front_end/testcases/inference/symbol_literal.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/symbol_literal.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void test() {}
diff --git a/pkg/front_end/testcases/inference/symbol_literal.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/symbol_literal.dart.textual_outline_modelled.expect
index 7d0b674..72a3ba0 100644
--- a/pkg/front_end/testcases/inference/symbol_literal.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/symbol_literal.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/symbol_literal.dart.weak.expect b/pkg/front_end/testcases/inference/symbol_literal.dart.weak.expect
index 1a4d6a8..b5bafd8 100644
--- a/pkg/front_end/testcases/inference/symbol_literal.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/symbol_literal.dart.weak.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::Symbol* x = #C1;
+  core::Symbol x = #C1;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/symbol_literal.dart.weak.modular.expect b/pkg/front_end/testcases/inference/symbol_literal.dart.weak.modular.expect
index 1a4d6a8..b5bafd8 100644
--- a/pkg/front_end/testcases/inference/symbol_literal.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/symbol_literal.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::Symbol* x = #C1;
+  core::Symbol x = #C1;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/symbol_literal.dart.weak.outline.expect b/pkg/front_end/testcases/inference/symbol_literal.dart.weak.outline.expect
index c74ce2b..01b7bf5 100644
--- a/pkg/front_end/testcases/inference/symbol_literal.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/symbol_literal.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/symbol_literal.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/symbol_literal.dart.weak.transformed.expect
index 1a4d6a8..b5bafd8 100644
--- a/pkg/front_end/testcases/inference/symbol_literal.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/symbol_literal.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::Symbol* x = #C1;
+  core::Symbol x = #C1;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/this_reference.dart b/pkg/front_end/testcases/inference/this_reference.dart
index 1d6bc7e..dc6c99c 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart
+++ b/pkg/front_end/testcases/inference/this_reference.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class C<T> {
   void f() {
-    var /*@ type=C<C::T*>* */ x = this;
+    var /*@type=C<C::T%>*/ x = this;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.textual_outline.expect b/pkg/front_end/testcases/inference/this_reference.dart.textual_outline.expect
index 131af67..c213951 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/this_reference.dart.textual_outline_modelled.expect
index 131af67..c213951 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.weak.expect b/pkg/front_end/testcases/inference/this_reference.dart.weak.expect
index 06fb537..7bb3d24 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method f() → void {
-    self::C<self::C::T*>* x = this;
+    self::C<self::C::T%> x = this;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/this_reference.dart.weak.modular.expect
index 06fb537..7bb3d24 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method f() → void {
-    self::C<self::C::T*>* x = this;
+    self::C<self::C::T%> x = this;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.weak.outline.expect b/pkg/front_end/testcases/inference/this_reference.dart.weak.outline.expect
index 393bcdd..2a9d1dd 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
   method f() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/this_reference.dart.weak.transformed.expect
index 06fb537..7bb3d24 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method f() → void {
-    self::C<self::C::T*>* x = this;
+    self::C<self::C::T%> x = this;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart
index e6392ab..1e4e6bc 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,7 +12,7 @@
 typedef int IntToInt(int i);
 
 IntToInt a() {
-  return /*@ returnType=int* */ (/*@ type=int* */ x) => x;
+  return /*@returnType=int**/ (/*@type=int**/ x) => x;
 }
 
 Future<IntToInt> b() async {
@@ -19,22 +21,22 @@
 }
 
 Iterable<IntToInt> c() sync* {
-  yield /*@ returnType=int* */ (/*@ type=int* */ x) => x;
+  yield /*@returnType=int**/ (/*@type=int**/ x) => x;
 }
 
 Iterable<IntToInt> d() sync* {
-  yield* /*@ typeArgs=(int*) ->* int* */ [
-    /*@ returnType=int* */ (/*@ type=int* */ x) => x
+  yield* /*@typeArgs=(int*) ->* int**/ [
+    /*@returnType=int**/ (/*@type=int**/ x) => x
   ];
 }
 
 Stream<IntToInt> e() async* {
-  yield /*@ returnType=int* */ (/*@ type=int* */ x) => x;
+  yield /*@returnType=int**/ (/*@type=int**/ x) => x;
 }
 
 Stream<IntToInt> f() async* {
-  yield* new /*@ typeArgs=(int*) ->* int* */ Stream.fromIterable(
-      /*@ typeArgs=(int*) ->* int* */ [/*@ returnType=int* */ (/*@ type=int* */ x) => x]);
+  yield* new /*@typeArgs=(int*) ->* int**/ Stream.fromIterable(
+      /*@typeArgs=(int*) ->* int**/ [/*@returnType=int**/ (/*@type=int**/ x) => x]);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.expect
index f7164a5..c4268b8 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+// pkg/front_end/testcases/inference/top_level_return_and_yield.dart:20:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
 //  - 'Future' is from 'dart:async'.
 //   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
 //                                    ^
@@ -18,7 +18,7 @@
   return (core::int* x) → core::int* => x;
 }
 static method b() → asy::Future<(core::int*) →* core::int*>* async /* futureValueType= (core::int*) →* core::int* */ {
-  return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+  return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:20:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
                                    ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.modular.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.modular.expect
index f7164a5..c4268b8 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.modular.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+// pkg/front_end/testcases/inference/top_level_return_and_yield.dart:20:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
 //  - 'Future' is from 'dart:async'.
 //   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
 //                                    ^
@@ -18,7 +18,7 @@
   return (core::int* x) → core::int* => x;
 }
 static method b() → asy::Future<(core::int*) →* core::int*>* async /* futureValueType= (core::int*) →* core::int* */ {
-  return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+  return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:20:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
                                    ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
index ab01829..7280d25 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+// pkg/front_end/testcases/inference/top_level_return_and_yield.dart:20:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
 //  - 'Future' is from 'dart:async'.
 //   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
 //                                    ^
@@ -18,7 +18,7 @@
   return (core::int* x) → core::int* => x;
 }
 static method b() → asy::Future<(core::int*) →* core::int*>* async /* futureValueType= (core::int*) →* core::int* */ {
-  return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+  return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:20:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
                                    ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart
new file mode 100644
index 0000000..e6fd67e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart
@@ -0,0 +1,40 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+import 'dart:async';
+
+typedef int IntToInt(int i);
+
+IntToInt a() {
+  return /*@returnType=int*/ (/*@type=int*/ x) => x;
+}
+
+Future<IntToInt> b() async {
+  // TODO(paulberry): this is broken due to bug 29689.
+  return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+}
+
+Iterable<IntToInt> c() sync* {
+  yield /*@returnType=int*/ (/*@type=int*/ x) => x;
+}
+
+Iterable<IntToInt> d() sync* {
+  yield* /*@typeArgs=(int) -> int*/ [
+    /*@returnType=int*/ (/*@type=int*/ x) => x
+  ];
+}
+
+Stream<IntToInt> e() async* {
+  yield /*@returnType=int*/ (/*@type=int*/ x) => x;
+}
+
+Stream<IntToInt> f() async* {
+  yield* new /*@typeArgs=(int) -> int*/ Stream.fromIterable(
+      /*@typeArgs=(int) -> int*/ [/*@returnType=int*/ (/*@type=int*/ x) => x]);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.textual_outline.expect
new file mode 100644
index 0000000..505dfb3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.textual_outline.expect
@@ -0,0 +1,12 @@
+library test;
+
+import 'dart:async';
+
+typedef int IntToInt(int i);
+IntToInt a() {}
+Future<IntToInt> b() async {}
+Iterable<IntToInt> c() sync* {}
+Iterable<IntToInt> d() sync* {}
+Stream<IntToInt> e() async* {}
+Stream<IntToInt> f() async* {}
+main() {}
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1047aa8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+library test;
+
+import 'dart:async';
+
+Future<IntToInt> b() async {}
+IntToInt a() {}
+Iterable<IntToInt> c() sync* {}
+Iterable<IntToInt> d() sync* {}
+Stream<IntToInt> e() async* {}
+Stream<IntToInt> f() async* {}
+main() {}
+typedef int IntToInt(int i);
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.weak.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.weak.expect
new file mode 100644
index 0000000..6d988db
--- /dev/null
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.weak.expect
@@ -0,0 +1,38 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/top_level_return_and_yield2.dart:18:36: Error: A value of type 'dynamic Function(dynamic)' can't be returned from an async function with return type 'Future<int Function(int)>'.
+//  - 'Future' is from 'dart:async'.
+//   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+//                                    ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+typedef IntToInt = (core::int) → core::int;
+static method a() → (core::int) → core::int {
+  return (core::int x) → core::int => x;
+}
+static method b() → asy::Future<(core::int) → core::int> async /* futureValueType= (core::int) → core::int */ {
+  return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield2.dart:18:36: Error: A value of type 'dynamic Function(dynamic)' can't be returned from an async function with return type 'Future<int Function(int)>'.
+ - 'Future' is from 'dart:async'.
+  return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+                                   ^" in ((dynamic x) → dynamic => x) as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
+}
+static method c() → core::Iterable<(core::int) → core::int> sync* {
+  yield(core::int x) → core::int => x;
+}
+static method d() → core::Iterable<(core::int) → core::int> sync* {
+  yield*<(core::int) → core::int>[(core::int x) → core::int => x];
+}
+static method e() → asy::Stream<(core::int) → core::int> async* {
+  yield(core::int x) → core::int => x;
+}
+static method f() → asy::Stream<(core::int) → core::int> async* {
+  yield* asy::Stream::fromIterable<(core::int) → core::int>(<(core::int) → core::int>[(core::int x) → core::int => x]);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.weak.modular.expect
new file mode 100644
index 0000000..6d988db
--- /dev/null
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/top_level_return_and_yield2.dart:18:36: Error: A value of type 'dynamic Function(dynamic)' can't be returned from an async function with return type 'Future<int Function(int)>'.
+//  - 'Future' is from 'dart:async'.
+//   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+//                                    ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+typedef IntToInt = (core::int) → core::int;
+static method a() → (core::int) → core::int {
+  return (core::int x) → core::int => x;
+}
+static method b() → asy::Future<(core::int) → core::int> async /* futureValueType= (core::int) → core::int */ {
+  return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield2.dart:18:36: Error: A value of type 'dynamic Function(dynamic)' can't be returned from an async function with return type 'Future<int Function(int)>'.
+ - 'Future' is from 'dart:async'.
+  return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+                                   ^" in ((dynamic x) → dynamic => x) as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
+}
+static method c() → core::Iterable<(core::int) → core::int> sync* {
+  yield(core::int x) → core::int => x;
+}
+static method d() → core::Iterable<(core::int) → core::int> sync* {
+  yield*<(core::int) → core::int>[(core::int x) → core::int => x];
+}
+static method e() → asy::Stream<(core::int) → core::int> async* {
+  yield(core::int x) → core::int => x;
+}
+static method f() → asy::Stream<(core::int) → core::int> async* {
+  yield* asy::Stream::fromIterable<(core::int) → core::int>(<(core::int) → core::int>[(core::int x) → core::int => x]);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.weak.outline.expect
new file mode 100644
index 0000000..81d8af6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.weak.outline.expect
@@ -0,0 +1,22 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+typedef IntToInt = (core::int) → core::int;
+static method a() → (core::int) → core::int
+  ;
+static method b() → asy::Future<(core::int) → core::int> async 
+  ;
+static method c() → core::Iterable<(core::int) → core::int> sync* 
+  ;
+static method d() → core::Iterable<(core::int) → core::int> sync* 
+  ;
+static method e() → asy::Stream<(core::int) → core::int> async* 
+  ;
+static method f() → asy::Stream<(core::int) → core::int> async* 
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.weak.transformed.expect
new file mode 100644
index 0000000..cdc7727
--- /dev/null
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield2.dart.weak.transformed.expect
@@ -0,0 +1,38 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/top_level_return_and_yield2.dart:18:36: Error: A value of type 'dynamic Function(dynamic)' can't be returned from an async function with return type 'Future<int Function(int)>'.
+//  - 'Future' is from 'dart:async'.
+//   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+//                                    ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+typedef IntToInt = (core::int) → core::int;
+static method a() → (core::int) → core::int {
+  return (core::int x) → core::int => x;
+}
+static method b() → asy::Future<(core::int) → core::int> async /* futureValueType= (core::int) → core::int */ {
+  return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield2.dart:18:36: Error: A value of type 'dynamic Function(dynamic)' can't be returned from an async function with return type 'Future<int Function(int)>'.
+ - 'Future' is from 'dart:async'.
+  return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+                                   ^" in ((dynamic x) → dynamic => x) as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
+}
+static method c() → core::Iterable<(core::int) → core::int> sync* {
+  yield(core::int x) → core::int => x;
+}
+static method d() → core::Iterable<(core::int) → core::int> sync* {
+  yield* core::_GrowableList::_literal1<(core::int) → core::int>((core::int x) → core::int => x);
+}
+static method e() → asy::Stream<(core::int) → core::int> async* {
+  yield(core::int x) → core::int => x;
+}
+static method f() → asy::Stream<(core::int) → core::int> async* {
+  yield* asy::Stream::fromIterable<(core::int) → core::int>(core::_GrowableList::_literal1<(core::int) → core::int>((core::int x) → core::int => x));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart
index ba895ed..80477d3 100644
--- a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart
+++ b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart
@@ -1,12 +1,12 @@
 // 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.md file.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 var i = 0;
 
 main() {
-  var /*@ type=int* */ j = i;
+  var /*@type=int*/ j = i;
 }
diff --git a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.textual_outline.expect b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.textual_outline.expect
index 0dfdb8d..8a7c345 100644
--- a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var i = 0;
diff --git a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.textual_outline_modelled.expect
index 65505f3..13c449d 100644
--- a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.expect b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.expect
index 9ab8405..04c37f0 100644
--- a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* i = 0;
+static field core::int i = 0;
 static method main() → dynamic {
-  core::int* j = self::i;
+  core::int j = self::i;
 }
diff --git a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.modular.expect b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.modular.expect
index 9ab8405..04c37f0 100644
--- a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* i = 0;
+static field core::int i = 0;
 static method main() → dynamic {
-  core::int* j = self::i;
+  core::int j = self::i;
 }
diff --git a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.outline.expect b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.outline.expect
index e393ff8..09d7466 100644
--- a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* i;
+static field core::int i;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.transformed.expect
index 9ab8405..04c37f0 100644
--- a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* i = 0;
+static field core::int i = 0;
 static method main() → dynamic {
-  core::int* j = self::i;
+  core::int j = self::i;
 }
diff --git a/pkg/front_end/testcases/inference/try_catch.dart b/pkg/front_end/testcases/inference/try_catch.dart
index 383b979..99f93f3 100644
--- a/pkg/front_end/testcases/inference/try_catch.dart
+++ b/pkg/front_end/testcases/inference/try_catch.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -13,18 +13,18 @@
 
 void test(void f()) {
   try {
-    var /*@ type=int* */ x = 0;
+    var /*@type=int*/ x = 0;
     f();
   } on C {
-    var /*@ type=int* */ x = 0;
+    var /*@type=int*/ x = 0;
   } on D catch (x) {
-    var /*@ type=D* */ x2 = x;
+    var /*@type=D*/ x2 = x;
   } on E catch (x, y) {
-    var /*@ type=E* */ x2 = x;
-    var /*@ type=StackTrace* */ y2 = y;
+    var /*@type=E*/ x2 = x;
+    var /*@type=StackTrace*/ y2 = y;
   } catch (x, y) {
-    var /*@ type=dynamic */ x2 = x;
-    var /*@ type=StackTrace* */ y2 = y;
+    var /*@type=Object*/ x2 = x;
+    var /*@type=StackTrace*/ y2 = y;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/try_catch.dart.textual_outline.expect b/pkg/front_end/testcases/inference/try_catch.dart.textual_outline.expect
index 3b9581f..e8f8435 100644
--- a/pkg/front_end/testcases/inference/try_catch.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/try_catch.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {}
diff --git a/pkg/front_end/testcases/inference/try_catch.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/try_catch.dart.textual_outline_modelled.expect
index c8e93cd..19f476f 100644
--- a/pkg/front_end/testcases/inference/try_catch.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/try_catch.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {}
diff --git a/pkg/front_end/testcases/inference/try_catch.dart.weak.expect b/pkg/front_end/testcases/inference/try_catch.dart.weak.expect
index 086e91e..e2ab9d0 100644
--- a/pkg/front_end/testcases/inference/try_catch.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/try_catch.dart.weak.expect
@@ -1,70 +1,40 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(() →* void f) → void {
+static method test(() → void f) → void {
   try {
-    core::int* x = 0;
-    f(){() →* void};
+    core::int x = 0;
+    f(){() → void};
   }
-  on self::C* catch(no-exception-var) {
-    core::int* x = 0;
+  on self::C catch(no-exception-var) {
+    core::int x = 0;
   }
-  on self::D* catch(final self::D* x) {
-    self::D* x2 = x;
+  on self::D catch(final self::D x) {
+    self::D x2 = x;
   }
-  on self::E* catch(final self::E* x, final core::StackTrace* y) {
-    self::E* x2 = x;
-    core::StackTrace* y2 = y;
+  on self::E catch(final self::E x, final core::StackTrace y) {
+    self::E x2 = x;
+    core::StackTrace y2 = y;
   }
-  on dynamic catch(final dynamic x, final core::StackTrace* y) {
-    dynamic x2 = x;
-    core::StackTrace* y2 = y;
+  on core::Object catch(final core::Object x, final core::StackTrace y) {
+    core::Object x2 = x;
+    core::StackTrace y2 = y;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/try_catch.dart.weak.modular.expect b/pkg/front_end/testcases/inference/try_catch.dart.weak.modular.expect
index 086e91e..e2ab9d0 100644
--- a/pkg/front_end/testcases/inference/try_catch.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/try_catch.dart.weak.modular.expect
@@ -1,70 +1,40 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(() →* void f) → void {
+static method test(() → void f) → void {
   try {
-    core::int* x = 0;
-    f(){() →* void};
+    core::int x = 0;
+    f(){() → void};
   }
-  on self::C* catch(no-exception-var) {
-    core::int* x = 0;
+  on self::C catch(no-exception-var) {
+    core::int x = 0;
   }
-  on self::D* catch(final self::D* x) {
-    self::D* x2 = x;
+  on self::D catch(final self::D x) {
+    self::D x2 = x;
   }
-  on self::E* catch(final self::E* x, final core::StackTrace* y) {
-    self::E* x2 = x;
-    core::StackTrace* y2 = y;
+  on self::E catch(final self::E x, final core::StackTrace y) {
+    self::E x2 = x;
+    core::StackTrace y2 = y;
   }
-  on dynamic catch(final dynamic x, final core::StackTrace* y) {
-    dynamic x2 = x;
-    core::StackTrace* y2 = y;
+  on core::Object catch(final core::Object x, final core::StackTrace y) {
+    core::Object x2 = x;
+    core::StackTrace y2 = y;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/try_catch.dart.weak.outline.expect b/pkg/front_end/testcases/inference/try_catch.dart.weak.outline.expect
index bf05fd8..a514399 100644
--- a/pkg/front_end/testcases/inference/try_catch.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/try_catch.dart.weak.outline.expect
@@ -1,50 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(() →* void f) → void
+static method test(() → void f) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/try_catch.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/try_catch.dart.weak.transformed.expect
index 086e91e..e2ab9d0 100644
--- a/pkg/front_end/testcases/inference/try_catch.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/try_catch.dart.weak.transformed.expect
@@ -1,70 +1,40 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(() →* void f) → void {
+static method test(() → void f) → void {
   try {
-    core::int* x = 0;
-    f(){() →* void};
+    core::int x = 0;
+    f(){() → void};
   }
-  on self::C* catch(no-exception-var) {
-    core::int* x = 0;
+  on self::C catch(no-exception-var) {
+    core::int x = 0;
   }
-  on self::D* catch(final self::D* x) {
-    self::D* x2 = x;
+  on self::D catch(final self::D x) {
+    self::D x2 = x;
   }
-  on self::E* catch(final self::E* x, final core::StackTrace* y) {
-    self::E* x2 = x;
-    core::StackTrace* y2 = y;
+  on self::E catch(final self::E x, final core::StackTrace y) {
+    self::E x2 = x;
+    core::StackTrace y2 = y;
   }
-  on dynamic catch(final dynamic x, final core::StackTrace* y) {
-    dynamic x2 = x;
-    core::StackTrace* y2 = y;
+  on core::Object catch(final core::Object x, final core::StackTrace y) {
+    core::Object x2 = x;
+    core::StackTrace y2 = y;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart b/pkg/front_end/testcases/inference/try_catch_finally.dart
index df54b68..43bb6f7 100644
--- a/pkg/front_end/testcases/inference/try_catch_finally.dart
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -13,20 +13,20 @@
 
 void test(void f()) {
   try {
-    var /*@ type=int* */ x = 0;
+    var /*@type=int*/ x = 0;
     f();
   } on C {
-    var /*@ type=int* */ x = 0;
+    var /*@type=int*/ x = 0;
   } on D catch (x) {
-    var /*@ type=D* */ x2 = x;
+    var /*@type=D*/ x2 = x;
   } on E catch (x, y) {
-    var /*@ type=E* */ x2 = x;
-    var /*@ type=StackTrace* */ y2 = y;
+    var /*@type=E*/ x2 = x;
+    var /*@type=StackTrace*/ y2 = y;
   } catch (x, y) {
-    var /*@ type=dynamic */ x2 = x;
-    var /*@ type=StackTrace* */ y2 = y;
+    var /*@type=Object*/ x2 = x;
+    var /*@type=StackTrace*/ y2 = y;
   } finally {
-    var /*@ type=int* */ x = 0;
+    var /*@type=int*/ x = 0;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart.textual_outline.expect b/pkg/front_end/testcases/inference/try_catch_finally.dart.textual_outline.expect
index 3b9581f..e8f8435 100644
--- a/pkg/front_end/testcases/inference/try_catch_finally.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {}
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/try_catch_finally.dart.textual_outline_modelled.expect
index c8e93cd..19f476f 100644
--- a/pkg/front_end/testcases/inference/try_catch_finally.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {}
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.expect b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.expect
index 62db44d..6d425de 100644
--- a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.expect
@@ -1,74 +1,44 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(() →* void f) → void {
+static method test(() → void f) → void {
   try
     try {
-      core::int* x = 0;
-      f(){() →* void};
+      core::int x = 0;
+      f(){() → void};
     }
-    on self::C* catch(no-exception-var) {
-      core::int* x = 0;
+    on self::C catch(no-exception-var) {
+      core::int x = 0;
     }
-    on self::D* catch(final self::D* x) {
-      self::D* x2 = x;
+    on self::D catch(final self::D x) {
+      self::D x2 = x;
     }
-    on self::E* catch(final self::E* x, final core::StackTrace* y) {
-      self::E* x2 = x;
-      core::StackTrace* y2 = y;
+    on self::E catch(final self::E x, final core::StackTrace y) {
+      self::E x2 = x;
+      core::StackTrace y2 = y;
     }
-    on dynamic catch(final dynamic x, final core::StackTrace* y) {
-      dynamic x2 = x;
-      core::StackTrace* y2 = y;
+    on core::Object catch(final core::Object x, final core::StackTrace y) {
+      core::Object x2 = x;
+      core::StackTrace y2 = y;
     }
   finally {
-    core::int* x = 0;
+    core::int x = 0;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.modular.expect b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.modular.expect
index 62db44d..6d425de 100644
--- a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.modular.expect
@@ -1,74 +1,44 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(() →* void f) → void {
+static method test(() → void f) → void {
   try
     try {
-      core::int* x = 0;
-      f(){() →* void};
+      core::int x = 0;
+      f(){() → void};
     }
-    on self::C* catch(no-exception-var) {
-      core::int* x = 0;
+    on self::C catch(no-exception-var) {
+      core::int x = 0;
     }
-    on self::D* catch(final self::D* x) {
-      self::D* x2 = x;
+    on self::D catch(final self::D x) {
+      self::D x2 = x;
     }
-    on self::E* catch(final self::E* x, final core::StackTrace* y) {
-      self::E* x2 = x;
-      core::StackTrace* y2 = y;
+    on self::E catch(final self::E x, final core::StackTrace y) {
+      self::E x2 = x;
+      core::StackTrace y2 = y;
     }
-    on dynamic catch(final dynamic x, final core::StackTrace* y) {
-      dynamic x2 = x;
-      core::StackTrace* y2 = y;
+    on core::Object catch(final core::Object x, final core::StackTrace y) {
+      core::Object x2 = x;
+      core::StackTrace y2 = y;
     }
   finally {
-    core::int* x = 0;
+    core::int x = 0;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.outline.expect b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.outline.expect
index bf05fd8..a514399 100644
--- a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.outline.expect
@@ -1,50 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(() →* void f) → void
+static method test(() → void f) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.transformed.expect
index 62db44d..6d425de 100644
--- a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.transformed.expect
@@ -1,74 +1,44 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(() →* void f) → void {
+static method test(() → void f) → void {
   try
     try {
-      core::int* x = 0;
-      f(){() →* void};
+      core::int x = 0;
+      f(){() → void};
     }
-    on self::C* catch(no-exception-var) {
-      core::int* x = 0;
+    on self::C catch(no-exception-var) {
+      core::int x = 0;
     }
-    on self::D* catch(final self::D* x) {
-      self::D* x2 = x;
+    on self::D catch(final self::D x) {
+      self::D x2 = x;
     }
-    on self::E* catch(final self::E* x, final core::StackTrace* y) {
-      self::E* x2 = x;
-      core::StackTrace* y2 = y;
+    on self::E catch(final self::E x, final core::StackTrace y) {
+      self::E x2 = x;
+      core::StackTrace y2 = y;
     }
-    on dynamic catch(final dynamic x, final core::StackTrace* y) {
-      dynamic x2 = x;
-      core::StackTrace* y2 = y;
+    on core::Object catch(final core::Object x, final core::StackTrace y) {
+      core::Object x2 = x;
+      core::StackTrace y2 = y;
     }
   finally {
-    core::int* x = 0;
+    core::int x = 0;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/try_catch_promotion.dart b/pkg/front_end/testcases/inference/try_catch_promotion.dart
index c6f6a1a..17f1e21 100644
--- a/pkg/front_end/testcases/inference/try_catch_promotion.dart
+++ b/pkg/front_end/testcases/inference/try_catch_promotion.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -15,13 +17,13 @@
   try {
     f();
   } on C catch (x, y) {
-    var /*@ type=C* */ x1 = x;
-    var /*@ type=StackTrace* */ y1 = y;
+    var /*@type=C**/ x1 = x;
+    var /*@type=StackTrace**/ y1 = y;
     if (x is D) {
-      var /*@ type=D* */ x2 = /*@ promotedType=D* */ x;
+      var /*@type=D**/ x2 = /*@promotedType=D**/ x;
     }
     if (y is E) {
-      var /*@ type=E* */ y2 = /*@ promotedType=E* */ y;
+      var /*@type=E**/ y2 = /*@promotedType=E**/ y;
     }
   }
 }
diff --git a/pkg/front_end/testcases/inference/try_finally.dart b/pkg/front_end/testcases/inference/try_finally.dart
index 86f84bd..e8b537f 100644
--- a/pkg/front_end/testcases/inference/try_finally.dart
+++ b/pkg/front_end/testcases/inference/try_finally.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 void test(void f()) {
   try {
-    var /*@ type=int* */ x = 0;
+    var /*@type=int*/ x = 0;
     f();
   } finally {
-    var /*@ type=int* */ x = 0;
+    var /*@type=int*/ x = 0;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference/try_finally.dart.textual_outline.expect b/pkg/front_end/testcases/inference/try_finally.dart.textual_outline.expect
index 87274b7..4323848 100644
--- a/pkg/front_end/testcases/inference/try_finally.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/try_finally.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 void test(void f()) {}
diff --git a/pkg/front_end/testcases/inference/try_finally.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/try_finally.dart.textual_outline_modelled.expect
index b971a45..6847854 100644
--- a/pkg/front_end/testcases/inference/try_finally.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/try_finally.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/try_finally.dart.weak.expect b/pkg/front_end/testcases/inference/try_finally.dart.weak.expect
index f52f88a..7335aff 100644
--- a/pkg/front_end/testcases/inference/try_finally.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/try_finally.dart.weak.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test(() →* void f) → void {
+static method test(() → void f) → void {
   try {
-    core::int* x = 0;
-    f(){() →* void};
+    core::int x = 0;
+    f(){() → void};
   }
   finally {
-    core::int* x = 0;
+    core::int x = 0;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/try_finally.dart.weak.modular.expect b/pkg/front_end/testcases/inference/try_finally.dart.weak.modular.expect
index f52f88a..7335aff 100644
--- a/pkg/front_end/testcases/inference/try_finally.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/try_finally.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test(() →* void f) → void {
+static method test(() → void f) → void {
   try {
-    core::int* x = 0;
-    f(){() →* void};
+    core::int x = 0;
+    f(){() → void};
   }
   finally {
-    core::int* x = 0;
+    core::int x = 0;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/try_finally.dart.weak.outline.expect b/pkg/front_end/testcases/inference/try_finally.dart.weak.outline.expect
index c6c205c..b789ad0 100644
--- a/pkg/front_end/testcases/inference/try_finally.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/try_finally.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
-static method test(() →* void f) → void
+static method test(() → void f) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/try_finally.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/try_finally.dart.weak.transformed.expect
index f52f88a..7335aff 100644
--- a/pkg/front_end/testcases/inference/try_finally.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/try_finally.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method test(() →* void f) → void {
+static method test(() → void f) → void {
   try {
-    core::int* x = 0;
-    f(){() →* void};
+    core::int x = 0;
+    f(){() → void};
   }
   finally {
-    core::int* x = 0;
+    core::int x = 0;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/type_cast.dart b/pkg/front_end/testcases/inference/type_cast.dart
index 65172d7..d55a1cc 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart
+++ b/pkg/front_end/testcases/inference/type_cast.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -16,5 +16,5 @@
 
 main() {
   A<num> a = new B<int>();
-  var /*@ type=B<int*>* */ b = (a as B<int>);
+  var /*@type=B<int>*/ b = (a as B<int>);
 }
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.textual_outline.expect b/pkg/front_end/testcases/inference/type_cast.dart.textual_outline.expect
index c8bac54..eccaf58 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {}
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/type_cast.dart.textual_outline_modelled.expect
index a1a2462..5483162 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 A<num> a = new B<int>();
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.weak.expect b/pkg/front_end/testcases/inference/type_cast.dart.weak.expect
index 4d12ac0..d8a38d3 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.weak.expect
@@ -1,31 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+  synthetic constructor •() → self::B<self::B::T%>
     : super self::A::•()
     ;
   method foo() → dynamic {}
 }
-static field self::A<core::num*>* a = new self::B::•<core::int*>();
-static field self::B<core::int*>* b = self::a as self::B<core::int*>*;
+static field self::A<core::num> a = new self::B::•<core::int>();
+static field self::B<core::int> b = self::a as{ForNonNullableByDefault} self::B<core::int>;
 static method main() → dynamic {
-  self::A<core::num*>* a = new self::B::•<core::int*>();
-  self::B<core::int*>* b = a as self::B<core::int*>*;
+  self::A<core::num> a = new self::B::•<core::int>();
+  self::B<core::int> b = a as{ForNonNullableByDefault} self::B<core::int>;
 }
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.weak.modular.expect b/pkg/front_end/testcases/inference/type_cast.dart.weak.modular.expect
index 4d12ac0..d8a38d3 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.weak.modular.expect
@@ -1,31 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+  synthetic constructor •() → self::B<self::B::T%>
     : super self::A::•()
     ;
   method foo() → dynamic {}
 }
-static field self::A<core::num*>* a = new self::B::•<core::int*>();
-static field self::B<core::int*>* b = self::a as self::B<core::int*>*;
+static field self::A<core::num> a = new self::B::•<core::int>();
+static field self::B<core::int> b = self::a as{ForNonNullableByDefault} self::B<core::int>;
 static method main() → dynamic {
-  self::A<core::num*>* a = new self::B::•<core::int*>();
-  self::B<core::int*>* b = a as self::B<core::int*>*;
+  self::A<core::num> a = new self::B::•<core::int>();
+  self::B<core::int> b = a as{ForNonNullableByDefault} self::B<core::int>;
 }
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.weak.outline.expect b/pkg/front_end/testcases/inference/type_cast.dart.weak.outline.expect
index 236dd5e..12ac830 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.weak.outline.expect
@@ -1,28 +1,18 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
   method foo() → dynamic
     ;
 }
-static field self::A<core::num*>* a;
-static field self::B<core::int*>* b;
+static field self::A<core::num> a;
+static field self::B<core::int> b;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/type_cast.dart.weak.transformed.expect
index 4d12ac0..d8a38d3 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.weak.transformed.expect
@@ -1,31 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+  synthetic constructor •() → self::B<self::B::T%>
     : super self::A::•()
     ;
   method foo() → dynamic {}
 }
-static field self::A<core::num*>* a = new self::B::•<core::int*>();
-static field self::B<core::int*>* b = self::a as self::B<core::int*>*;
+static field self::A<core::num> a = new self::B::•<core::int>();
+static field self::B<core::int> b = self::a as{ForNonNullableByDefault} self::B<core::int>;
 static method main() → dynamic {
-  self::A<core::num*>* a = new self::B::•<core::int*>();
-  self::B<core::int*>* b = a as self::B<core::int*>*;
+  self::A<core::num> a = new self::B::•<core::int>();
+  self::B<core::int> b = a as{ForNonNullableByDefault} self::B<core::int>;
 }
diff --git a/pkg/front_end/testcases/inference/type_promotion_ignores_local_functions.dart b/pkg/front_end/testcases/inference/type_promotion_ignores_local_functions.dart
index e2b7d13..1a28c35 100644
--- a/pkg/front_end/testcases/inference/type_promotion_ignores_local_functions.dart
+++ b/pkg/front_end/testcases/inference/type_promotion_ignores_local_functions.dart
@@ -1,7 +1,9 @@
 // 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.md file.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/type_promotion_not_and_not.dart b/pkg/front_end/testcases/inference/type_promotion_not_and_not.dart
index b8f5425..fc62a68 100644
--- a/pkg/front_end/testcases/inference/type_promotion_not_and_not.dart
+++ b/pkg/front_end/testcases/inference/type_promotion_not_and_not.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference/type_promotion_simple.dart b/pkg/front_end/testcases/inference/type_promotion_simple.dart
index c5c3a3f..59b05ef 100644
--- a/pkg/front_end/testcases/inference/type_promotion_simple.dart
+++ b/pkg/front_end/testcases/inference/type_promotion_simple.dart
@@ -1,13 +1,15 @@
 // 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.md file.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
   num n = null;
   if (n is int) {
-    var /*@ type=int* */ i = /*@ promotedType=int* */ n;
+    var /*@type=int**/ i = /*@promotedType=int**/ n;
   }
 }
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart b/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart
index 48dd5f7..1727cb6 100644
--- a/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart
@@ -1,14 +1,16 @@
 // 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.md file.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
   num n = null;
   if (n is int) {
-    var /*@ type=num* */ i = n;
+    var /*@type=num**/ i = n;
     /*@ returnType=Null */ () {
       n;
     };
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart b/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart
index aa596ba..b1f351c 100644
--- a/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart
@@ -1,14 +1,16 @@
 // 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.md file.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
   num n = null;
   if (n is int) {
-    var /*@ type=num* */ i = n;
+    var /*@type=num**/ i = n;
     n = null;
   }
 }
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart b/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart
index 003e763..7edd92a 100644
--- a/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart
@@ -1,14 +1,16 @@
 // 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.md file.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
   num n = null;
   if (n is int) {
-    var /*@ type=num* */ i = n;
+    var /*@type=num**/ i = n;
   }
   /*@ returnType=Null */ () {
     n = null;
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart b/pkg/front_end/testcases/inference/unresolved_super.dart
index c8bbcea..e8ead1e 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C {
   void test() {
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.textual_outline.expect
index 1d34480..29102fa 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C {
   void test() {}
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.textual_outline_modelled.expect
index 1d34480..29102fa 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C {
   void test() {}
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.weak.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.weak.expect
index cd24891..4a2bde0 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method test() → void {
@@ -18,17 +18,7 @@
     var /*@type=invalid-type*/ v5 = super[0] = f();
                                          ^";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.weak.modular.expect
index cd24891..4a2bde0 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method test() → void {
@@ -18,17 +18,7 @@
     var /*@type=invalid-type*/ v5 = super[0] = f();
                                          ^";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.weak.outline.expect
index 8a9d429..f8ec4f2 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method test() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.weak.transformed.expect
index cd24891..4a2bde0 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method test() → void {
@@ -18,17 +18,7 @@
     var /*@type=invalid-type*/ v5 = super[0] = f();
                                          ^";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart
index fc2146f..851e724 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=double* */ v = (/*@ returnType=double* */ (/*@ type=dynamic */ x) =>
-      1.0)(/*@ returnType=int* */ () {
+  var /*@type=double*/ v = (/*@returnType=double*/ (/*@ type=dynamic */ x) =>
+      1.0)(/*@returnType=int*/ () {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.expect
index 4c0ed46..849ee92 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = ((dynamic x) → core::double* => 1.0)(() → core::int* {
+  core::double v = ((dynamic x) → core::double => 1.0)(() → core::int {
     return 1;
-  }){(dynamic) →* core::double*};
+  }){(dynamic) → core::double};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.modular.expect
index 4c0ed46..849ee92 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = ((dynamic x) → core::double* => 1.0)(() → core::int* {
+  core::double v = ((dynamic x) → core::double => 1.0)(() → core::int {
     return 1;
-  }){(dynamic) →* core::double*};
+  }){(dynamic) → core::double};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.transformed.expect
index 4c0ed46..849ee92 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = ((dynamic x) → core::double* => 1.0)(() → core::int* {
+  core::double v = ((dynamic x) → core::double => 1.0)(() → core::int {
     return 1;
-  }){(dynamic) →* core::double*};
+  }){(dynamic) → core::double};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart
index 5272cf0..208b13d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
   C(T x());
 }
 
-var v = new C<dynamic>(/*@ returnType=int* */ () {
+var v = new C<dynamic>(/*@returnType=int*/ () {
   return 1;
 });
 
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.textual_outline.expect
index ba4ca77..94fe6c8 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.textual_outline_modelled.expect
index c607d85..faaeac6 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.expect
index e65f4933..1ac66e6 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → self::C::T% x) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<dynamic>* v = new self::C::•<dynamic>(() → core::int* {
+static field self::C<dynamic> v = new self::C::•<dynamic>(() → core::int {
   return 1;
 });
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.modular.expect
index e65f4933..1ac66e6 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → self::C::T% x) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<dynamic>* v = new self::C::•<dynamic>(() → core::int* {
+static field self::C<dynamic> v = new self::C::•<dynamic>(() → core::int {
   return 1;
 });
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.outline.expect
index a131948..8416714 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → self::C::T% x) → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<dynamic>* v;
+static field self::C<dynamic> v;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.transformed.expect
index e65f4933..1ac66e6 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → self::C::T% x) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<dynamic>* v = new self::C::•<dynamic>(() → core::int* {
+static field self::C<dynamic> v = new self::C::•<dynamic>(() → core::int {
   return 1;
 });
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart
index cd18e11..e59070e 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
   C(T x());
 }
 
-var v = new C<int>(/*@ returnType=int* */ () {
+var v = new C<int>(/*@returnType=int*/ () {
   return 1;
 });
 
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.textual_outline.expect
index bc6481e..045c2e8 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.textual_outline_modelled.expect
index c66d6cd..7917d91 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.expect
index 156c565..5657af1 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → self::C::T% x) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<core::int*>* v = new self::C::•<core::int*>(() → core::int* {
+static field self::C<core::int> v = new self::C::•<core::int>(() → core::int {
   return 1;
 });
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.modular.expect
index 156c565..5657af1 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → self::C::T% x) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<core::int*>* v = new self::C::•<core::int*>(() → core::int* {
+static field self::C<core::int> v = new self::C::•<core::int>(() → core::int {
   return 1;
 });
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.outline.expect
index 1341c19..7275807 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → self::C::T% x) → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<core::int*>* v;
+static field self::C<core::int> v;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.transformed.expect
index 156c565..5657af1 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → self::C::T% x) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<core::int*>* v = new self::C::•<core::int*>(() → core::int* {
+static field self::C<core::int> v = new self::C::•<core::int>(() → core::int {
   return 1;
 });
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart
index 115db3d..4a18501 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,8 +10,8 @@
 }
 
 main() {
-  var /*@ type=C<int*>* */ v = new /*@ typeArgs=int* */ C(
-      /*@ returnType=int* */ () {
+  var /*@type=C<int>*/ v = new /*@typeArgs=int*/ C(
+      /*@returnType=int*/ () {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.textual_outline.expect
index 59da5f7..db10511 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.textual_outline_modelled.expect
index 59da5f7..db10511 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.expect
index 0e7282f..55bbcb3 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → self::C::T% x) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* v = new self::C::•<core::int*>(() → core::int* {
+  self::C<core::int> v = new self::C::•<core::int>(() → core::int {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.modular.expect
index 0e7282f..55bbcb3 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.modular.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → self::C::T% x) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* v = new self::C::•<core::int*>(() → core::int* {
+  self::C<core::int> v = new self::C::•<core::int>(() → core::int {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.outline.expect
index 080a3ad6..30cf3cb 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → self::C::T% x) → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.transformed.expect
index 0e7282f..55bbcb3 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.transformed.expect
@@ -1,24 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → self::C::T% x) → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::int*>* v = new self::C::•<core::int*>(() → core::int* {
+  self::C<core::int> v = new self::C::•<core::int>(() → core::int {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart
index 6204139..0c85e2f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
   C(x());
 }
 
-var v = new C(/*@ returnType=int* */ () {
+var v = new C(/*@returnType=int*/ () {
   return 1;
 });
 
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.textual_outline.expect
index 368cf47..77314e89 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.textual_outline_modelled.expect
index fceca5d..b916948 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.expect
index 939c023..3204265 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •(() →* dynamic x) → self::C*
+  constructor •(() → dynamic x) → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* v = new self::C::•(() → core::int* {
+static field self::C v = new self::C::•(() → core::int {
   return 1;
 });
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.modular.expect
index 939c023..3204265 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •(() →* dynamic x) → self::C*
+  constructor •(() → dynamic x) → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* v = new self::C::•(() → core::int* {
+static field self::C v = new self::C::•(() → core::int {
   return 1;
 });
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.outline.expect
index 38051eb..14fcb68 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •(() →* dynamic x) → self::C*
+  constructor •(() → dynamic x) → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* v;
+static field self::C v;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.transformed.expect
index 939c023..3204265 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor •(() →* dynamic x) → self::C*
+  constructor •(() → dynamic x) → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* v = new self::C::•(() → core::int* {
+static field self::C v = new self::C::•(() → core::int {
   return 1;
 });
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart
index f537045..72be85e 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
 var v = f<dynamic>(
-    /*@ returnType=int* */ () {
+    /*@returnType=int*/ () {
   return 1;
 });
 
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.textual_outline.expect
index 499d54d..5426b5f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.textual_outline_modelled.expect
index d50e9b0..aed6c69 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.expect
index 2ac59fb..459dc22 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<dynamic>* v = self::f<dynamic>(() → core::int* {
+static field core::List<dynamic> v = self::f<dynamic>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.modular.expect
index 2ac59fb..459dc22 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<dynamic>* v = self::f<dynamic>(() → core::int* {
+static field core::List<dynamic> v = self::f<dynamic>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.outline.expect
index 10eb51f..747286a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<dynamic>* v;
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+static field core::List<dynamic> v;
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.transformed.expect
index c0f9a58..5485217 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<dynamic>* v = self::f<dynamic>(() → core::int* {
+static field core::List<dynamic> v = self::f<dynamic>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return core::_GrowableList::_literal1<self::f::T%>(g(){() → self::f::T%});
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart
index 502a159..6af8749 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
-var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
+var v = (f<dynamic>)(/*@returnType=int*/ () {
   return 1;
 });
 
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.textual_outline.expect
index a630be5..3b30334 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.textual_outline.expect
@@ -1,5 +1,7 @@
-// @dart = 2.9
 library test;
+
 List<T> f<T>(T g()) => <T>[g()];
-var v = (f<dynamic>) ( () { return 1; });
+var v = (f<dynamic>)(() {
+  return 1;
+});
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..02d867c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+library test;
+
+List<T> f<T>(T g()) => <T>[g()];
+main() {}
+var v = (f<dynamic>)(() {
+  return 1;
+});
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect
index cc03693..cb9ce8c 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
-// var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
-//           ^
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<dynamic> v = #C2(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+}){(() → dynamic) → core::List<dynamic>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {}
 
 constants  {
   #C1 = static-tearoff self::f
+  #C2 = instantiation #C1 <dynamic>
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.modular.expect
index cc03693..cb9ce8c 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
-// var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
-//           ^
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<dynamic> v = #C2(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+}){(() → dynamic) → core::List<dynamic>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {}
 
 constants  {
   #C1 = static-tearoff self::f
+  #C2 = instantiation #C1 <dynamic>
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.outline.expect
index a1a2465..747286a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.outline.expect
@@ -1,20 +1,9 @@
-library test;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
-// var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
-//           ^
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v;
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+static field core::List<dynamic> v;
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect
index de03af4..3439d30 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
-// var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
-//           ^
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<dynamic> v = #C2(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
+}){(() → dynamic) → core::List<dynamic>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return core::_GrowableList::_literal1<self::f::T%>(g(){() → self::f::T%});
 static method main() → dynamic {}
 
 constants  {
   #C1 = static-tearoff self::f
+  #C2 = instantiation #C1 <dynamic>
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart
index 892422b..0a3a0e2 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
-var v = (f)<dynamic>(/*info:INFERRED_TYPE_CLOSURE*/ /*@ returnType=int* */ () {
+var v = (f)<dynamic>(/*info:INFERRED_TYPE_CLOSURE*/ /*@returnType=int*/ () {
   return 1;
 });
 
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline.expect
index 2951359..6fabe27 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline_modelled.expect
index 9a94d46..99e882a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect
index cf406c1..09ce4d5 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<dynamic>* v = #C1<dynamic>(() → core::int* {
+static field core::List<dynamic> v = #C1<dynamic>(() → core::int {
   return 1;
-}){(() →* dynamic) →* core::List<dynamic>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+}){(() → dynamic) → core::List<dynamic>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect
index cf406c1..09ce4d5 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<dynamic>* v = #C1<dynamic>(() → core::int* {
+static field core::List<dynamic> v = #C1<dynamic>(() → core::int {
   return 1;
-}){(() →* dynamic) →* core::List<dynamic>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+}){(() → dynamic) → core::List<dynamic>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.outline.expect
index 10eb51f..747286a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<dynamic>* v;
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+static field core::List<dynamic> v;
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect
index 4bb6315..652966b 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<dynamic>* v = #C1<dynamic>(() → core::int* {
+static field core::List<dynamic> v = #C1<dynamic>(() → core::int {
   return 1;
-}){(() →* dynamic) →* core::List<dynamic>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
+}){(() → dynamic) → core::List<dynamic>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return core::_GrowableList::_literal1<self::f::T%>(g(){() → self::f::T%});
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart
index a48b88a..d332d12 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
-var v = f<int>(/*@ returnType=int* */ () {
+var v = f<int>(/*@returnType=int*/ () {
   return 1;
 });
 
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.textual_outline.expect
index 5dc8569..3146638 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.textual_outline_modelled.expect
index 9f8e2c4..df8a26a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.expect
index 06e337e..c2ecd13 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = self::f<core::int*>(() → core::int* {
+static field core::List<core::int> v = self::f<core::int>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.modular.expect
index 06e337e..c2ecd13 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = self::f<core::int*>(() → core::int* {
+static field core::List<core::int> v = self::f<core::int>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.outline.expect
index f0dd2fa..794a198 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v;
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+static field core::List<core::int> v;
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.transformed.expect
index e7d7199..a8285c8 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = self::f<core::int*>(() → core::int* {
+static field core::List<core::int> v = self::f<core::int>(() → core::int {
   return 1;
 });
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return core::_GrowableList::_literal1<self::f::T%>(g(){() → self::f::T%});
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart
index da80b1a..a02cc64 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
-var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
+var v = (f<int>)(/*@returnType=int*/ () {
   return 1;
 });
 
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.textual_outline.expect
index 9b37c02..a059306 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.textual_outline.expect
@@ -1,5 +1,7 @@
-// @dart = 2.9
 library test;
+
 List<T> f<T>(T g()) => <T>[g()];
-var v = (f<int>) ( () { return 1; });
+var v = (f<int>)(() {
+  return 1;
+});
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..7ba6b6e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+library test;
+
+List<T> f<T>(T g()) => <T>[g()];
+main() {}
+var v = (f<int>)(() {
+  return 1;
+});
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect
index 9bf3b40..6e2251b 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect
@@ -1,25 +1,15 @@
-library test;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
-// var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
-//           ^
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<core::int> v = #C2(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+}){(() → core::int) → core::List<core::int>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {}
 
 constants  {
   #C1 = static-tearoff self::f
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.modular.expect
index 9bf3b40..6e2251b 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library test;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
-// var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
-//           ^
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<core::int> v = #C2(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+}){(() → core::int) → core::List<core::int>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {}
 
 constants  {
   #C1 = static-tearoff self::f
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.outline.expect
index 229b708..794a198 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.outline.expect
@@ -1,20 +1,9 @@
-library test;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
-// var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
-//           ^
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v;
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+static field core::List<core::int> v;
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect
index d7ccceb..64ffd36 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library test;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
-// var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
-//           ^
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<core::int> v = #C2(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
+}){(() → core::int) → core::List<core::int>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return core::_GrowableList::_literal1<self::f::T%>(g(){() → self::f::T%});
 static method main() → dynamic {}
 
 constants  {
   #C1 = static-tearoff self::f
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart
index fc14e3f..f8ab111 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
-var v = (f)<int>(/*info:INFERRED_TYPE_CLOSURE*/ /*@ returnType=int* */ () {
+var v = (f)<int>(/*info:INFERRED_TYPE_CLOSURE*/ /*@returnType=int*/ () {
   return 1;
 });
 
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline.expect
index fdae43a..c7bca42 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline_modelled.expect
index 2030c1c..f634c6a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect
index 26fdda1..f47bc68 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<core::int> v = #C1<core::int>(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+}){(() → core::int) → core::List<core::int>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect
index 26fdda1..f47bc68 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<core::int> v = #C1<core::int>(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+}){(() → core::int) → core::List<core::int>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.outline.expect
index f0dd2fa..794a198 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v;
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+static field core::List<core::int> v;
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect
index 2f8644bb..a83c306 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<core::int> v = #C1<core::int>(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
+}){(() → core::int) → core::List<core::int>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return core::_GrowableList::_literal1<self::f::T%>(g(){() → self::f::T%});
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart
index 16c6bc1..dba9b40 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart
@@ -1,13 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=List<int*>* */ v = /*@ typeArgs=int* */ f(
-      /*@ returnType=int* */ () {
+  var /*@type=List<int>*/ v = /*@typeArgs=int*/ f(/*@returnType=int*/ () {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.textual_outline.expect
index fa051c0..6104397 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.textual_outline_modelled.expect
index 700c8e7..158c522b4 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.expect
index 720cf75..1111b25 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* v = self::f<core::int*>(() → core::int* {
+  core::List<core::int> v = self::f<core::int>(() → core::int {
     return 1;
   });
 }
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.modular.expect
index 720cf75..1111b25 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* v = self::f<core::int*>(() → core::int* {
+  core::List<core::int> v = self::f<core::int>(() → core::int {
     return 1;
   });
 }
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.outline.expect
index c7133df..9fb9d4e 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic
   ;
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.transformed.expect
index a4b1aff..1c9c7cb 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* v = self::f<core::int*>(() → core::int* {
+  core::List<core::int> v = self::f<core::int>(() → core::int {
     return 1;
   });
 }
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return core::_GrowableList::_literal1<self::f::T%>(g(){() → self::f::T%});
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart
index 2554307..40cb1dc 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=List<int*>* */ v = (f) /*@ typeArgs=int* */ (
-      /*@ returnType=int* */ () {
+  var /*@type=List<int>*/ v = (f) /*@typeArgs=int*/ (
+      /*@returnType=int*/ () {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.textual_outline.expect
index fa051c0..6104397 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.textual_outline_modelled.expect
index 700c8e7..158c522b4 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.expect
index 7def91f..d473315 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+  core::List<core::int> v = #C1<core::int>(() → core::int {
     return 1;
-  }){(() →* core::int*) →* core::List<core::int*>*};
+  }){(() → core::int) → core::List<core::int>};
 }
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 
 constants  {
   #C1 = static-tearoff self::f
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.modular.expect
index 7def91f..d473315 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+  core::List<core::int> v = #C1<core::int>(() → core::int {
     return 1;
-  }){(() →* core::int*) →* core::List<core::int*>*};
+  }){(() → core::int) → core::List<core::int>};
 }
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 
 constants  {
   #C1 = static-tearoff self::f
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.outline.expect
index c7133df..9fb9d4e 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic
   ;
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.transformed.expect
index a1dbf35..a191eb3 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+  core::List<core::int> v = #C1<core::int>(() → core::int {
     return 1;
-  }){(() →* core::int*) →* core::List<core::int*>*};
+  }){(() → core::int) → core::List<core::int>};
 }
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return core::_GrowableList::_literal1<self::f::T%>(g(){() → self::f::T%});
 
 constants  {
   #C1 = static-tearoff self::f
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart
index 7883008..26a81c1 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=double* */ v = f(/*@ returnType=int* */ () {
+  var /*@type=double*/ v = f(/*@returnType=int*/ () {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.textual_outline.expect
index e0493db..a0e3c88 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.textual_outline_modelled.expect
index c755492..3fe047c 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 double f(x) => 1.0;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.expect
index 715a3f3..a9f5618 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = self::f(() → core::int* {
+  core::double v = self::f(() → core::int {
     return 1;
   });
 }
-static method f(dynamic x) → core::double*
+static method f(dynamic x) → core::double
   return 1.0;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.modular.expect
index 715a3f3..a9f5618 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = self::f(() → core::int* {
+  core::double v = self::f(() → core::int {
     return 1;
   });
 }
-static method f(dynamic x) → core::double*
+static method f(dynamic x) → core::double
   return 1.0;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.outline.expect
index 8c0f7c6..61236f2 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic
   ;
-static method f(dynamic x) → core::double*
+static method f(dynamic x) → core::double
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.transformed.expect
index 715a3f3..a9f5618 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = self::f(() → core::int* {
+  core::double v = self::f(() → core::int {
     return 1;
   });
 }
-static method f(dynamic x) → core::double*
+static method f(dynamic x) → core::double
   return 1.0;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart
index 36586e3..e3263fb 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=double* */ v = (f)(/*@ returnType=int* */ () {
+  var /*@type=double*/ v = (f)(/*@returnType=int*/ () {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.textual_outline.expect
index e0493db..a0e3c88 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.textual_outline_modelled.expect
index c755492..3fe047c 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 double f(x) => 1.0;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.expect
index d720962..595ce92 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = #C1(() → core::int* {
+  core::double v = #C1(() → core::int {
     return 1;
-  }){(dynamic) →* core::double*};
+  }){(dynamic) → core::double};
 }
-static method f(dynamic x) → core::double*
+static method f(dynamic x) → core::double
   return 1.0;
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.modular.expect
index d720962..595ce92 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = #C1(() → core::int* {
+  core::double v = #C1(() → core::int {
     return 1;
-  }){(dynamic) →* core::double*};
+  }){(dynamic) → core::double};
 }
-static method f(dynamic x) → core::double*
+static method f(dynamic x) → core::double
   return 1.0;
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.outline.expect
index 8c0f7c6..61236f2 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic
   ;
-static method f(dynamic x) → core::double*
+static method f(dynamic x) → core::double
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.transformed.expect
index d720962..595ce92 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = #C1(() → core::int* {
+  core::double v = #C1(() → core::int {
     return 1;
-  }){(dynamic) →* core::double*};
+  }){(dynamic) → core::double};
 }
-static method f(dynamic x) → core::double*
+static method f(dynamic x) → core::double
   return 1.0;
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart
index e6f2e9b..2cfb863 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=List<dynamic>* */ v = <dynamic>[
-    /*@ returnType=int* */ () {
+  var /*@type=List<dynamic>*/ v = <dynamic>[
+    /*@returnType=int*/ () {
       return 1;
     }
   ];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.expect
index bc2b33d..26b6075 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<dynamic>* v = <dynamic>[() → core::int* {
+  core::List<dynamic> v = <dynamic>[() → core::int {
     return 1;
   }];
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.modular.expect
index bc2b33d..26b6075 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<dynamic>* v = <dynamic>[() → core::int* {
+  core::List<dynamic> v = <dynamic>[() → core::int {
     return 1;
   }];
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.transformed.expect
index 5b31f4c..f52f597 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<dynamic>* v = core::_GrowableList::_literal1<dynamic>(() → core::int* {
+  core::List<dynamic> v = core::_GrowableList::_literal1<dynamic>(() → core::int {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart
index 4ec0a0f..fdf37fcf 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 typedef int F();
 main() {
-  var /*@ type=List<() ->* int*>* */ v = <F>[
-    /*@ returnType=int* */ () {
+  var /*@type=List<() -> int>*/ v = <F>[
+    /*@returnType=int*/ () {
       return 1;
     }
   ];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.textual_outline.expect
index 5728c6e..0286208 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef int F();
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.textual_outline_modelled.expect
index bf4a154..226c034 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.expect
index b747c51..96df817 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 static method main() → dynamic {
-  core::List<() →* core::int*>* v = <() →* core::int*>[() → core::int* {
+  core::List<() → core::int> v = <() → core::int>[() → core::int {
     return 1;
   }];
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.modular.expect
index b747c51..96df817 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 static method main() → dynamic {
-  core::List<() →* core::int*>* v = <() →* core::int*>[() → core::int* {
+  core::List<() → core::int> v = <() → core::int>[() → core::int {
     return 1;
   }];
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.outline.expect
index 87c776d..fa65d89 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.transformed.expect
index 71c0bd2..6c48cd4 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 static method main() → dynamic {
-  core::List<() →* core::int*>* v = core::_GrowableList::_literal1<() →* core::int*>(() → core::int* {
+  core::List<() → core::int> v = core::_GrowableList::_literal1<() → core::int>(() → core::int {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart
index e6728f8..1c4d50d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=List<() ->* int*>* */ v = /*@ typeArgs=() ->* int* */ [
-    /*@ returnType=int* */ () {
+  var /*@type=List<() -> int>*/ v = /*@typeArgs=() -> int*/ [
+    /*@returnType=int*/ () {
       return 1;
     }
   ];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.expect
index 5b2da50..f308b41 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<() →* core::int*>* v = <() →* core::int*>[() → core::int* {
+  core::List<() → core::int> v = <() → core::int>[() → core::int {
     return 1;
   }];
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.modular.expect
index 5b2da50..f308b41 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<() →* core::int*>* v = <() →* core::int*>[() → core::int* {
+  core::List<() → core::int> v = <() → core::int>[() → core::int {
     return 1;
   }];
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.transformed.expect
index cda2936..44aee32 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<() →* core::int*>* v = core::_GrowableList::_literal1<() →* core::int*>(() → core::int* {
+  core::List<() → core::int> v = core::_GrowableList::_literal1<() → core::int>(() → core::int {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart
index c906a26..af6dc4e 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=Map<int*, dynamic>* */ v = <int, dynamic>{
-    1: /*@ returnType=int* */ () {
+  var /*@type=Map<int, dynamic>*/ v = <int, dynamic>{
+    1: /*@returnType=int*/ () {
       return 1;
     }
   };
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.expect
index 07d95de..027bc7a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::Map<core::int*, dynamic>* v = <core::int*, dynamic>{1: () → core::int* {
+  core::Map<core::int, dynamic> v = <core::int, dynamic>{1: () → core::int {
     return 1;
   }};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.modular.expect
index 07d95de..027bc7a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::Map<core::int*, dynamic>* v = <core::int*, dynamic>{1: () → core::int* {
+  core::Map<core::int, dynamic> v = <core::int, dynamic>{1: () → core::int {
     return 1;
   }};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.transformed.expect
index 07d95de..027bc7a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::Map<core::int*, dynamic>* v = <core::int*, dynamic>{1: () → core::int* {
+  core::Map<core::int, dynamic> v = <core::int, dynamic>{1: () → core::int {
     return 1;
   }};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart
index a03d5a2..26541f8 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 typedef int F();
 main() {
-  var /*@ type=Map<int*, () ->* int*>* */ v = <int, F>{
-    1: /*@ returnType=int* */ () {
+  var /*@type=Map<int, () -> int>*/ v = <int, F>{
+    1: /*@returnType=int*/ () {
       return 1;
     }
   };
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.textual_outline.expect
index 5728c6e..0286208 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef int F();
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.textual_outline_modelled.expect
index bf4a154..226c034 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.expect
index 7e2da76..e5d4cf4 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 static method main() → dynamic {
-  core::Map<core::int*, () →* core::int*>* v = <core::int*, () →* core::int*>{1: () → core::int* {
+  core::Map<core::int, () → core::int> v = <core::int, () → core::int>{1: () → core::int {
     return 1;
   }};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.modular.expect
index 7e2da76..e5d4cf4 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 static method main() → dynamic {
-  core::Map<core::int*, () →* core::int*>* v = <core::int*, () →* core::int*>{1: () → core::int* {
+  core::Map<core::int, () → core::int> v = <core::int, () → core::int>{1: () → core::int {
     return 1;
   }};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.outline.expect
index 87c776d..fa65d89 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.transformed.expect
index 7e2da76..e5d4cf4 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = () →* core::int*;
+typedef F = () → core::int;
 static method main() → dynamic {
-  core::Map<core::int*, () →* core::int*>* v = <core::int*, () →* core::int*>{1: () → core::int* {
+  core::Map<core::int, () → core::int> v = <core::int, () → core::int>{1: () → core::int {
     return 1;
   }};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart
index 3e1b166..2d5bbb3 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 main() {
-  var /*@ type=Map<int*, () ->* int*>* */ v = /*@ typeArgs=int*, () ->* int* */ {
-    1: /*@ returnType=int* */ () {
+  var /*@type=Map<int, () -> int>*/ v = /*@typeArgs=int, () -> int*/ {
+    1: /*@returnType=int*/ () {
       return 1;
     }
   };
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.textual_outline.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.textual_outline_modelled.expect
index 4b71679..d0b557f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.expect
index f2aa7b1..3a0cf90 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::Map<core::int*, () →* core::int*>* v = <core::int*, () →* core::int*>{1: () → core::int* {
+  core::Map<core::int, () → core::int> v = <core::int, () → core::int>{1: () → core::int {
     return 1;
   }};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.modular.expect
index f2aa7b1..3a0cf90 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::Map<core::int*, () →* core::int*>* v = <core::int*, () →* core::int*>{1: () → core::int* {
+  core::Map<core::int, () → core::int> v = <core::int, () → core::int>{1: () → core::int {
     return 1;
   }};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.outline.expect
index 09dc88c..406c4c9 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.transformed.expect
index f2aa7b1..3a0cf90 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::Map<core::int*, () →* core::int*>* v = <core::int*, () →* core::int*>{1: () → core::int* {
+  core::Map<core::int, () → core::int> v = <core::int, () → core::int>{1: () → core::int {
     return 1;
   }};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart
index fd6da7d..fb0c080 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,8 +10,8 @@
 }
 
 main() {
-  var /*@ type=List<dynamic>* */ v =
-      new C(). /*@target=C.f*/ f<dynamic>(/*@ returnType=int* */ () {
+  var /*@type=List<dynamic>*/ v =
+      new C(). /*@target=C.f*/ f<dynamic>(/*@returnType=int*/ () {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.textual_outline.expect
index e9cccc5..8f9363d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.textual_outline_modelled.expect
index e9cccc5..8f9363d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.expect
index 7011442a..8f882fb 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return <self::C::f::T*>[g(){() →* self::C::f::T*}];
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>(() → self::C::f::T% g) → core::List<self::C::f::T%>
+    return <self::C::f::T%>[g(){() → self::C::f::T%}];
 }
 static method main() → dynamic {
-  core::List<dynamic>* v = new self::C::•().{self::C::f}<dynamic>(() → core::int* {
+  core::List<dynamic> v = new self::C::•().{self::C::f}<dynamic>(() → core::int {
     return 1;
-  }){(() →* dynamic) →* core::List<dynamic>*};
+  }){(() → dynamic) → core::List<dynamic>};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.modular.expect
index 7011442a..8f882fb 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return <self::C::f::T*>[g(){() →* self::C::f::T*}];
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>(() → self::C::f::T% g) → core::List<self::C::f::T%>
+    return <self::C::f::T%>[g(){() → self::C::f::T%}];
 }
 static method main() → dynamic {
-  core::List<dynamic>* v = new self::C::•().{self::C::f}<dynamic>(() → core::int* {
+  core::List<dynamic> v = new self::C::•().{self::C::f}<dynamic>(() → core::int {
     return 1;
-  }){(() →* dynamic) →* core::List<dynamic>*};
+  }){(() → dynamic) → core::List<dynamic>};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.outline.expect
index f43450a..b4ba704 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
+  method f<T extends core::Object? = dynamic>(() → self::C::f::T% g) → core::List<self::C::f::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.transformed.expect
index bdd5b5b..7f5ce70 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return core::_GrowableList::_literal1<self::C::f::T*>(g(){() →* self::C::f::T*});
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>(() → self::C::f::T% g) → core::List<self::C::f::T%>
+    return core::_GrowableList::_literal1<self::C::f::T%>(g(){() → self::C::f::T%});
 }
 static method main() → dynamic {
-  core::List<dynamic>* v = new self::C::•().{self::C::f}<dynamic>(() → core::int* {
+  core::List<dynamic> v = new self::C::•().{self::C::f}<dynamic>(() → core::int {
     return 1;
-  }){(() →* dynamic) →* core::List<dynamic>*};
+  }){(() → dynamic) → core::List<dynamic>};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart
index 5498474..7b7247b 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,8 +10,8 @@
 }
 
 main() {
-  var /*@ type=List<int*>* */ v =
-      new C(). /*@target=C.f*/ f<int>(/*@ returnType=int* */ () {
+  var /*@type=List<int>*/ v =
+      new C(). /*@target=C.f*/ f<int>(/*@returnType=int*/ () {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.textual_outline.expect
index e9cccc5..8f9363d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.textual_outline_modelled.expect
index e9cccc5..8f9363d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.expect
index 3df5bcf..46338fa 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return <self::C::f::T*>[g(){() →* self::C::f::T*}];
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>(() → self::C::f::T% g) → core::List<self::C::f::T%>
+    return <self::C::f::T%>[g(){() → self::C::f::T%}];
 }
 static method main() → dynamic {
-  core::List<core::int*>* v = new self::C::•().{self::C::f}<core::int*>(() → core::int* {
+  core::List<core::int> v = new self::C::•().{self::C::f}<core::int>(() → core::int {
     return 1;
-  }){(() →* core::int*) →* core::List<core::int*>*};
+  }){(() → core::int) → core::List<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.modular.expect
index 3df5bcf..46338fa 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return <self::C::f::T*>[g(){() →* self::C::f::T*}];
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>(() → self::C::f::T% g) → core::List<self::C::f::T%>
+    return <self::C::f::T%>[g(){() → self::C::f::T%}];
 }
 static method main() → dynamic {
-  core::List<core::int*>* v = new self::C::•().{self::C::f}<core::int*>(() → core::int* {
+  core::List<core::int> v = new self::C::•().{self::C::f}<core::int>(() → core::int {
     return 1;
-  }){(() →* core::int*) →* core::List<core::int*>*};
+  }){(() → core::int) → core::List<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.outline.expect
index f43450a..b4ba704 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
+  method f<T extends core::Object? = dynamic>(() → self::C::f::T% g) → core::List<self::C::f::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.transformed.expect
index b967386..da48296 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return core::_GrowableList::_literal1<self::C::f::T*>(g(){() →* self::C::f::T*});
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>(() → self::C::f::T% g) → core::List<self::C::f::T%>
+    return core::_GrowableList::_literal1<self::C::f::T%>(g(){() → self::C::f::T%});
 }
 static method main() → dynamic {
-  core::List<core::int*>* v = new self::C::•().{self::C::f}<core::int*>(() → core::int* {
+  core::List<core::int> v = new self::C::•().{self::C::f}<core::int>(() → core::int {
     return 1;
-  }){(() →* core::int*) →* core::List<core::int*>*};
+  }){(() → core::int) → core::List<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart
index 8a4e5b5..c384758 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,8 +10,8 @@
 }
 
 main() {
-  var /*@ type=List<int*>* */ v = new C(). /*@ typeArgs=int* */ /*@target=C.f*/ f(
-      /*@ returnType=int* */ () {
+  var /*@type=List<int>*/ v = new C(). /*@typeArgs=int*/ /*@target=C.f*/ f(
+      /*@returnType=int*/ () {
     return 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.textual_outline.expect
index e9cccc5..8f9363d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.textual_outline_modelled.expect
index e9cccc5..8f9363d 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.expect
index 3df5bcf..46338fa 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return <self::C::f::T*>[g(){() →* self::C::f::T*}];
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>(() → self::C::f::T% g) → core::List<self::C::f::T%>
+    return <self::C::f::T%>[g(){() → self::C::f::T%}];
 }
 static method main() → dynamic {
-  core::List<core::int*>* v = new self::C::•().{self::C::f}<core::int*>(() → core::int* {
+  core::List<core::int> v = new self::C::•().{self::C::f}<core::int>(() → core::int {
     return 1;
-  }){(() →* core::int*) →* core::List<core::int*>*};
+  }){(() → core::int) → core::List<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.modular.expect
index 3df5bcf..46338fa 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return <self::C::f::T*>[g(){() →* self::C::f::T*}];
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>(() → self::C::f::T% g) → core::List<self::C::f::T%>
+    return <self::C::f::T%>[g(){() → self::C::f::T%}];
 }
 static method main() → dynamic {
-  core::List<core::int*>* v = new self::C::•().{self::C::f}<core::int*>(() → core::int* {
+  core::List<core::int> v = new self::C::•().{self::C::f}<core::int>(() → core::int {
     return 1;
-  }){(() →* core::int*) →* core::List<core::int*>*};
+  }){(() → core::int) → core::List<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.outline.expect
index f43450a..b4ba704 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
+  method f<T extends core::Object? = dynamic>(() → self::C::f::T% g) → core::List<self::C::f::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.transformed.expect
index b967386..da48296 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return core::_GrowableList::_literal1<self::C::f::T*>(g(){() →* self::C::f::T*});
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<T extends core::Object? = dynamic>(() → self::C::f::T% g) → core::List<self::C::f::T%>
+    return core::_GrowableList::_literal1<self::C::f::T%>(g(){() → self::C::f::T%});
 }
 static method main() → dynamic {
-  core::List<core::int*>* v = new self::C::•().{self::C::f}<core::int*>(() → core::int* {
+  core::List<core::int> v = new self::C::•().{self::C::f}<core::int>(() → core::int {
     return 1;
-  }){(() →* core::int*) →* core::List<core::int*>*};
+  }){(() → core::int) → core::List<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart
index d181997..15b4e43 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,7 +9,7 @@
   double f(x) => 1.0;
 }
 
-var v = new C(). /*@target=C.f*/ f(/*@ returnType=int* */ () {
+var v = new C(). /*@target=C.f*/ f(/*@returnType=int*/ () {
   return 1;
 });
 
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.textual_outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.textual_outline.expect
index f0e0382..5dfe4b0 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.textual_outline_modelled.expect
index 5b98a79..470fb87 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.expect
index f00aa66..a5e6d69 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f(dynamic x) → core::double*
+  method f(dynamic x) → core::double
     return 1.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::double* v = new self::C::•().{self::C::f}(() → core::int* {
+static field core::double v = new self::C::•().{self::C::f}(() → core::int {
   return 1;
-}){(dynamic) →* core::double*};
+}){(dynamic) → core::double};
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.modular.expect
index f00aa66..a5e6d69 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f(dynamic x) → core::double*
+  method f(dynamic x) → core::double
     return 1.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::double* v = new self::C::•().{self::C::f}(() → core::int* {
+static field core::double v = new self::C::•().{self::C::f}(() → core::int {
   return 1;
-}){(dynamic) →* core::double*};
+}){(dynamic) → core::double};
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.outline.expect
index cd33e23..33b75fe 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f(dynamic x) → core::double*
+  method f(dynamic x) → core::double
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::double* v;
+static field core::double v;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.transformed.expect
index f00aa66..a5e6d69 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f(dynamic x) → core::double*
+  method f(dynamic x) → core::double
     return 1.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::double* v = new self::C::•().{self::C::f}(() → core::int* {
+static field core::double v = new self::C::•().{self::C::f}(() → core::int {
   return 1;
-}){(dynamic) →* core::double*};
+}){(dynamic) → core::double};
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart
index 74553aa..c39c959 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 T run<T>(T f()) {
   print("running");
-  var /*@ type=run::T* */ t = f();
+  var /*@type=run::T%*/ t = f();
   print("done running");
   return t;
 }
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.textual_outline.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.textual_outline.expect
index 4aa6634..ffe2084 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 T run<T>(T f()) {}
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.textual_outline_modelled.expect
index f9a03c5..65a862b 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 T run<T>(T f()) {}
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.expect
index 751e547..68152bf 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static field dynamic x = self::run<dynamic>(#C1);
-static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T* {
+static method run<T extends core::Object? = dynamic>(() → self::run::T% f) → self::run::T% {
   core::print("running");
-  self::run::T* t = f(){() →* self::run::T*};
+  self::run::T% t = f(){() → self::run::T%};
   core::print("done running");
   return t;
 }
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.modular.expect
index 751e547..68152bf 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static field dynamic x = self::run<dynamic>(#C1);
-static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T* {
+static method run<T extends core::Object? = dynamic>(() → self::run::T% f) → self::run::T% {
   core::print("running");
-  self::run::T* t = f(){() →* self::run::T*};
+  self::run::T% t = f(){() → self::run::T%};
   core::print("done running");
   return t;
 }
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.outline.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.outline.expect
index 24086b1..63483b8 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static field dynamic x;
-static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T*
+static method run<T extends core::Object? = dynamic>(() → self::run::T% f) → self::run::T%
   ;
 static method printRunning() → void
   ;
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.transformed.expect
index 751e547..68152bf 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static field dynamic x = self::run<dynamic>(#C1);
-static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T* {
+static method run<T extends core::Object? = dynamic>(() → self::run::T% f) → self::run::T% {
   core::print("running");
-  self::run::T* t = f(){() →* self::run::T*};
+  self::run::T% t = f(){() → self::run::T%};
   core::print("done running");
   return t;
 }
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart b/pkg/front_end/testcases/inference_new/const_invocation.dart
index 60eb30c..859e45a 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart
@@ -1,23 +1,23 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 typedef V F<U, V>(U u);
 
 class Foo<T> {
-  Bar<T> get v1 => const /*@ typeArgs=Null */ Bar();
-  Bar<List<T>> get v2 => const /*@ typeArgs=List<Null>* */ Bar();
-  Bar<F<T, T>> get v3 => const /*@ typeArgs=(Object*) ->* Null */ Bar();
+  Bar<T> get v1 => const /*@typeArgs=Never*/ Bar();
+  Bar<List<T>> get v2 => const /*@typeArgs=List<Never>*/ Bar();
+  Bar<F<T, T>> get v3 => const /*@typeArgs=(Object?) -> Never*/ Bar();
   Bar<F<F<T, T>, T>> get v4 =>
-      const /*@ typeArgs=((Null) ->* Object*) ->* Null */ Bar();
-  List<T> get v5 => /*@ typeArgs=Null */ const [];
-  List<F<T, T>> get v6 => /*@ typeArgs=(Object*) ->* Null */ const [];
-  Map<T, T> get v7 => /*@ typeArgs=Null, Null */ const {};
-  Map<F<T, T>, T> get v8 => /*@ typeArgs=(Object*) ->* Null, Null */ const {};
-  Map<T, F<T, T>> get v9 => /*@ typeArgs=Null, (Object*) ->* Null */ const {};
+      const /*@typeArgs=((Never) -> Object?) -> Never*/ Bar();
+  List<T> get v5 => /*@typeArgs=Never*/ const [];
+  List<F<T, T>> get v6 => /*@typeArgs=(Object?) -> Never*/ const [];
+  Map<T, T> get v7 => /*@typeArgs=Never, Never*/ const {};
+  Map<F<T, T>, T> get v8 => /*@typeArgs=(Object?) -> Never, Never*/ const {};
+  Map<T, F<T, T>> get v9 => /*@typeArgs=Never, (Object?) -> Never*/ const {};
 }
 
 class Bar<T> {
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.textual_outline.expect
index 1d0b2c9..e44b24c 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef V F<U, V>(U u);
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.textual_outline_modelled.expect
index ea29fd1..ebcecde 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Bar<T> {
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.expect
index 388292d..f4a759d 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.expect
@@ -1,68 +1,48 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant U extends core::Object* = dynamic, V extends core::Object* = dynamic> = (U*) →* V*;
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+typedef F<contravariant U extends core::Object? = dynamic, V extends core::Object? = dynamic> = (U%) → V%;
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  get v1() → self::Bar<self::Foo::T*>*
+  get v1() → self::Bar<self::Foo::T%>
     return #C1;
-  get v2() → self::Bar<core::List<self::Foo::T*>*>*
+  get v2() → self::Bar<core::List<self::Foo::T%>>
     return #C2;
-  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
+  get v3() → self::Bar<(self::Foo::T%) → self::Foo::T%>
     return #C3;
-  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
+  get v4() → self::Bar<((self::Foo::T%) → self::Foo::T%) → self::Foo::T%>
     return #C4;
-  get v5() → core::List<self::Foo::T*>*
+  get v5() → core::List<self::Foo::T%>
     return #C5;
-  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
+  get v6() → core::List<(self::Foo::T%) → self::Foo::T%>
     return #C6;
-  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
+  get v7() → core::Map<self::Foo::T%, self::Foo::T%>
     return #C7;
-  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
+  get v8() → core::Map<(self::Foo::T%) → self::Foo::T%, self::Foo::T%>
     return #C8;
-  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
+  get v9() → core::Map<self::Foo::T%, (self::Foo::T%) → self::Foo::T%>
     return #C9;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Bar<self::Bar::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = self::Bar<Null> {}
-  #C2 = self::Bar<core::List<Null>*> {}
-  #C3 = self::Bar<(core::Object*) →* Null> {}
-  #C4 = self::Bar<((Null) →* core::Object*) →* Null> {}
-  #C5 = <Null>[]
-  #C6 = <(core::Object*) →* Null>[]
-  #C7 = <Null, Null>{)
-  #C8 = <(core::Object*) →* Null, Null>{)
-  #C9 = <Null, (core::Object*) →* Null>{)
+  #C1 = self::Bar<Never*> {}
+  #C2 = self::Bar<core::List<Never*>*> {}
+  #C3 = self::Bar<(core::Object?) →* Never*> {}
+  #C4 = self::Bar<((Never*) →* core::Object?) →* Never*> {}
+  #C5 = <Never*>[]
+  #C6 = <(core::Object?) →* Never*>[]
+  #C7 = <Never*, Never*>{)
+  #C8 = <(core::Object?) →* Never*, Never*>{)
+  #C9 = <Never*, (core::Object?) →* Never*>{)
 }
 
 
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.modular.expect
index 388292d..f4a759d 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.modular.expect
@@ -1,68 +1,48 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant U extends core::Object* = dynamic, V extends core::Object* = dynamic> = (U*) →* V*;
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+typedef F<contravariant U extends core::Object? = dynamic, V extends core::Object? = dynamic> = (U%) → V%;
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  get v1() → self::Bar<self::Foo::T*>*
+  get v1() → self::Bar<self::Foo::T%>
     return #C1;
-  get v2() → self::Bar<core::List<self::Foo::T*>*>*
+  get v2() → self::Bar<core::List<self::Foo::T%>>
     return #C2;
-  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
+  get v3() → self::Bar<(self::Foo::T%) → self::Foo::T%>
     return #C3;
-  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
+  get v4() → self::Bar<((self::Foo::T%) → self::Foo::T%) → self::Foo::T%>
     return #C4;
-  get v5() → core::List<self::Foo::T*>*
+  get v5() → core::List<self::Foo::T%>
     return #C5;
-  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
+  get v6() → core::List<(self::Foo::T%) → self::Foo::T%>
     return #C6;
-  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
+  get v7() → core::Map<self::Foo::T%, self::Foo::T%>
     return #C7;
-  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
+  get v8() → core::Map<(self::Foo::T%) → self::Foo::T%, self::Foo::T%>
     return #C8;
-  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
+  get v9() → core::Map<self::Foo::T%, (self::Foo::T%) → self::Foo::T%>
     return #C9;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Bar<self::Bar::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = self::Bar<Null> {}
-  #C2 = self::Bar<core::List<Null>*> {}
-  #C3 = self::Bar<(core::Object*) →* Null> {}
-  #C4 = self::Bar<((Null) →* core::Object*) →* Null> {}
-  #C5 = <Null>[]
-  #C6 = <(core::Object*) →* Null>[]
-  #C7 = <Null, Null>{)
-  #C8 = <(core::Object*) →* Null, Null>{)
-  #C9 = <Null, (core::Object*) →* Null>{)
+  #C1 = self::Bar<Never*> {}
+  #C2 = self::Bar<core::List<Never*>*> {}
+  #C3 = self::Bar<(core::Object?) →* Never*> {}
+  #C4 = self::Bar<((Never*) →* core::Object?) →* Never*> {}
+  #C5 = <Never*>[]
+  #C6 = <(core::Object?) →* Never*>[]
+  #C7 = <Never*, Never*>{)
+  #C8 = <(core::Object?) →* Never*, Never*>{)
+  #C9 = <Never*, (core::Object?) →* Never*>{)
 }
 
 
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.outline.expect
index c39f27b..9654182 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.outline.expect
@@ -1,54 +1,34 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant U extends core::Object* = dynamic, V extends core::Object* = dynamic> = (U*) →* V*;
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+typedef F<contravariant U extends core::Object? = dynamic, V extends core::Object? = dynamic> = (U%) → V%;
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
     ;
-  get v1() → self::Bar<self::Foo::T*>*
+  get v1() → self::Bar<self::Foo::T%>
     ;
-  get v2() → self::Bar<core::List<self::Foo::T*>*>*
+  get v2() → self::Bar<core::List<self::Foo::T%>>
     ;
-  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
+  get v3() → self::Bar<(self::Foo::T%) → self::Foo::T%>
     ;
-  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
+  get v4() → self::Bar<((self::Foo::T%) → self::Foo::T%) → self::Foo::T%>
     ;
-  get v5() → core::List<self::Foo::T*>*
+  get v5() → core::List<self::Foo::T%>
     ;
-  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
+  get v6() → core::List<(self::Foo::T%) → self::Foo::T%>
     ;
-  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
+  get v7() → core::Map<self::Foo::T%, self::Foo::T%>
     ;
-  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
+  get v8() → core::Map<(self::Foo::T%) → self::Foo::T%, self::Foo::T%>
     ;
-  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
+  get v9() → core::Map<self::Foo::T%, (self::Foo::T%) → self::Foo::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Bar<self::Bar::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.transformed.expect
index 388292d..f4a759d 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.transformed.expect
@@ -1,68 +1,48 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant U extends core::Object* = dynamic, V extends core::Object* = dynamic> = (U*) →* V*;
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+typedef F<contravariant U extends core::Object? = dynamic, V extends core::Object? = dynamic> = (U%) → V%;
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  get v1() → self::Bar<self::Foo::T*>*
+  get v1() → self::Bar<self::Foo::T%>
     return #C1;
-  get v2() → self::Bar<core::List<self::Foo::T*>*>*
+  get v2() → self::Bar<core::List<self::Foo::T%>>
     return #C2;
-  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
+  get v3() → self::Bar<(self::Foo::T%) → self::Foo::T%>
     return #C3;
-  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
+  get v4() → self::Bar<((self::Foo::T%) → self::Foo::T%) → self::Foo::T%>
     return #C4;
-  get v5() → core::List<self::Foo::T*>*
+  get v5() → core::List<self::Foo::T%>
     return #C5;
-  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
+  get v6() → core::List<(self::Foo::T%) → self::Foo::T%>
     return #C6;
-  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
+  get v7() → core::Map<self::Foo::T%, self::Foo::T%>
     return #C7;
-  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
+  get v8() → core::Map<(self::Foo::T%) → self::Foo::T%, self::Foo::T%>
     return #C8;
-  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
+  get v9() → core::Map<self::Foo::T%, (self::Foo::T%) → self::Foo::T%>
     return #C9;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bar<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Bar<self::Bar::T*>*
+class Bar<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Bar<self::Bar::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = self::Bar<Null> {}
-  #C2 = self::Bar<core::List<Null>*> {}
-  #C3 = self::Bar<(core::Object*) →* Null> {}
-  #C4 = self::Bar<((Null) →* core::Object*) →* Null> {}
-  #C5 = <Null>[]
-  #C6 = <(core::Object*) →* Null>[]
-  #C7 = <Null, Null>{)
-  #C8 = <(core::Object*) →* Null, Null>{)
-  #C9 = <Null, (core::Object*) →* Null>{)
+  #C1 = self::Bar<Never*> {}
+  #C2 = self::Bar<core::List<Never*>*> {}
+  #C3 = self::Bar<(core::Object?) →* Never*> {}
+  #C4 = self::Bar<((Never*) →* core::Object?) →* Never*> {}
+  #C5 = <Never*>[]
+  #C6 = <(core::Object?) →* Never*>[]
+  #C7 = <Never*, Never*>{)
+  #C8 = <(core::Object?) →* Never*, Never*>{)
+  #C9 = <Never*, (core::Object?) →* Never*>{)
 }
 
 
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart
index d00bc67..8468f2b 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -15,16 +15,16 @@
 // There's a circularity between b and c because a.f is generic, so the type of
 // c is required to infer b, and vice versa.
 
-var b = /*@ returnType=() ->* invalid-type */ () =>
-    a. /*@ typeArgs=() ->* invalid-type */ /*@target=A.f*/ f(c);
-var c = /*@ returnType=invalid-type */ () =>
-    a. /*@ typeArgs=invalid-type */ /*@target=A.f*/ f(b);
+var b = /*@returnType=() -> dynamic*/ () =>
+    a. /*@typeArgs=() -> dynamic*/ /*@target=A.f*/ f(c);
+var c = /*@returnType=dynamic*/ () =>
+    a. /*@typeArgs=dynamic*/ /*@target=A.f*/ f(b);
 
 // e's use of a.g breaks the circularity, because a.g is not generic, therefore
 // the type of e does not depend on the type of d.
 
-var d = /*@ returnType=() ->* int* */ () =>
-    a. /*@ typeArgs=() ->* int* */ /*@target=A.f*/ f(e);
-var e = /*@ returnType=int* */ () => a. /*@target=A.g*/ g(d);
+var d = /*@returnType=() -> int*/ () =>
+    a. /*@typeArgs=() -> int*/ /*@target=A.f*/ f(e);
+var e = /*@returnType=int*/ () => a. /*@target=A.g*/ g(d);
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.textual_outline.expect
index eb20bc7..05229f3 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.textual_outline_modelled.expect
index e25465f..0f55a46 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.expect
index a062019..5e055de 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.expect
@@ -1,37 +1,27 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:5: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
-// var b = /*@ returnType=() ->* invalid-type */ () =>
+// var b = /*@returnType=() -> dynamic*/ () =>
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(self::A::f::T* t) → self::A::f::T*
+  method f<T extends core::Object? = dynamic>(self::A::f::T% t) → self::A::f::T%
     return t;
-  method g(dynamic i) → core::int*
+  method g(dynamic i) → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field invalid-type b = () → () →* invalid-type => self::a.{self::A::f}<() →* invalid-type>(self::c){(() →* invalid-type) →* () →* invalid-type};
-static field () →* invalid-type c = () → invalid-type => self::a.{self::A::f}<invalid-type>(self::b){(invalid-type) →* invalid-type};
-static field () →* () →* core::int* d = () → () →* core::int* => self::a.{self::A::f}<() →* core::int*>(self::e){(() →* core::int*) →* () →* core::int*};
-static field () →* core::int* e = () → core::int* => self::a.{self::A::g}(self::d){(dynamic) →* core::int*};
+static field self::A a = new self::A::•();
+static field invalid-type b = () → () → dynamic => self::a.{self::A::f}<() → dynamic>(self::c){(() → dynamic) → () → dynamic};
+static field () → dynamic c = () → dynamic => self::a.{self::A::f}<dynamic>(self::b){(dynamic) → dynamic};
+static field () → () → core::int d = () → () → core::int => self::a.{self::A::f}<() → core::int>(self::e){(() → core::int) → () → core::int};
+static field () → core::int e = () → core::int => self::a.{self::A::g}(self::d){(dynamic) → core::int};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.modular.expect
index a062019..5e055de 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.modular.expect
@@ -1,37 +1,27 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:5: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
-// var b = /*@ returnType=() ->* invalid-type */ () =>
+// var b = /*@returnType=() -> dynamic*/ () =>
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(self::A::f::T* t) → self::A::f::T*
+  method f<T extends core::Object? = dynamic>(self::A::f::T% t) → self::A::f::T%
     return t;
-  method g(dynamic i) → core::int*
+  method g(dynamic i) → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field invalid-type b = () → () →* invalid-type => self::a.{self::A::f}<() →* invalid-type>(self::c){(() →* invalid-type) →* () →* invalid-type};
-static field () →* invalid-type c = () → invalid-type => self::a.{self::A::f}<invalid-type>(self::b){(invalid-type) →* invalid-type};
-static field () →* () →* core::int* d = () → () →* core::int* => self::a.{self::A::f}<() →* core::int*>(self::e){(() →* core::int*) →* () →* core::int*};
-static field () →* core::int* e = () → core::int* => self::a.{self::A::g}(self::d){(dynamic) →* core::int*};
+static field self::A a = new self::A::•();
+static field invalid-type b = () → () → dynamic => self::a.{self::A::f}<() → dynamic>(self::c){(() → dynamic) → () → dynamic};
+static field () → dynamic c = () → dynamic => self::a.{self::A::f}<dynamic>(self::b){(dynamic) → dynamic};
+static field () → () → core::int d = () → () → core::int => self::a.{self::A::f}<() → core::int>(self::e){(() → core::int) → () → core::int};
+static field () → core::int e = () → core::int => self::a.{self::A::g}(self::d){(dynamic) → core::int};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.outline.expect
index 18a055f..c6bcaad 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.outline.expect
@@ -1,37 +1,27 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:5: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
-// var b = /*@ returnType=() ->* invalid-type */ () =>
+// var b = /*@returnType=() -> dynamic*/ () =>
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  method f<T extends core::Object* = dynamic>(self::A::f::T* t) → self::A::f::T*
+  method f<T extends core::Object? = dynamic>(self::A::f::T% t) → self::A::f::T%
     ;
-  method g(dynamic i) → core::int*
+  method g(dynamic i) → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a;
+static field self::A a;
 static field invalid-type b;
-static field () →* invalid-type c;
-static field () →* () →* core::int* d;
-static field () →* core::int* e;
+static field () → dynamic c;
+static field () → () → core::int d;
+static field () → core::int e;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.transformed.expect
index a062019..5e055de 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.transformed.expect
@@ -1,37 +1,27 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:5: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
-// var b = /*@ returnType=() ->* invalid-type */ () =>
+// var b = /*@returnType=() -> dynamic*/ () =>
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method f<T extends core::Object* = dynamic>(self::A::f::T* t) → self::A::f::T*
+  method f<T extends core::Object? = dynamic>(self::A::f::T% t) → self::A::f::T%
     return t;
-  method g(dynamic i) → core::int*
+  method g(dynamic i) → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field invalid-type b = () → () →* invalid-type => self::a.{self::A::f}<() →* invalid-type>(self::c){(() →* invalid-type) →* () →* invalid-type};
-static field () →* invalid-type c = () → invalid-type => self::a.{self::A::f}<invalid-type>(self::b){(invalid-type) →* invalid-type};
-static field () →* () →* core::int* d = () → () →* core::int* => self::a.{self::A::f}<() →* core::int*>(self::e){(() →* core::int*) →* () →* core::int*};
-static field () →* core::int* e = () → core::int* => self::a.{self::A::g}(self::d){(dynamic) →* core::int*};
+static field self::A a = new self::A::•();
+static field invalid-type b = () → () → dynamic => self::a.{self::A::f}<() → dynamic>(self::c){(() → dynamic) → () → dynamic};
+static field () → dynamic c = () → dynamic => self::a.{self::A::f}<dynamic>(self::b){(dynamic) → dynamic};
+static field () → () → core::int d = () → () → core::int => self::a.{self::A::f}<() → core::int>(self::e){(() → core::int) → () → core::int};
+static field () → core::int e = () → core::int => self::a.{self::A::g}(self::d){(dynamic) → core::int};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart
index 11dc14d..a0a1f97 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -12,18 +12,18 @@
 // There's a circularity between a and b because the type of `int + x` depends
 // on the type of x.
 
-var a = /*@ returnType=num* */ () => intValue /*@target=num.+*/ + b;
+var a = /*@returnType=num*/ () => intValue /*@target=num.+*/ + b;
 var b = a();
 
 // But there's no circularity between c and d because the type of `num + x` is
 // always num.
 
-var c = /*@ returnType=num* */ () => numValue /*@target=num.+*/ + d;
+var c = /*@returnType=num*/ () => numValue /*@target=num.+*/ + d;
 var d = c();
 
 // Similar for double.
 
-var e = /*@ returnType=double* */ () => doubleValue /*@target=double.+*/ + f;
+var e = /*@returnType=double*/ () => doubleValue /*@target=double.+*/ + f;
 var f = e();
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.textual_outline.expect
index 381ac89..db69969 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 int intValue = 0;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.textual_outline_modelled.expect
index d6dd90a..5009f27 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 double doubleValue = 0.0;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.expect
index 3ae5f85..b8229d9 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.expect
@@ -1,22 +1,32 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:5: Error: Can't infer the type of 'a': circularity found during type inference.
 // Specify the type explicitly.
-// var a = /*@ returnType=num* */ () => intValue /*@target=num.+*/ + b;
+// var a = /*@returnType=num*/ () => intValue /*@target=num.+*/ + b;
+//     ^
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:21:5: Error: Can't infer the type of 'c': circularity found during type inference.
+// Specify the type explicitly.
+// var c = /*@returnType=num*/ () => numValue /*@target=num.+*/ + d;
+//     ^
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:26:5: Error: Can't infer the type of 'e': circularity found during type inference.
+// Specify the type explicitly.
+// var e = /*@returnType=double*/ () => doubleValue /*@target=double.+*/ + f;
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
-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,ForDynamic} core::num*){(core::num*) →* core::num*};
+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,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
 static field dynamic b = self::a{dynamic}.call();
-static field () →* core::num* c = () → core::num* => self::numValue.{core::num::+}(self::d){(core::num*) →* core::num*};
-static field core::num* d = self::c(){() →* core::num*};
-static field () →* core::double* e = () → core::double* => self::doubleValue.{core::double::+}(self::f){(core::num*) →* core::double*};
-static field core::double* f = self::e(){() →* core::double*};
+static field invalid-type c = () → core::num => self::numValue.{core::num::+}(self::d as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+static field dynamic d = self::c{dynamic}.call();
+static field invalid-type e = () → core::double => self::doubleValue.{core::double::+}(self::f as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::double};
+static field dynamic f = self::e{dynamic}.call();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.modular.expect
index 3ae5f85..b8229d9 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.modular.expect
@@ -1,22 +1,32 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:5: Error: Can't infer the type of 'a': circularity found during type inference.
 // Specify the type explicitly.
-// var a = /*@ returnType=num* */ () => intValue /*@target=num.+*/ + b;
+// var a = /*@returnType=num*/ () => intValue /*@target=num.+*/ + b;
+//     ^
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:21:5: Error: Can't infer the type of 'c': circularity found during type inference.
+// Specify the type explicitly.
+// var c = /*@returnType=num*/ () => numValue /*@target=num.+*/ + d;
+//     ^
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:26:5: Error: Can't infer the type of 'e': circularity found during type inference.
+// Specify the type explicitly.
+// var e = /*@returnType=double*/ () => doubleValue /*@target=double.+*/ + f;
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
-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,ForDynamic} core::num*){(core::num*) →* core::num*};
+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,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
 static field dynamic b = self::a{dynamic}.call();
-static field () →* core::num* c = () → core::num* => self::numValue.{core::num::+}(self::d){(core::num*) →* core::num*};
-static field core::num* d = self::c(){() →* core::num*};
-static field () →* core::double* e = () → core::double* => self::doubleValue.{core::double::+}(self::f){(core::num*) →* core::double*};
-static field core::double* f = self::e(){() →* core::double*};
+static field invalid-type c = () → core::num => self::numValue.{core::num::+}(self::d as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+static field dynamic d = self::c{dynamic}.call();
+static field invalid-type e = () → core::double => self::doubleValue.{core::double::+}(self::f as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::double};
+static field dynamic f = self::e{dynamic}.call();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.outline.expect
index 0c6966f..e5019cc 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.outline.expect
@@ -1,23 +1,33 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:5: Error: Can't infer the type of 'a': circularity found during type inference.
 // Specify the type explicitly.
-// var a = /*@ returnType=num* */ () => intValue /*@target=num.+*/ + b;
+// var a = /*@returnType=num*/ () => intValue /*@target=num.+*/ + b;
+//     ^
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:21:5: Error: Can't infer the type of 'c': circularity found during type inference.
+// Specify the type explicitly.
+// var c = /*@returnType=num*/ () => numValue /*@target=num.+*/ + d;
+//     ^
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:26:5: Error: Can't infer the type of 'e': circularity found during type inference.
+// Specify the type explicitly.
+// var e = /*@returnType=double*/ () => doubleValue /*@target=double.+*/ + f;
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
-static field core::int* intValue;
-static field core::num* numValue;
-static field core::double* doubleValue;
+static field core::int intValue;
+static field core::num numValue;
+static field core::double doubleValue;
 static field invalid-type a;
 static field dynamic b;
-static field () →* core::num* c;
-static field core::num* d;
-static field () →* core::double* e;
-static field core::double* f;
+static field invalid-type c;
+static field dynamic d;
+static field invalid-type e;
+static field dynamic f;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.transformed.expect
index 3ae5f85..b8229d9 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.transformed.expect
@@ -1,22 +1,32 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:5: Error: Can't infer the type of 'a': circularity found during type inference.
 // Specify the type explicitly.
-// var a = /*@ returnType=num* */ () => intValue /*@target=num.+*/ + b;
+// var a = /*@returnType=num*/ () => intValue /*@target=num.+*/ + b;
+//     ^
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:21:5: Error: Can't infer the type of 'c': circularity found during type inference.
+// Specify the type explicitly.
+// var c = /*@returnType=num*/ () => numValue /*@target=num.+*/ + d;
+//     ^
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:26:5: Error: Can't infer the type of 'e': circularity found during type inference.
+// Specify the type explicitly.
+// var e = /*@returnType=double*/ () => doubleValue /*@target=double.+*/ + f;
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
-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,ForDynamic} core::num*){(core::num*) →* core::num*};
+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,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
 static field dynamic b = self::a{dynamic}.call();
-static field () →* core::num* c = () → core::num* => self::numValue.{core::num::+}(self::d){(core::num*) →* core::num*};
-static field core::num* d = self::c(){() →* core::num*};
-static field () →* core::double* e = () → core::double* => self::doubleValue.{core::double::+}(self::f){(core::num*) →* core::double*};
-static field core::double* f = self::e(){() →* core::double*};
+static field invalid-type c = () → core::num => self::numValue.{core::num::+}(self::d as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+static field dynamic d = self::c{dynamic}.call();
+static field invalid-type e = () → core::double => self::doubleValue.{core::double::+}(self::f as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::double};
+static field dynamic f = self::e{dynamic}.call();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart b/pkg/front_end/testcases/inference_new/do_loop.dart
index db7e93c..6236d83 100644
--- a/pkg/front_end/testcases/inference_new/do_loop.dart
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 void test() {
   do {
-    var /*@ type=int* */ x = 0;
-  } while (/*@ typeArgs=bool* */ f());
+    var /*@type=int*/ x = 0;
+  } while (/*@typeArgs=bool*/ f());
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/do_loop.dart.textual_outline.expect
index c1725cf..0afd8e8 100644
--- a/pkg/front_end/testcases/inference_new/do_loop.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart.textual_outline.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 void test() {}
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/do_loop.dart.textual_outline_modelled.expect
index f75a9d3..c8d2993 100644
--- a/pkg/front_end/testcases/inference_new/do_loop.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 main() {}
 void test() {}
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart.weak.expect b/pkg/front_end/testcases/inference_new/do_loop.dart.weak.expect
index 2639877..d53156f 100644
--- a/pkg/front_end/testcases/inference_new/do_loop.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart.weak.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → void {
   do {
-    core::int* x = 0;
+    core::int x = 0;
   }
-  while (self::f<core::bool*>())
+  while (self::f<core::bool>())
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/do_loop.dart.weak.modular.expect
index 2639877..d53156f 100644
--- a/pkg/front_end/testcases/inference_new/do_loop.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → void {
   do {
-    core::int* x = 0;
+    core::int x = 0;
   }
-  while (self::f<core::bool*>())
+  while (self::f<core::bool>())
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/do_loop.dart.weak.outline.expect
index dfd99e1..247b913 100644
--- a/pkg/front_end/testcases/inference_new/do_loop.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/do_loop.dart.weak.transformed.expect
index 2639877..d53156f 100644
--- a/pkg/front_end/testcases/inference_new/do_loop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → void {
   do {
-    core::int* x = 0;
+    core::int x = 0;
   }
-  while (self::f<core::bool*>())
+  while (self::f<core::bool>())
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart
index 98279be..74dd2ef 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart
@@ -1,18 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A {
-  B<int> b;
+  B<int> b = throw '';
 }
 
 class B<T> {
   B(T x);
 }
 
-var t3 = /*@ typeArgs=B<int*>* */ [new /*@ typeArgs=int* */ B(3)];
+var t3 = /*@typeArgs=B<int>*/ [new /*@typeArgs=int*/ B(3)];
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.textual_outline.expect
index c50a4eb..36c44ef 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class A {
-  B<int> b;
+  B<int> b = throw '';
 }
 
 class B<T> {
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.textual_outline_modelled.expect
index a4eb367..7c15f17 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class A {
-  B<int> b;
+  B<int> b = throw '';
 }
 
 class B<T> {
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.expect
index f211b44..fdb9608 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B<core::int*>* b = null;
-  synthetic constructor •() → self::A*
+  field self::B<core::int> b = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B::T* x) → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B::T% x) → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::B<core::int*>*>* t3 = <self::B<core::int*>*>[new self::B::•<core::int*>(3)];
+static field core::List<self::B<core::int>> t3 = <self::B<core::int>>[new self::B::•<core::int>(3)];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.modular.expect
index f211b44..fdb9608 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.modular.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B<core::int*>* b = null;
-  synthetic constructor •() → self::A*
+  field self::B<core::int> b = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B::T* x) → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B::T% x) → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::B<core::int*>*>* t3 = <self::B<core::int*>*>[new self::B::•<core::int*>(3)];
+static field core::List<self::B<core::int>> t3 = <self::B<core::int>>[new self::B::•<core::int>(3)];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.outline.expect
index da8cc55..b4ebe14 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.outline.expect
@@ -1,36 +1,16 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B<core::int*>* b;
-  synthetic constructor •() → self::A*
+  field self::B<core::int> b;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B::T* x) → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B::T% x) → self::B<self::B::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::B<core::int*>*>* t3;
+static field core::List<self::B<core::int>> t3;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.transformed.expect
index d837da1..89f28aa 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.transformed.expect
@@ -1,37 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B<core::int*>* b = null;
-  synthetic constructor •() → self::A*
+  field self::B<core::int> b = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::B::T* x) → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::B::T% x) → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::B<core::int*>*>* t3 = core::_GrowableList::_literal1<self::B<core::int*>*>(new self::B::•<core::int*>(3));
+static field core::List<self::B<core::int>> t3 = core::_GrowableList::_literal1<self::B<core::int>>(new self::B::•<core::int>(3));
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart
index a533b3b..5f75350 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -9,6 +9,6 @@
   A(T x);
 }
 
-var t2 = /*@ typeArgs=A<int*>* */ [new /*@ typeArgs=int* */ A(2)];
+var t2 = /*@typeArgs=A<int>*/ [new /*@typeArgs=int*/ A(2)];
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.textual_outline.expect
index 2f86ee7..c5e4a4c 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.textual_outline_modelled.expect
index 471fb75..4da7ccb 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A<T> {
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.expect
index aaa7123..0b3ee24 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::A::T* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::A::T% x) → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::A<core::int*>*>* t2 = <self::A<core::int*>*>[new self::A::•<core::int*>(2)];
+static field core::List<self::A<core::int>> t2 = <self::A<core::int>>[new self::A::•<core::int>(2)];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.modular.expect
index aaa7123..0b3ee24 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::A::T* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::A::T% x) → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::A<core::int*>*>* t2 = <self::A<core::int*>*>[new self::A::•<core::int*>(2)];
+static field core::List<self::A<core::int>> t2 = <self::A<core::int>>[new self::A::•<core::int>(2)];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.outline.expect
index c57765a..0723849 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::A::T* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::A::T% x) → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::A<core::int*>*>* t2;
+static field core::List<self::A<core::int>> t2;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.transformed.expect
index 8a0e9d7..2a2e0f5 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::A::T* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::A::T% x) → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::A<core::int*>*>* t2 = core::_GrowableList::_literal1<self::A<core::int*>*>(new self::A::•<core::int*>(2));
+static field core::List<self::A<core::int>> t2 = core::_GrowableList::_literal1<self::A<core::int>>(new self::A::•<core::int>(2));
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart
index 7b0ea41..c5280e5 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.textual_outline.expect
index 183d7ba..fa0576a 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.textual_outline_modelled.expect
index 183d7ba..fa0576a 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.expect
index b83a5f8..ef441c3 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,30 +7,24 @@
 //   var x = /*@returnType=invalid-type*/ () => new B(). /*@target=B.x*/ x;
 //       ^
 //
+// pkg/front_end/testcases/inference_new/field_inference_circularity.dart:18:7: Error: Field 'y' should be initialized because its type 'invalid-type Function()' doesn't allow null.
+//   var y;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field invalid-type x = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
-  field () →* invalid-type y = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
-  synthetic constructor •() → self::A*
+  field () → invalid-type y = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
   field invalid-type x = null;
-  field () →* invalid-type y = null;
-  synthetic constructor •() → self::B*
+  field () → invalid-type y = null;
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.modular.expect
index b83a5f8..ef441c3 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,30 +7,24 @@
 //   var x = /*@returnType=invalid-type*/ () => new B(). /*@target=B.x*/ x;
 //       ^
 //
+// pkg/front_end/testcases/inference_new/field_inference_circularity.dart:18:7: Error: Field 'y' should be initialized because its type 'invalid-type Function()' doesn't allow null.
+//   var y;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field invalid-type x = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
-  field () →* invalid-type y = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
-  synthetic constructor •() → self::A*
+  field () → invalid-type y = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
   field invalid-type x = null;
-  field () →* invalid-type y = null;
-  synthetic constructor •() → self::B*
+  field () → invalid-type y = null;
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.outline.expect
index c411f2e..6778f99 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,24 +12,14 @@
 
 class A extends core::Object {
   field invalid-type x;
-  field () →* invalid-type y;
-  synthetic constructor •() → self::A*
+  field () → invalid-type y;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
   field invalid-type x;
-  field () →* invalid-type y;
-  synthetic constructor •() → self::B*
+  field () → invalid-type y;
+  synthetic constructor •() → self::B
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.transformed.expect
index b83a5f8..ef441c3 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,30 +7,24 @@
 //   var x = /*@returnType=invalid-type*/ () => new B(). /*@target=B.x*/ x;
 //       ^
 //
+// pkg/front_end/testcases/inference_new/field_inference_circularity.dart:18:7: Error: Field 'y' should be initialized because its type 'invalid-type Function()' doesn't allow null.
+//   var y;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field invalid-type x = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
-  field () →* invalid-type y = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
-  synthetic constructor •() → self::A*
+  field () → invalid-type y = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
   field invalid-type x = null;
-  field () →* invalid-type y = null;
-  synthetic constructor •() → self::B*
+  field () → invalid-type y = null;
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart
index 67ad57a..4e777d0 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart
@@ -1,33 +1,33 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {}
 
-A aTopLevel;
+A aTopLevel = throw '';
 void set aTopLevelSetter(A value) {}
 
 class C {
-  A aField;
+  A aField = throw '';
   void set aSetter(A value) {}
   void test() {
     A aLocal;
-    for (aLocal in /*@ typeArgs=Iterable<A*>* */ f()) {}
+    for (aLocal in /*@typeArgs=Iterable<A>*/ f()) {}
 
     for (/*@target=C.aField*/ /*@target=C.aField*/ aField
-        in /*@ typeArgs=Iterable<A*>* */ f()) {}
+        in /*@typeArgs=Iterable<A>*/ f()) {}
 
     for (/*@target=C.aSetter*/ /*@target=C.aSetter*/ aSetter
-        in /*@ typeArgs=Iterable<A*>* */ f()) {}
+        in /*@typeArgs=Iterable<A>*/ f()) {}
 
-    for (aTopLevel in /*@ typeArgs=Iterable<A*>* */ f()) {}
+    for (aTopLevel in /*@typeArgs=Iterable<A>*/ f()) {}
 
-    for (aTopLevelSetter in /*@ typeArgs=Iterable<A*>* */ f()) {}
+    for (aTopLevelSetter in /*@typeArgs=Iterable<A>*/ f()) {}
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.textual_outline.expect
index 374f323..5a2c283 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.textual_outline.expect
@@ -1,15 +1,14 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {}
 
-A aTopLevel;
+A aTopLevel = throw '';
 void set aTopLevelSetter(A value) {}
 
 class C {
-  A aField;
+  A aField = throw '';
   void set aSetter(A value) {}
   void test() {}
 }
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.textual_outline_modelled.expect
index 321922a..e950eee 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.textual_outline_modelled.expect
@@ -1,13 +1,12 @@
-// @dart = 2.9
 library test;
 
-A aTopLevel;
-T f<T>() => null;
+A aTopLevel = throw '';
+T f<T>() => throw '';
 
 class A {}
 
 class C {
-  A aField;
+  A aField = throw '';
   void set aSetter(A value) {}
   void test() {}
 }
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.expect
index 0a972fb..56724a4 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.expect
@@ -1,59 +1,39 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::A* aField = null;
-  synthetic constructor •() → self::C*
+  field self::A aField = throw "";
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set aSetter(self::A* value) → void {}
+  set aSetter(self::A value) → void {}
   method test() → void {
-    self::A* aLocal;
-    for (final self::A* #t1 in self::f<core::Iterable<self::A*>*>()) {
+    self::A aLocal;
+    for (final self::A #t1 in self::f<core::Iterable<self::A>>()) {
       aLocal = #t1;
     }
-    for (final self::A* #t2 in self::f<core::Iterable<self::A*>*>()) {
+    for (final self::A #t2 in self::f<core::Iterable<self::A>>()) {
       this.{self::C::aField} = #t2;
     }
-    for (final self::A* #t3 in self::f<core::Iterable<self::A*>*>()) {
+    for (final self::A #t3 in self::f<core::Iterable<self::A>>()) {
       this.{self::C::aSetter} = #t3;
     }
-    for (final self::A* #t4 in self::f<core::Iterable<self::A*>*>()) {
+    for (final self::A #t4 in self::f<core::Iterable<self::A>>()) {
       self::aTopLevel = #t4;
     }
-    for (final self::A* #t5 in self::f<core::Iterable<self::A*>*>()) {
+    for (final self::A #t5 in self::f<core::Iterable<self::A>>()) {
       self::aTopLevelSetter = #t5;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* aTopLevel;
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static set aTopLevelSetter(self::A* value) → void {}
+static field self::A aTopLevel = throw "";
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static set aTopLevelSetter(self::A value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.modular.expect
index 0a972fb..56724a4 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.modular.expect
@@ -1,59 +1,39 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::A* aField = null;
-  synthetic constructor •() → self::C*
+  field self::A aField = throw "";
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set aSetter(self::A* value) → void {}
+  set aSetter(self::A value) → void {}
   method test() → void {
-    self::A* aLocal;
-    for (final self::A* #t1 in self::f<core::Iterable<self::A*>*>()) {
+    self::A aLocal;
+    for (final self::A #t1 in self::f<core::Iterable<self::A>>()) {
       aLocal = #t1;
     }
-    for (final self::A* #t2 in self::f<core::Iterable<self::A*>*>()) {
+    for (final self::A #t2 in self::f<core::Iterable<self::A>>()) {
       this.{self::C::aField} = #t2;
     }
-    for (final self::A* #t3 in self::f<core::Iterable<self::A*>*>()) {
+    for (final self::A #t3 in self::f<core::Iterable<self::A>>()) {
       this.{self::C::aSetter} = #t3;
     }
-    for (final self::A* #t4 in self::f<core::Iterable<self::A*>*>()) {
+    for (final self::A #t4 in self::f<core::Iterable<self::A>>()) {
       self::aTopLevel = #t4;
     }
-    for (final self::A* #t5 in self::f<core::Iterable<self::A*>*>()) {
+    for (final self::A #t5 in self::f<core::Iterable<self::A>>()) {
       self::aTopLevelSetter = #t5;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* aTopLevel;
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static set aTopLevelSetter(self::A* value) → void {}
+static field self::A aTopLevel = throw "";
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static set aTopLevelSetter(self::A value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.outline.expect
index 84885cb..b716a6e 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.outline.expect
@@ -1,44 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::A* aField;
-  synthetic constructor •() → self::C*
+  field self::A aField;
+  synthetic constructor •() → self::C
     ;
-  set aSetter(self::A* value) → void
+  set aSetter(self::A value) → void
     ;
   method test() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* aTopLevel;
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static field self::A aTopLevel;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
-static set aTopLevelSetter(self::A* value) → void
+static set aTopLevelSetter(self::A value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.transformed.expect
index b44d33f..9f6f75ad 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.transformed.expect
@@ -1,89 +1,69 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  field self::A* aField = null;
-  synthetic constructor •() → self::C*
+  field self::A aField = throw "";
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set aSetter(self::A* value) → void {}
+  set aSetter(self::A value) → void {}
   method test() → void {
-    self::A* aLocal;
+    self::A aLocal;
     {
-      core::Iterator<self::A*>* :sync-for-iterator = self::f<core::Iterable<self::A*>*>().{core::Iterable::iterator}{core::Iterator<self::A*>*};
+      core::Iterator<self::A> :sync-for-iterator = self::f<core::Iterable<self::A>>().{core::Iterable::iterator}{core::Iterator<self::A>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final self::A* #t1 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+        final self::A #t1 = :sync-for-iterator.{core::Iterator::current}{self::A};
         {
           aLocal = #t1;
         }
       }
     }
     {
-      core::Iterator<self::A*>* :sync-for-iterator = self::f<core::Iterable<self::A*>*>().{core::Iterable::iterator}{core::Iterator<self::A*>*};
+      core::Iterator<self::A> :sync-for-iterator = self::f<core::Iterable<self::A>>().{core::Iterable::iterator}{core::Iterator<self::A>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final self::A* #t2 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+        final self::A #t2 = :sync-for-iterator.{core::Iterator::current}{self::A};
         {
           this.{self::C::aField} = #t2;
         }
       }
     }
     {
-      core::Iterator<self::A*>* :sync-for-iterator = self::f<core::Iterable<self::A*>*>().{core::Iterable::iterator}{core::Iterator<self::A*>*};
+      core::Iterator<self::A> :sync-for-iterator = self::f<core::Iterable<self::A>>().{core::Iterable::iterator}{core::Iterator<self::A>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final self::A* #t3 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+        final self::A #t3 = :sync-for-iterator.{core::Iterator::current}{self::A};
         {
           this.{self::C::aSetter} = #t3;
         }
       }
     }
     {
-      core::Iterator<self::A*>* :sync-for-iterator = self::f<core::Iterable<self::A*>*>().{core::Iterable::iterator}{core::Iterator<self::A*>*};
+      core::Iterator<self::A> :sync-for-iterator = self::f<core::Iterable<self::A>>().{core::Iterable::iterator}{core::Iterator<self::A>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final self::A* #t4 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+        final self::A #t4 = :sync-for-iterator.{core::Iterator::current}{self::A};
         {
           self::aTopLevel = #t4;
         }
       }
     }
     {
-      core::Iterator<self::A*>* :sync-for-iterator = self::f<core::Iterable<self::A*>*>().{core::Iterable::iterator}{core::Iterator<self::A*>*};
+      core::Iterator<self::A> :sync-for-iterator = self::f<core::Iterable<self::A>>().{core::Iterable::iterator}{core::Iterator<self::A>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final self::A* #t5 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+        final self::A #t5 = :sync-for-iterator.{core::Iterator::current}{self::A};
         {
           self::aTopLevelSetter = #t5;
         }
       }
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* aTopLevel;
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static set aTopLevelSetter(self::A* value) → void {}
+static field self::A aTopLevel = throw "";
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static set aTopLevelSetter(self::A value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart
index 8b49117..af01e13 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart
@@ -1,15 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-test() async {
-  String s;
+test(String s, int y) async {
   for (int x in s) {}
   await for (int x in s) {}
-  int y;
   for (y in s) {}
   await for (y in s) {}
 }
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.textual_outline.expect
index 5733dcf..ae9825d 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
-test() async {}
+test(String s, int y) async {}
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.textual_outline_modelled.expect
index aa8a2f6..b4ae717 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 library test;
 
 main() {}
-test() async {}
+test(String s, int y) async {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.expect
index 63943b6..ed31071 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.expect
@@ -1,23 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:9:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (int x in s) {}
 //                 ^
 //
-// 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>'.
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10: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) {}
 //                       ^
 //
-// 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>'.
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (y in s) {}
 //             ^
 //
-// 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>'.
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:12:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 //  - 'Stream' is from 'dart:async'.
 //   await for (y in s) {}
 //                   ^
@@ -26,32 +26,30 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method test() → dynamic async /* futureValueType= dynamic */ {
-  core::String* s;
-  for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+static method test(core::String s, core::int y) → dynamic async /* futureValueType= dynamic */ {
+  for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:9:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (int x in s) {}
-                ^" in s as{TypeError} core::Iterable<dynamic>*) {
-    core::int* x = #t1 as{TypeError,ForDynamic} core::int*;
+                ^" in s as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
-  await for (final dynamic #t2 in 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>'.
+  await for (final dynamic #t2 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10: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 = #t2 as{TypeError,ForDynamic} core::int*;
+                      ^" in s as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>) {
+    core::int x = #t2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
-  core::int* y;
-  for (final dynamic #t3 in 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>'.
+  for (final dynamic #t3 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11: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 = #t3 as{TypeError,ForDynamic} core::int*;
+            ^" in s as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    y = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
-  await for (final dynamic #t4 in 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>'.
+  await for (final dynamic #t4 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:12: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 = #t4 as{TypeError,ForDynamic} core::int*;
+                  ^" in s as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>) {
+    y = #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.modular.expect
index 63943b6..ed31071 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.modular.expect
@@ -1,23 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:9:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (int x in s) {}
 //                 ^
 //
-// 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>'.
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10: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) {}
 //                       ^
 //
-// 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>'.
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (y in s) {}
 //             ^
 //
-// 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>'.
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:12:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 //  - 'Stream' is from 'dart:async'.
 //   await for (y in s) {}
 //                   ^
@@ -26,32 +26,30 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method test() → dynamic async /* futureValueType= dynamic */ {
-  core::String* s;
-  for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+static method test(core::String s, core::int y) → dynamic async /* futureValueType= dynamic */ {
+  for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:9:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (int x in s) {}
-                ^" in s as{TypeError} core::Iterable<dynamic>*) {
-    core::int* x = #t1 as{TypeError,ForDynamic} core::int*;
+                ^" in s as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
-  await for (final dynamic #t2 in 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>'.
+  await for (final dynamic #t2 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10: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 = #t2 as{TypeError,ForDynamic} core::int*;
+                      ^" in s as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>) {
+    core::int x = #t2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
-  core::int* y;
-  for (final dynamic #t3 in 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>'.
+  for (final dynamic #t3 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11: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 = #t3 as{TypeError,ForDynamic} core::int*;
+            ^" in s as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    y = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
-  await for (final dynamic #t4 in 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>'.
+  await for (final dynamic #t4 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:12: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 = #t4 as{TypeError,ForDynamic} core::int*;
+                  ^" in s as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>) {
+    y = #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.outline.expect
index f69f500..66feddc 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.outline.expect
@@ -1,7 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method test() → dynamic async 
+static method test(core::String s, core::int y) → dynamic async 
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
index 6ab4fd2..c407248 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
@@ -1,23 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:9:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (int x in s) {}
 //                 ^
 //
-// 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>'.
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10: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) {}
 //                       ^
 //
-// 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>'.
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (y in s) {}
 //             ^
 //
-// 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>'.
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:12:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 //  - 'Stream' is from 'dart:async'.
 //   await for (y in s) {}
 //                   ^
@@ -26,61 +26,59 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method test() → dynamic async /* futureValueType= dynamic */ {
-  core::String* s;
+static method test(core::String s, core::int y) → dynamic async /* futureValueType= dynamic */ {
   {
-    core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:9:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (int x in s) {}
-                ^" in s as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
+                ^" in s as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       final dynamic #t1 = :sync-for-iterator.{core::Iterator::current}{Never};
       {
-        core::int* x = #t1 as{TypeError,ForDynamic} core::int*;
+        core::int x = #t1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       }
     }
   }
   {
-    Never :stream = 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>'.
+    Never :stream = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10: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>*;
-    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+                      ^" in s as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>;
+    asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
     try
       while (let dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
         final dynamic #t3 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          core::int* x = #t3 as{TypeError,ForDynamic} core::int*;
+          core::int x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         }
       }
     finally
       if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
-  core::int* y;
   {
-    core::Iterator<Never>* :sync-for-iterator = 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>'.
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11: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>*.{core::Iterable::iterator}{core::Iterator<Never>*};
+            ^" in s as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       final dynamic #t4 = :sync-for-iterator.{core::Iterator::current}{Never};
       {
-        y = #t4 as{TypeError,ForDynamic} core::int*;
+        y = #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       }
     }
   }
   {
-    Never :stream = 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>'.
+    Never :stream = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:12: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>*;
-    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+                  ^" in s as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>;
+    asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
     try
       while (let dynamic #t5 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
         final dynamic #t6 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          y = #t6 as{TypeError,ForDynamic} core::int*;
+          y = #t6 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         }
       }
     finally
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart
index 6648037..665c697 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart
@@ -1,32 +1,27 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {}
 
 class B extends A {}
 
-test() async {
-  Iterable<A> iterable;
-  Stream<A> stream;
-  A a;
-  B b;
-  int i;
+test(Iterable<B> iterable, Stream<B> stream, A a, B b, int i) async {
   for (a in iterable) {}
   await for (a in stream) {}
   for (b in iterable) {}
   await for (b in stream) {}
   for (i in iterable) {}
   await for (i in stream) {}
-  for (a in /*@ typeArgs=Iterable<A*>* */ f()) {}
-  await for (a in /*@ typeArgs=Stream<A*>* */ f()) {}
+  for (a in /*@typeArgs=Iterable<A>*/ f()) {}
+  await for (a in /*@typeArgs=Stream<A>*/ f()) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.textual_outline.expect
index 7f667e4..ae8dd4e 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.textual_outline.expect
@@ -1,13 +1,12 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {}
 
 class B extends A {}
 
-test() async {}
+test(Iterable<B> iterable, Stream<B> stream, A a, B b, int i) async {}
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.textual_outline_modelled.expect
index 0c16263..49d9d4d 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.textual_outline_modelled.expect
@@ -1,13 +1,12 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {}
 
 class B extends A {}
 
 main() {}
-test() async {}
+test(Iterable<B> iterable, Stream<B> stream, A a, B b, int i) async {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.expect
index 5c4c5e0..4136656 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.expect
@@ -1,15 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
-//  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:21:10: Error: A value of type 'B' can't be assigned to a variable of type 'int'.
+//  - 'B' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 // Try changing the type of the variable.
 //   for (i in iterable) {}
 //          ^
 //
-// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
-//  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:22:16: Error: A value of type 'B' can't be assigned to a variable of type 'int'.
+//  - 'B' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 // Try changing the type of the variable.
 //   await for (i in stream) {}
 //                ^
@@ -21,63 +21,48 @@
 import "dart:async";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method test() → dynamic async /* futureValueType= dynamic */ {
-  core::Iterable<self::A*>* iterable;
-  asy::Stream<self::A*>* stream;
-  self::A* a;
-  self::B* b;
-  core::int* i;
-  for (final self::A* #t1 in iterable) {
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test(core::Iterable<self::B> iterable, asy::Stream<self::B> stream, self::A a, self::B b, core::int i) → dynamic async /* futureValueType= dynamic */ {
+  for (final self::B #t1 in iterable) {
     a = #t1;
   }
-  await for (final self::A* #t2 in stream) {
+  await for (final self::B #t2 in stream) {
     a = #t2;
   }
-  for (final self::A* #t3 in iterable) {
-    b = #t3 as{TypeError} self::B*;
+  for (final self::B #t3 in iterable) {
+    b = #t3;
   }
-  await for (final self::A* #t4 in stream) {
-    b = #t4 as{TypeError} self::B*;
+  await for (final self::B #t4 in stream) {
+    b = #t4;
   }
-  for (final self::A* #t5 in iterable) {
-    i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
- - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+  for (final self::B #t5 in iterable) {
+    i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:21:10: Error: A value of type 'B' can't be assigned to a variable of type 'int'.
+ - 'B' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 Try changing the type of the variable.
   for (i in iterable) {}
-         ^" in #t5 as{TypeError} core::int*;
+         ^" in #t5 as{TypeError,ForNonNullableByDefault} core::int;
   }
-  await for (final self::A* #t6 in stream) {
-    i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
- - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+  await for (final self::B #t6 in stream) {
+    i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:22:16: Error: A value of type 'B' can't be assigned to a variable of type 'int'.
+ - 'B' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 Try changing the type of the variable.
   await for (i in stream) {}
-               ^" in #t6 as{TypeError} core::int*;
+               ^" in #t6 as{TypeError,ForNonNullableByDefault} core::int;
   }
-  for (final self::A* #t7 in self::f<core::Iterable<self::A*>*>()) {
+  for (final self::A #t7 in self::f<core::Iterable<self::A>>()) {
     a = #t7;
   }
-  await for (final self::A* #t8 in self::f<asy::Stream<self::A*>*>()) {
+  await for (final self::A #t8 in self::f<asy::Stream<self::A>>()) {
     a = #t8;
   }
 }
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.modular.expect
index 5c4c5e0..4136656 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.modular.expect
@@ -1,15 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
-//  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:21:10: Error: A value of type 'B' can't be assigned to a variable of type 'int'.
+//  - 'B' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 // Try changing the type of the variable.
 //   for (i in iterable) {}
 //          ^
 //
-// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
-//  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:22:16: Error: A value of type 'B' can't be assigned to a variable of type 'int'.
+//  - 'B' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 // Try changing the type of the variable.
 //   await for (i in stream) {}
 //                ^
@@ -21,63 +21,48 @@
 import "dart:async";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method test() → dynamic async /* futureValueType= dynamic */ {
-  core::Iterable<self::A*>* iterable;
-  asy::Stream<self::A*>* stream;
-  self::A* a;
-  self::B* b;
-  core::int* i;
-  for (final self::A* #t1 in iterable) {
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test(core::Iterable<self::B> iterable, asy::Stream<self::B> stream, self::A a, self::B b, core::int i) → dynamic async /* futureValueType= dynamic */ {
+  for (final self::B #t1 in iterable) {
     a = #t1;
   }
-  await for (final self::A* #t2 in stream) {
+  await for (final self::B #t2 in stream) {
     a = #t2;
   }
-  for (final self::A* #t3 in iterable) {
-    b = #t3 as{TypeError} self::B*;
+  for (final self::B #t3 in iterable) {
+    b = #t3;
   }
-  await for (final self::A* #t4 in stream) {
-    b = #t4 as{TypeError} self::B*;
+  await for (final self::B #t4 in stream) {
+    b = #t4;
   }
-  for (final self::A* #t5 in iterable) {
-    i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
- - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+  for (final self::B #t5 in iterable) {
+    i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:21:10: Error: A value of type 'B' can't be assigned to a variable of type 'int'.
+ - 'B' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 Try changing the type of the variable.
   for (i in iterable) {}
-         ^" in #t5 as{TypeError} core::int*;
+         ^" in #t5 as{TypeError,ForNonNullableByDefault} core::int;
   }
-  await for (final self::A* #t6 in stream) {
-    i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
- - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+  await for (final self::B #t6 in stream) {
+    i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:22:16: Error: A value of type 'B' can't be assigned to a variable of type 'int'.
+ - 'B' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 Try changing the type of the variable.
   await for (i in stream) {}
-               ^" in #t6 as{TypeError} core::int*;
+               ^" in #t6 as{TypeError,ForNonNullableByDefault} core::int;
   }
-  for (final self::A* #t7 in self::f<core::Iterable<self::A*>*>()) {
+  for (final self::A #t7 in self::f<core::Iterable<self::A>>()) {
     a = #t7;
   }
-  await for (final self::A* #t8 in self::f<asy::Stream<self::A*>*>()) {
+  await for (final self::A #t8 in self::f<asy::Stream<self::A>>()) {
     a = #t8;
   }
 }
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.outline.expect
index c0d21be..7d8c86e 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.outline.expect
@@ -1,30 +1,21 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
+import "dart:async" as asy;
 
 import "dart:async";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
-static method test() → dynamic async 
+static method test(core::Iterable<self::B> iterable, asy::Stream<self::B> stream, self::A a, self::B b, core::int i) → dynamic async 
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
index 310c41e..d89d526 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
@@ -1,15 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
-//  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:21:10: Error: A value of type 'B' can't be assigned to a variable of type 'int'.
+//  - 'B' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 // Try changing the type of the variable.
 //   for (i in iterable) {}
 //          ^
 //
-// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
-//  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:22:16: Error: A value of type 'B' can't be assigned to a variable of type 'int'.
+//  - 'B' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 // Try changing the type of the variable.
 //   await for (i in stream) {}
 //                ^
@@ -21,131 +21,116 @@
 import "dart:async";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method test() → dynamic async /* futureValueType= dynamic */ {
-  core::Iterable<self::A*>* iterable;
-  asy::Stream<self::A*>* stream;
-  self::A* a;
-  self::B* b;
-  core::int* i;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test(core::Iterable<self::B> iterable, asy::Stream<self::B> stream, self::A a, self::B b, core::int i) → dynamic async /* futureValueType= dynamic */ {
   {
-    core::Iterator<self::A*>* :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<self::A*>*};
+    core::Iterator<self::B> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<self::B>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final self::A* #t1 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+      final self::B #t1 = :sync-for-iterator.{core::Iterator::current}{self::B};
       {
         a = #t1;
       }
     }
   }
   {
-    asy::Stream<self::A*>* :stream = stream;
-    asy::_StreamIterator<self::A*>* :for-iterator = new asy::_StreamIterator::•<self::A*>(:stream);
+    asy::Stream<self::B> :stream = stream;
+    asy::_StreamIterator<self::B>? :for-iterator = new asy::_StreamIterator::•<self::B>(:stream);
     try
       while (let dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-        final self::A* #t3 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
+        final self::B #t3 = :for-iterator.{asy::_StreamIterator::current}{self::B};
         {
           a = #t3;
         }
       }
     finally
-      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null))
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::B>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
   {
-    core::Iterator<self::A*>* :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<self::A*>*};
+    core::Iterator<self::B> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<self::B>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final self::A* #t4 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+      final self::B #t4 = :sync-for-iterator.{core::Iterator::current}{self::B};
       {
-        b = #t4 as{TypeError} self::B*;
+        b = #t4;
       }
     }
   }
   {
-    asy::Stream<self::A*>* :stream = stream;
-    asy::_StreamIterator<self::A*>* :for-iterator = new asy::_StreamIterator::•<self::A*>(:stream);
+    asy::Stream<self::B> :stream = stream;
+    asy::_StreamIterator<self::B>? :for-iterator = new asy::_StreamIterator::•<self::B>(:stream);
     try
       while (let dynamic #t5 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-        final self::A* #t6 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
+        final self::B #t6 = :for-iterator.{asy::_StreamIterator::current}{self::B};
         {
-          b = #t6 as{TypeError} self::B*;
+          b = #t6;
         }
       }
     finally
-      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null))
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::B>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
   {
-    core::Iterator<self::A*>* :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<self::A*>*};
+    core::Iterator<self::B> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<self::B>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final self::A* #t7 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+      final self::B #t7 = :sync-for-iterator.{core::Iterator::current}{self::B};
       {
-        i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
- - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+        i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:21:10: Error: A value of type 'B' can't be assigned to a variable of type 'int'.
+ - 'B' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 Try changing the type of the variable.
   for (i in iterable) {}
-         ^" in #t7 as{TypeError} core::int*;
+         ^" in #t7 as{TypeError,ForNonNullableByDefault} core::int;
       }
     }
   }
   {
-    asy::Stream<self::A*>* :stream = stream;
-    asy::_StreamIterator<self::A*>* :for-iterator = new asy::_StreamIterator::•<self::A*>(:stream);
+    asy::Stream<self::B> :stream = stream;
+    asy::_StreamIterator<self::B>? :for-iterator = new asy::_StreamIterator::•<self::B>(:stream);
     try
       while (let dynamic #t8 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-        final self::A* #t9 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
+        final self::B #t9 = :for-iterator.{asy::_StreamIterator::current}{self::B};
         {
-          i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
- - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+          i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:22:16: Error: A value of type 'B' can't be assigned to a variable of type 'int'.
+ - 'B' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 Try changing the type of the variable.
   await for (i in stream) {}
-               ^" in #t9 as{TypeError} core::int*;
+               ^" in #t9 as{TypeError,ForNonNullableByDefault} core::int;
         }
       }
     finally
-      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null))
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::B>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
   {
-    core::Iterator<self::A*>* :sync-for-iterator = self::f<core::Iterable<self::A*>*>().{core::Iterable::iterator}{core::Iterator<self::A*>*};
+    core::Iterator<self::A> :sync-for-iterator = self::f<core::Iterable<self::A>>().{core::Iterable::iterator}{core::Iterator<self::A>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final self::A* #t10 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+      final self::A #t10 = :sync-for-iterator.{core::Iterator::current}{self::A};
       {
         a = #t10;
       }
     }
   }
   {
-    asy::Stream<self::A*>* :stream = self::f<asy::Stream<self::A*>*>();
-    asy::_StreamIterator<self::A*>* :for-iterator = new asy::_StreamIterator::•<self::A*>(:stream);
+    asy::Stream<self::A> :stream = self::f<asy::Stream<self::A>>();
+    asy::_StreamIterator<self::A>? :for-iterator = new asy::_StreamIterator::•<self::A>(:stream);
     try
       while (let dynamic #t11 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
-        final self::A* #t12 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
+        final self::A #t12 = :for-iterator.{asy::_StreamIterator::current}{self::A};
         {
           a = #t12;
         }
       }
     finally
-      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null))
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A>?} == null))
         await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
   }
 }
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart
index 4e2ac28..92f03e6 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart
@@ -1,20 +1,20 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {
-  C operator +(int value) => null;
-  C operator *(D value) => null;
+  C operator +(int value) => throw '';
+  C operator *(D value) => throw '';
 }
 
 class B {
-  E operator +(int value) => null;
-  E operator *(F value) => null;
+  E operator +(int value) => throw '';
+  E operator *(F value) => throw '';
 }
 
 class C extends B {}
@@ -26,28 +26,28 @@
 class F {}
 
 class G {
-  A operator [](int i) => null;
+  A operator [](int i) => throw '';
 
   void operator []=(int i, B value) {}
 }
 
 void test1(G g) {
   g /*@target=G.[]*/ /*@target=G.[]=*/ [
-      0] /*@target=A.**/ *= /*@ typeArgs=D* */ f();
-  var /*@ type=C* */ x = g /*@target=G.[]*/ /*@target=G.[]=*/ [0]
+      0] /*@target=A.**/ *= /*@typeArgs=D*/ f();
+  var /*@type=C*/ x = g /*@target=G.[]*/ /*@target=G.[]=*/ [0]
       /*@target=A.**/
-      *= /*@ typeArgs=D* */ f();
+      *= /*@typeArgs=D*/ f();
 }
 
 void test2(G g) {
   /*@target=A.+*/ ++g /*@target=G.[]*/ /*@target=G.[]=*/ [0];
-  var /*@ type=C* */ x = /*@target=A.+*/ ++g /*@target=G.[]*/ /*@target=G.[]=*/ [
+  var /*@type=C*/ x = /*@target=A.+*/ ++g /*@target=G.[]*/ /*@target=G.[]=*/ [
       0];
 }
 
 void test3(G g) {
   g /*@target=G.[]*/ /*@target=G.[]=*/ [0] /*@target=A.+*/ ++;
-  var /*@ type=A* */ x =
+  var /*@type=A*/ x =
       g /*@target=G.[]*/ /*@target=G.[]=*/ [0] /*@target=A.+*/ ++;
 }
 
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.textual_outline.expect
index 794e044..41f2d27 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.textual_outline.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {
-  C operator +(int value) => null;
-  C operator *(D value) => null;
+  C operator +(int value) => throw '';
+  C operator *(D value) => throw '';
 }
 
 class B {
-  E operator +(int value) => null;
-  E operator *(F value) => null;
+  E operator +(int value) => throw '';
+  E operator *(F value) => throw '';
 }
 
 class C extends B {}
@@ -22,7 +21,7 @@
 class F {}
 
 class G {
-  A operator [](int i) => null;
+  A operator [](int i) => throw '';
   void operator []=(int i, B value) {}
 }
 
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.textual_outline_modelled.expect
index 77bbecd..4b0c012 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.textual_outline_modelled.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {
-  C operator *(D value) => null;
-  C operator +(int value) => null;
+  C operator *(D value) => throw '';
+  C operator +(int value) => throw '';
 }
 
 class B {
-  E operator *(F value) => null;
-  E operator +(int value) => null;
+  E operator *(F value) => throw '';
+  E operator +(int value) => throw '';
 }
 
 class C extends B {}
@@ -22,7 +21,7 @@
 class F {}
 
 class G {
-  A operator [](int i) => null;
+  A operator [](int i) => throw '';
   void operator []=(int i, B value) {}
 }
 
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.expect
index cf8fb9e..0afadfc 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.expect
@@ -1,125 +1,65 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::C*
-    return null;
-  operator *(self::D* value) → self::C*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::C
+    return throw "";
+  operator *(self::D value) → self::C
+    return throw "";
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::E*
-    return null;
-  operator *(self::F* value) → self::E*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::E
+    return throw "";
+  operator *(self::F value) → self::E
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends core::Object {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  operator [](core::int* i) → self::A*
-    return null;
-  operator []=(core::int* i, self::B* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int i) → self::A
+    return throw "";
+  operator []=(core::int i, self::B value) → void {}
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method test1(self::G* g) → void {
-  let final self::G* #t1 = g in let final core::int* #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2){(core::int*) →* self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*}){(core::int*, self::B*) →* void};
-  self::C* x = let final self::G* #t3 = g in let final core::int* #t4 = 0 in let final self::C* #t5 = #t3.{self::G::[]}(#t4){(core::int*) →* self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*} in let final void #t6 = #t3.{self::G::[]=}(#t4, #t5){(core::int*, self::B*) →* void} in #t5;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test1(self::G g) → void {
+  let final self::G #t1 = g in let final core::int #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2){(core::int) → self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C}){(core::int, self::B) → void};
+  self::C x = let final self::G #t3 = g in let final core::int #t4 = 0 in let final self::C #t5 = #t3.{self::G::[]}(#t4){(core::int) → self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C} in let final void #t6 = #t3.{self::G::[]=}(#t4, #t5){(core::int, self::B) → void} in #t5;
 }
-static method test2(self::G* g) → void {
-  let final self::G* #t7 = g in let final core::int* #t8 = 0 in let final self::C* #t9 = #t7.{self::G::[]}(#t8){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*} in let final void #t10 = #t7.{self::G::[]=}(#t8, #t9){(core::int*, self::B*) →* void} in #t9;
-  self::C* x = let final self::G* #t11 = g in let final core::int* #t12 = 0 in let final self::C* #t13 = #t11.{self::G::[]}(#t12){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*} in let final void #t14 = #t11.{self::G::[]=}(#t12, #t13){(core::int*, self::B*) →* void} in #t13;
+static method test2(self::G g) → void {
+  let final self::G #t7 = g in let final core::int #t8 = 0 in let final self::C #t9 = #t7.{self::G::[]}(#t8){(core::int) → self::A}.{self::A::+}(1){(core::int) → self::C} in let final void #t10 = #t7.{self::G::[]=}(#t8, #t9){(core::int, self::B) → void} in #t9;
+  self::C x = let final self::G #t11 = g in let final core::int #t12 = 0 in let final self::C #t13 = #t11.{self::G::[]}(#t12){(core::int) → self::A}.{self::A::+}(1){(core::int) → self::C} in let final void #t14 = #t11.{self::G::[]=}(#t12, #t13){(core::int, self::B) → void} in #t13;
 }
-static method test3(self::G* g) → void {
-  let final self::G* #t15 = g in let final core::int* #t16 = 0 in #t15.{self::G::[]=}(#t16, #t15.{self::G::[]}(#t16){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*}){(core::int*, self::B*) →* void};
-  self::A* x = let final self::G* #t17 = g in let final core::int* #t18 = 0 in let final self::A* #t19 = #t17.{self::G::[]}(#t18){(core::int*) →* self::A*} in let final void #t20 = #t17.{self::G::[]=}(#t18, #t19.{self::A::+}(1){(core::int*) →* self::C*}){(core::int*, self::B*) →* void} in #t19;
+static method test3(self::G g) → void {
+  let final self::G #t15 = g in let final core::int #t16 = 0 in #t15.{self::G::[]=}(#t16, #t15.{self::G::[]}(#t16){(core::int) → self::A}.{self::A::+}(1){(core::int) → self::C}){(core::int, self::B) → void};
+  self::A x = let final self::G #t17 = g in let final core::int #t18 = 0 in let final self::A #t19 = #t17.{self::G::[]}(#t18){(core::int) → self::A} in let final void #t20 = #t17.{self::G::[]=}(#t18, #t19.{self::A::+}(1){(core::int) → self::C}){(core::int, self::B) → void} in #t19;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.modular.expect
index cf8fb9e..0afadfc 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.modular.expect
@@ -1,125 +1,65 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::C*
-    return null;
-  operator *(self::D* value) → self::C*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::C
+    return throw "";
+  operator *(self::D value) → self::C
+    return throw "";
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::E*
-    return null;
-  operator *(self::F* value) → self::E*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::E
+    return throw "";
+  operator *(self::F value) → self::E
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends core::Object {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  operator [](core::int* i) → self::A*
-    return null;
-  operator []=(core::int* i, self::B* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int i) → self::A
+    return throw "";
+  operator []=(core::int i, self::B value) → void {}
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method test1(self::G* g) → void {
-  let final self::G* #t1 = g in let final core::int* #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2){(core::int*) →* self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*}){(core::int*, self::B*) →* void};
-  self::C* x = let final self::G* #t3 = g in let final core::int* #t4 = 0 in let final self::C* #t5 = #t3.{self::G::[]}(#t4){(core::int*) →* self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*} in let final void #t6 = #t3.{self::G::[]=}(#t4, #t5){(core::int*, self::B*) →* void} in #t5;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test1(self::G g) → void {
+  let final self::G #t1 = g in let final core::int #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2){(core::int) → self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C}){(core::int, self::B) → void};
+  self::C x = let final self::G #t3 = g in let final core::int #t4 = 0 in let final self::C #t5 = #t3.{self::G::[]}(#t4){(core::int) → self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C} in let final void #t6 = #t3.{self::G::[]=}(#t4, #t5){(core::int, self::B) → void} in #t5;
 }
-static method test2(self::G* g) → void {
-  let final self::G* #t7 = g in let final core::int* #t8 = 0 in let final self::C* #t9 = #t7.{self::G::[]}(#t8){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*} in let final void #t10 = #t7.{self::G::[]=}(#t8, #t9){(core::int*, self::B*) →* void} in #t9;
-  self::C* x = let final self::G* #t11 = g in let final core::int* #t12 = 0 in let final self::C* #t13 = #t11.{self::G::[]}(#t12){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*} in let final void #t14 = #t11.{self::G::[]=}(#t12, #t13){(core::int*, self::B*) →* void} in #t13;
+static method test2(self::G g) → void {
+  let final self::G #t7 = g in let final core::int #t8 = 0 in let final self::C #t9 = #t7.{self::G::[]}(#t8){(core::int) → self::A}.{self::A::+}(1){(core::int) → self::C} in let final void #t10 = #t7.{self::G::[]=}(#t8, #t9){(core::int, self::B) → void} in #t9;
+  self::C x = let final self::G #t11 = g in let final core::int #t12 = 0 in let final self::C #t13 = #t11.{self::G::[]}(#t12){(core::int) → self::A}.{self::A::+}(1){(core::int) → self::C} in let final void #t14 = #t11.{self::G::[]=}(#t12, #t13){(core::int, self::B) → void} in #t13;
 }
-static method test3(self::G* g) → void {
-  let final self::G* #t15 = g in let final core::int* #t16 = 0 in #t15.{self::G::[]=}(#t16, #t15.{self::G::[]}(#t16){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*}){(core::int*, self::B*) →* void};
-  self::A* x = let final self::G* #t17 = g in let final core::int* #t18 = 0 in let final self::A* #t19 = #t17.{self::G::[]}(#t18){(core::int*) →* self::A*} in let final void #t20 = #t17.{self::G::[]=}(#t18, #t19.{self::A::+}(1){(core::int*) →* self::C*}){(core::int*, self::B*) →* void} in #t19;
+static method test3(self::G g) → void {
+  let final self::G #t15 = g in let final core::int #t16 = 0 in #t15.{self::G::[]=}(#t16, #t15.{self::G::[]}(#t16){(core::int) → self::A}.{self::A::+}(1){(core::int) → self::C}){(core::int, self::B) → void};
+  self::A x = let final self::G #t17 = g in let final core::int #t18 = 0 in let final self::A #t19 = #t17.{self::G::[]}(#t18){(core::int) → self::A} in let final void #t20 = #t17.{self::G::[]=}(#t18, #t19.{self::A::+}(1){(core::int) → self::C}){(core::int, self::B) → void} in #t19;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.outline.expect
index 271d480..4fa91fb 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.outline.expect
@@ -1,114 +1,54 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  operator +(core::int* value) → self::C*
+  operator +(core::int value) → self::C
     ;
-  operator *(self::D* value) → self::C*
+  operator *(self::D value) → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator +(core::int* value) → self::E*
+  operator +(core::int value) → self::E
     ;
-  operator *(self::F* value) → self::E*
+  operator *(self::F value) → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends core::Object {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     ;
-  operator [](core::int* i) → self::A*
+  operator [](core::int i) → self::A
     ;
-  operator []=(core::int* i, self::B* value) → void
+  operator []=(core::int i, self::B value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
-static method test1(self::G* g) → void
+static method test1(self::G g) → void
   ;
-static method test2(self::G* g) → void
+static method test2(self::G g) → void
   ;
-static method test3(self::G* g) → void
+static method test3(self::G g) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.transformed.expect
index a14cd5c..4a05121 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.transformed.expect
@@ -1,126 +1,66 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::C*
-    return null;
-  operator *(self::D* value) → self::C*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::C
+    return throw "";
+  operator *(self::D value) → self::C
+    return throw "";
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::E*
-    return null;
-  operator *(self::F* value) → self::E*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::E
+    return throw "";
+  operator *(self::F value) → self::E
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends core::Object {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  operator [](core::int* i) → self::A*
-    return null;
-  operator []=(core::int* i, self::B* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int i) → self::A
+    return throw "";
+  operator []=(core::int i, self::B value) → void {}
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method test1(self::G* g) → void {
-  let final self::G* #t1 = g in let final core::int* #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2){(core::int*) →* self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*}){(core::int*, self::B*) →* void};
-  self::C* x = let final self::G* #t3 = g in let final core::int* #t4 = 0 in let final self::C* #t5 = #t3.{self::G::[]}(#t4){(core::int*) →* self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*} in let final void #t6 = #t3.{self::G::[]=}(#t4, #t5){(core::int*, self::B*) →* void} in #t5;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test1(self::G g) → void {
+  let final self::G #t1 = g in let final core::int #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2){(core::int) → self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C}){(core::int, self::B) → void};
+  self::C x = let final self::G #t3 = g in let final core::int #t4 = 0 in let final self::C #t5 = #t3.{self::G::[]}(#t4){(core::int) → self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C} in let final void #t6 = #t3.{self::G::[]=}(#t4, #t5){(core::int, self::B) → void} in #t5;
 }
-static method test2(self::G* g) → void {
-  let final self::G* #t7 = g in let final core::int* #t8 = 0 in let final self::C* #t9 = #t7.{self::G::[]}(#t8){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*} in let final void #t10 = #t7.{self::G::[]=}(#t8, #t9){(core::int*, self::B*) →* void} in #t9;
-  self::C* x = let final self::G* #t11 = g in let final core::int* #t12 = 0 in let final self::C* #t13 = #t11.{self::G::[]}(#t12){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*} in let final void #t14 = #t11.{self::G::[]=}(#t12, #t13){(core::int*, self::B*) →* void} in #t13;
+static method test2(self::G g) → void {
+  let final self::G #t7 = g in let final core::int #t8 = 0 in let final self::C #t9 = #t7.{self::G::[]}(#t8){(core::int) → self::A}.{self::A::+}(1){(core::int) → self::C} in let final void #t10 = #t7.{self::G::[]=}(#t8, #t9){(core::int, self::B) → void} in #t9;
+  self::C x = let final self::G #t11 = g in let final core::int #t12 = 0 in let final self::C #t13 = #t11.{self::G::[]}(#t12){(core::int) → self::A}.{self::A::+}(1){(core::int) → self::C} in let final void #t14 = #t11.{self::G::[]=}(#t12, #t13){(core::int, self::B) → void} in #t13;
 }
-static method test3(self::G* g) → void {
-  let final self::G* #t15 = g in let final core::int* #t16 = 0 in #t15.{self::G::[]=}(#t16, #t15.{self::G::[]}(#t16){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*}){(core::int*, self::B*) →* void};
-  self::A* x = let final self::G* #t17 = g in let final core::int* #t18 = 0 in let final self::A* #t19 = #t17.{self::G::[]}(#t18){(core::int*) →* self::A*} in let final void #t20 = #t17.{self::G::[]=}(#t18, #t19.{self::A::+}(1){(core::int*) →* self::C*}){(core::int*, self::B*) →* void} in #t19;
+static method test3(self::G g) → void {
+  let final self::G #t15 = g in let final core::int #t16 = 0 in #t15.{self::G::[]=}(#t16, #t15.{self::G::[]}(#t16){(core::int) → self::A}.{self::A::+}(1){(core::int) → self::C}){(core::int, self::B) → void};
+  self::A x = let final self::G #t17 = g in let final core::int #t18 = 0 in let final self::A #t19 = #t17.{self::G::[]}(#t18){(core::int) → self::A} in let final void #t20 = #t17.{self::G::[]=}(#t18, #t19.{self::A::+}(1){(core::int) → self::C}){(core::int, self::B) → void} in #t19;
 }
 static method main() → dynamic {}
 
@@ -128,8 +68,8 @@
 Extra constant evaluation status:
 Evaluated: VariableGet @ org-dartlang-testcase:///indexed_assign_combiner.dart:36:7 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///indexed_assign_combiner.dart:36:7 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///indexed_assign_combiner.dart:37:64 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///indexed_assign_combiner.dart:37:64 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///indexed_assign_combiner.dart:37:61 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///indexed_assign_combiner.dart:37:61 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///indexed_assign_combiner.dart:43:59 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///indexed_assign_combiner.dart:43:59 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///indexed_assign_combiner.dart:45:7 -> IntConstant(0)
@@ -138,4 +78,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///indexed_assign_combiner.dart:49:41 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///indexed_assign_combiner.dart:51:45 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///indexed_assign_combiner.dart:51:45 -> IntConstant(0)
-Extra constant evaluation: evaluated: 78, effectively constant: 12
+Extra constant evaluation: evaluated: 84, effectively constant: 12
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart
index ff8a546..137beef 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart
@@ -1,75 +1,55 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
-  B operator -(int i) => null;
-  B operator *(B v) => null;
-  C operator &(A v) => null;
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
 }
 
 class C extends B {}
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class Test {
-  B member;
+  B member = throw '';
+  B? member2;
 
   void test() {
-    /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
+    /*@target=Test.member*/member = /*@typeArgs=B*/f();
 
-    /*@target=Test.member*/ /*@target=Test.member*/ member
-         ??= /*@ typeArgs=B* */ f();
+    /*@target=Test.member2*//*@target=Test.member2*/member2 ??= /*@typeArgs=B?*/ f();
 
-    /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    /*@target=Test.member*//*@target=Test.member*/member /*@target=B.+*/+= /*@typeArgs=C*/f();
 
-    /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    /*@target=Test.member*//*@target=Test.member*/member /*@target=B.**/*= /*@typeArgs=B*/f();
 
-    /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    /*@target=Test.member*//*@target=Test.member*/member /*@target=B.&*/&= /*@typeArgs=A*/f();
 
-    /*@target=B.-*/ --
-        /*@target=Test.member*/ /*@target=Test.member*/ member;
+    /*@target=B.-*/--/*@target=Test.member*//*@target=Test.member*/member;
 
-    /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.-*/ --;
+    /*@target=Test.member*//*@target=Test.member*/member/*@target=B.-*/--;
 
-    var /*@ type=B* */ v1 = /*@target=Test.member*/ member =
-        /*@ typeArgs=B* */ f();
+    var /*@type=B*/ v1 = /*@target=Test.member*/member = /*@typeArgs=B*/f();
 
-    var /*@ type=B* */ v2 = /*@target=Test.member*/ /*@target=Test.member*/
-        member
-             ??= /*@ typeArgs=B* */ f();
+    var /*@type=B?*/ v2 = /*@target=Test.member2*//*@target=Test.member2*/member2 ??= /*@typeArgs=B?*/ f();
 
-    var /*@ type=A* */ v3 =
-        /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.+*/ +=
-            /*@ typeArgs=C* */ f();
+    var /*@type=B*/ v3 = /*@target=Test.member*//*@target=Test.member*/member /*@target=B.+*/+= /*@typeArgs=C*/f();
 
-    var /*@ type=B* */ v4 =
-        /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.**/ *=
-            /*@ typeArgs=B* */ f();
+    var /*@type=B*/ v4 = /*@target=Test.member*//*@target=Test.member*/member /*@target=B.**/*= /*@typeArgs=B*/f();
 
-    var /*@ type=C* */ v5 =
-        /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.&*/ &=
-            /*@ typeArgs=A* */ f();
+    var /*@type=C*/ v5 = /*@target=Test.member*//*@target=Test.member*/member /*@target=B.&*/&= /*@typeArgs=A*/f();
 
-    var /*@ type=B* */ v6 = /*@target=B.-*/ --
-        /*@target=Test.member*/ /*@target=Test.member*/ member;
+    var /*@type=B*/ v6 = /*@target=B.-*/--/*@target=Test.member*//*@target=Test.member*/member;
 
-    var /*@ type=B* */ v7 =
-        /*@ type=B* */ /*@target=Test.member*/ /*@target=Test.member*/
-        /*@ type=B* */ member /*@target=B.-*/ --;
+    var /*@type=B*/ v7 = /*@target=Test.member*//*@type=B*//*@target=Test.member*//*@type=B*/member/*@target=B.-*/--;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.textual_outline.expect
index fc944b3..8639b2e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.textual_outline.expect
@@ -1,21 +1,21 @@
-// @dart = 2.9
 library test;
 
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
-  B operator -(int i) => null;
-  B operator *(B v) => null;
-  C operator &(A v) => null;
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
 }
 
 class C extends B {}
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class Test {
-  B member;
+  B member = throw '';
+  B? member2;
   void test() {}
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.textual_outline_modelled.expect
index cb5ae88..cc4a77b 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.textual_outline_modelled.expect
@@ -1,21 +1,21 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
-  B operator *(B v) => null;
-  B operator -(int i) => null;
-  C operator &(A v) => null;
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
 }
 
 class C extends B {}
 
 class Test {
-  B member;
+  B? member2;
+  B member = throw '';
   void test() {}
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.expect
index 43a39ef..83d51f2 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.expect
@@ -1,72 +1,53 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
-    return null;
-  operator -(core::int* i) → self::B*
-    return null;
-  operator *(self::B* v) → self::B*
-    return null;
-  operator &(self::A* v) → self::C*
-    return null;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  field self::B* member = null;
-  synthetic constructor •() → self::Test*
+  field self::B member = throw "";
+  field self::B? member2 = null;
+  synthetic constructor •() → self::Test
     : super core::Object::•()
     ;
   method test() → void {
-    this.{self::Test::member} = self::f<self::B*>();
-    this.{self::Test::member}{self::B*} == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    self::B* v1 = this.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = this.{self::Test::member}{self::B*} in #t1 == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
-    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
-    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
-    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    self::B* v7 = let final self::B* #t2 = this.{self::Test::member}{self::B*} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+    this.{self::Test::member} = self::f<self::B>();
+    this.{self::Test::member2}{self::B?} == null ?{self::B?} this.{self::Test::member2} = self::f<self::B?>() : null;
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = this.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::B? #t1 = this.{self::Test::member2}{self::B?} in #t1 == null ?{self::B?} this.{self::Test::member2} = self::f<self::B?>() : #t1{self::B};
+    self::B v3 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::B #t2 = this.{self::Test::member}{self::B} in let final self::B #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.modular.expect
index 43a39ef..83d51f2 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.modular.expect
@@ -1,72 +1,53 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
-    return null;
-  operator -(core::int* i) → self::B*
-    return null;
-  operator *(self::B* v) → self::B*
-    return null;
-  operator &(self::A* v) → self::C*
-    return null;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  field self::B* member = null;
-  synthetic constructor •() → self::Test*
+  field self::B member = throw "";
+  field self::B? member2 = null;
+  synthetic constructor •() → self::Test
     : super core::Object::•()
     ;
   method test() → void {
-    this.{self::Test::member} = self::f<self::B*>();
-    this.{self::Test::member}{self::B*} == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    self::B* v1 = this.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = this.{self::Test::member}{self::B*} in #t1 == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
-    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
-    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
-    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    self::B* v7 = let final self::B* #t2 = this.{self::Test::member}{self::B*} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+    this.{self::Test::member} = self::f<self::B>();
+    this.{self::Test::member2}{self::B?} == null ?{self::B?} this.{self::Test::member2} = self::f<self::B?>() : null;
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = this.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::B? #t1 = this.{self::Test::member2}{self::B?} in #t1 == null ?{self::B?} this.{self::Test::member2} = self::f<self::B?>() : #t1{self::B};
+    self::B v3 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::B #t2 = this.{self::Test::member}{self::B} in let final self::B #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.outline.expect
index 30989d3..7ad1065 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.outline.expect
@@ -1,55 +1,36 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator +(self::C* v) → self::A*
+  operator +(self::C v) → self::B
     ;
-  operator -(core::int* i) → self::B*
+  operator -(core::int i) → self::B
     ;
-  operator *(self::B* v) → self::B*
+  operator *(self::B v) → self::B
     ;
-  operator &(self::A* v) → self::C*
+  operator &(self::A v) → self::C
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 class Test extends core::Object {
-  field self::B* member;
-  synthetic constructor •() → self::Test*
+  field self::B member;
+  field self::B? member2;
+  synthetic constructor •() → self::Test
     ;
   method test() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.transformed.expect
index 43a39ef..83d51f2 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.transformed.expect
@@ -1,72 +1,53 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
-    return null;
-  operator -(core::int* i) → self::B*
-    return null;
-  operator *(self::B* v) → self::B*
-    return null;
-  operator &(self::A* v) → self::C*
-    return null;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  field self::B* member = null;
-  synthetic constructor •() → self::Test*
+  field self::B member = throw "";
+  field self::B? member2 = null;
+  synthetic constructor •() → self::Test
     : super core::Object::•()
     ;
   method test() → void {
-    this.{self::Test::member} = self::f<self::B*>();
-    this.{self::Test::member}{self::B*} == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    self::B* v1 = this.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = this.{self::Test::member}{self::B*} in #t1 == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
-    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
-    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
-    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
-    self::B* v7 = let final self::B* #t2 = this.{self::Test::member}{self::B*} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+    this.{self::Test::member} = self::f<self::B>();
+    this.{self::Test::member2}{self::B?} == null ?{self::B?} this.{self::Test::member2} = self::f<self::B?>() : null;
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = this.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::B? #t1 = this.{self::Test::member2}{self::B?} in #t1 == null ?{self::B?} this.{self::Test::member2} = self::f<self::B?>() : #t1{self::B};
+    self::B v3 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = this.{self::Test::member} = this.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::B #t2 = this.{self::Test::member}{self::B} in let final self::B #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart
index 422d372..95755be 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -13,28 +15,28 @@
   int t;
 
   void test() {
-    var /*@ type=int* */ v1 = /*@target=Test1.t*/ t = getInt();
+    var /*@type=int**/ v1 = /*@target=Test1.t*/ t = getInt();
 
-    var /*@ type=num* */ v2 = /*@target=Test1.t*/ t = getNum();
+    var /*@type=num**/ v2 = /*@target=Test1.t*/ t = getNum();
 
-    var /*@ type=int* */ v4 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
+    var /*@type=int**/ v4 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
          ??= getInt();
 
-    var /*@ type=num* */ v5 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
+    var /*@type=num**/ v5 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
          ??= getNum();
 
-    var /*@ type=int* */ v7 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
+    var /*@type=int**/ v7 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
+    var /*@type=num**/ v8 = /*@target=Test1.t*/ /*@target=Test1.t*/ t
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++
         /*@target=Test1.t*/ /*@target=Test1.t*/ t;
 
-    var /*@ type=int* */ v11 =
-        /*@ type=int* */ /*@target=Test1.t*/ /*@target=Test1.t*/
-        /*@ type=int* */ t /*@target=num.+*/ ++;
+    var /*@type=int**/ v11 =
+        /*@type=int**/ /*@target=Test1.t*/ /*@target=Test1.t*/
+        /*@type=int**/ t /*@target=num.+*/ ++;
   }
 }
 
@@ -42,36 +44,36 @@
   num t;
 
   void test() {
-    var /*@ type=int* */ v1 = /*@target=Test2.t*/ t = getInt();
+    var /*@type=int**/ v1 = /*@target=Test2.t*/ t = getInt();
 
-    var /*@ type=num* */ v2 = /*@target=Test2.t*/ t = getNum();
+    var /*@type=num**/ v2 = /*@target=Test2.t*/ t = getNum();
 
-    var /*@ type=double* */ v3 = /*@target=Test2.t*/ t = getDouble();
+    var /*@type=double**/ v3 = /*@target=Test2.t*/ t = getDouble();
 
-    var /*@ type=num* */ v4 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
+    var /*@type=num**/ v4 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
          ??= getInt();
 
-    var /*@ type=num* */ v5 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
+    var /*@type=num**/ v5 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
          ??= getNum();
 
-    var /*@ type=num* */ v6 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
+    var /*@type=num**/ v6 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
          ??= getDouble();
 
-    var /*@ type=num* */ v7 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
+    var /*@type=num**/ v7 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
+    var /*@type=num**/ v8 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v9 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
+    var /*@type=num**/ v9 = /*@target=Test2.t*/ /*@target=Test2.t*/ t
         /*@target=num.+*/ += getDouble();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++
+    var /*@type=num**/ v10 = /*@target=num.+*/ ++
         /*@target=Test2.t*/ /*@target=Test2.t*/ t;
 
-    var /*@ type=num* */ v11 =
-        /*@ type=num* */ /*@target=Test2.t*/ /*@target=Test2.t*/
-        /*@ type=num* */ t /*@target=num.+*/ ++;
+    var /*@type=num**/ v11 =
+        /*@type=num**/ /*@target=Test2.t*/ /*@target=Test2.t*/
+        /*@type=num**/ t /*@target=num.+*/ ++;
   }
 }
 
@@ -79,31 +81,31 @@
   double t;
 
   void test3() {
-    var /*@ type=num* */ v2 = /*@target=Test3.t*/ t = getNum();
+    var /*@type=num**/ v2 = /*@target=Test3.t*/ t = getNum();
 
-    var /*@ type=double* */ v3 = /*@target=Test3.t*/ t = getDouble();
+    var /*@type=double**/ v3 = /*@target=Test3.t*/ t = getDouble();
 
-    var /*@ type=num* */ v5 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
+    var /*@type=num**/ v5 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
          ??= getNum();
 
-    var /*@ type=double* */ v6 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
+    var /*@type=double**/ v6 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
          ??= getDouble();
 
-    var /*@ type=double* */ v7 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
+    var /*@type=double**/ v7 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
         /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
+    var /*@type=double**/ v8 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
         /*@target=double.+*/ += getNum();
 
-    var /*@ type=double* */ v9 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
+    var /*@type=double**/ v9 = /*@target=Test3.t*/ /*@target=Test3.t*/ t
         /*@target=double.+*/ += getDouble();
 
-    var /*@ type=double* */ v10 =
+    var /*@type=double**/ v10 =
         /*@target=double.+*/ ++ /*@target=Test3.t*/ /*@target=Test3.t*/ t;
 
-    var /*@ type=double* */ v11 =
-        /*@ type=double* */ /*@target=Test3.t*/ /*@target=Test3.t*/
-        /*@ type=double* */ t /*@target=double.+*/ ++;
+    var /*@type=double**/ v11 =
+        /*@type=double**/ /*@target=Test3.t*/ /*@target=Test3.t*/
+        /*@type=double**/ t /*@target=double.+*/ ++;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart
new file mode 100644
index 0000000..45f7362
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart
@@ -0,0 +1,92 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Test1 {
+  int t = 0;
+  int? t2;
+
+  void test() {
+    var /*@type=int*/ v1 = /*@target=Test1.t*/ t = getInt();
+
+    var /*@type=int*/ v4 = /*@target=Test1.t2*/ /*@target=Test1.t2*/ t2 ??=
+        getInt();
+
+    var /*@type=int*/ v7 = /*@target=Test1.t*/ /*@target=Test1.t*/ t /*@target=num.+*/ +=
+        getInt();
+
+    var /*@type=int*/ v10 = /*@target=num.+*/ ++ /*@target=Test1.t*/ /*@target=Test1.t*/ t;
+
+    var /*@type=int*/ v11 =
+        /*@type=int*/ /*@target=Test1.t*/ /*@target=Test1.t*/
+        /*@type=int*/ t /*@target=num.+*/ ++;
+  }
+}
+
+class Test2 {
+  num t = 0;
+  num? t2;
+
+  void test() {
+    var /*@type=int*/ v1 = /*@target=Test2.t*/ t = getInt();
+
+    var /*@type=num*/ v2 = /*@target=Test2.t*/ t = getNum();
+
+    var /*@type=double*/ v3 = /*@target=Test2.t*/ t = getDouble();
+
+    var /*@type=num*/ v4 = /*@target=Test2.t2*/ /*@target=Test2.t2*/ t2 ??=
+        getInt();
+
+    var /*@type=num*/ v5 = /*@target=Test2.t2*/ /*@target=Test2.t2*/ t2 ??=
+        getNum();
+
+    var /*@type=num*/ v6 = /*@target=Test2.t2*/ /*@target=Test2.t2*/ t2 ??=
+        getDouble();
+
+    var /*@type=num*/ v7 = /*@target=Test2.t*/ /*@target=Test2.t*/ t /*@target=num.+*/ +=
+        getInt();
+
+    var /*@type=num*/ v8 = /*@target=Test2.t*/ /*@target=Test2.t*/ t /*@target=num.+*/ +=
+        getNum();
+
+    var /*@type=double*/ v9 = /*@target=Test2.t*/ /*@target=Test2.t*/ t /*@target=num.+*/ +=
+        getDouble();
+
+    var /*@type=num*/ v10 = /*@target=num.+*/ ++ /*@target=Test2.t*/ /*@target=Test2.t*/ t;
+
+    var /*@type=num*/ v11 =
+        /*@type=num*/ /*@target=Test2.t*/ /*@target=Test2.t*/
+        /*@type=num*/ t /*@target=num.+*/ ++;
+  }
+}
+
+class Test3 {
+  double t = 0;
+  double? t2;
+
+  void test3() {
+    var /*@type=double*/ v3 = /*@target=Test3.t*/ t = getDouble();
+
+    var /*@type=double*/ v6 = /*@target=Test3.t2*/ /*@target=Test3.t2*/ t2 ??=
+        getDouble();
+
+    var /*@type=double*/ v9 = /*@target=Test3.t*/ /*@target=Test3.t*/ t /*@target=double.+*/ +=
+        getDouble();
+
+    var /*@type=double*/ v10 =
+        /*@target=double.+*/ ++ /*@target=Test3.t*/ /*@target=Test3.t*/ t;
+
+    var /*@type=double*/ v11 =
+        /*@type=double*/ /*@target=Test3.t*/ /*@target=Test3.t*/
+        /*@type=double*/ t /*@target=double.+*/ ++;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.textual_outline.expect
new file mode 100644
index 0000000..ac0a0e1
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.textual_outline.expect
@@ -0,0 +1,25 @@
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Test1 {
+  int t = 0;
+  int? t2;
+  void test() {}
+}
+
+class Test2 {
+  num t = 0;
+  num? t2;
+  void test() {}
+}
+
+class Test3 {
+  double t = 0;
+  double? t2;
+  void test3() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b8a3a2c
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.textual_outline_modelled.expect
@@ -0,0 +1,24 @@
+library test;
+
+class Test1 {
+  int? t2;
+  int t = 0;
+  void test() {}
+}
+
+class Test2 {
+  num? t2;
+  num t = 0;
+  void test() {}
+}
+
+class Test3 {
+  double? t2;
+  double t = 0;
+  void test3() {}
+}
+
+double getDouble() => 0.0;
+int getInt() => 0;
+main() {}
+num getNum() => 0;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.weak.expect
new file mode 100644
index 0000000..2e65b61
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.weak.expect
@@ -0,0 +1,59 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int t = 0;
+  field core::int? t2 = null;
+  synthetic constructor •() → self::Test1
+    : super core::Object::•()
+    ;
+  method test() → void {
+    core::int v1 = this.{self::Test1::t} = self::getInt();
+    core::int v4 = let final core::int? #t1 = this.{self::Test1::t2}{core::int?} in #t1 == null ?{core::int} this.{self::Test1::t2} = self::getInt() : #t1{core::int};
+    core::int v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final core::int #t2 = this.{self::Test1::t}{core::int} in let final core::int #t3 = this.{self::Test1::t} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+  }
+}
+class Test2 extends core::Object {
+  field core::num t = 0;
+  field core::num? t2 = null;
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  method test() → void {
+    core::int v1 = this.{self::Test2::t} = self::getInt();
+    core::num v2 = this.{self::Test2::t} = self::getNum();
+    core::double v3 = this.{self::Test2::t} = self::getDouble();
+    core::num v4 = let final core::num? #t4 = this.{self::Test2::t2}{core::num?} in #t4 == null ?{core::num} this.{self::Test2::t2} = self::getInt() : #t4{core::num};
+    core::num v5 = let final core::num? #t5 = this.{self::Test2::t2}{core::num?} in #t5 == null ?{core::num} this.{self::Test2::t2} = self::getNum() : #t5{core::num};
+    core::num v6 = let final core::num? #t6 = this.{self::Test2::t2}{core::num?} in #t6 == null ?{core::num} this.{self::Test2::t2} = self::getDouble() : #t6{core::num};
+    core::num v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final core::num #t7 = this.{self::Test2::t}{core::num} in let final core::num #t8 = this.{self::Test2::t} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+  }
+}
+class Test3 extends core::Object {
+  field core::double t = 0.0;
+  field core::double? t2 = null;
+  synthetic constructor •() → self::Test3
+    : super core::Object::•()
+    ;
+  method test3() → void {
+    core::double v3 = this.{self::Test3::t} = self::getDouble();
+    core::double v6 = let final core::double? #t9 = this.{self::Test3::t2}{core::double?} in #t9 == null ?{core::double} this.{self::Test3::t2} = self::getDouble() : #t9{core::double};
+    core::double v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final core::double #t10 = this.{self::Test3::t}{core::double} in let final core::double #t11 = this.{self::Test3::t} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.weak.modular.expect
new file mode 100644
index 0000000..2e65b61
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int t = 0;
+  field core::int? t2 = null;
+  synthetic constructor •() → self::Test1
+    : super core::Object::•()
+    ;
+  method test() → void {
+    core::int v1 = this.{self::Test1::t} = self::getInt();
+    core::int v4 = let final core::int? #t1 = this.{self::Test1::t2}{core::int?} in #t1 == null ?{core::int} this.{self::Test1::t2} = self::getInt() : #t1{core::int};
+    core::int v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final core::int #t2 = this.{self::Test1::t}{core::int} in let final core::int #t3 = this.{self::Test1::t} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+  }
+}
+class Test2 extends core::Object {
+  field core::num t = 0;
+  field core::num? t2 = null;
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  method test() → void {
+    core::int v1 = this.{self::Test2::t} = self::getInt();
+    core::num v2 = this.{self::Test2::t} = self::getNum();
+    core::double v3 = this.{self::Test2::t} = self::getDouble();
+    core::num v4 = let final core::num? #t4 = this.{self::Test2::t2}{core::num?} in #t4 == null ?{core::num} this.{self::Test2::t2} = self::getInt() : #t4{core::num};
+    core::num v5 = let final core::num? #t5 = this.{self::Test2::t2}{core::num?} in #t5 == null ?{core::num} this.{self::Test2::t2} = self::getNum() : #t5{core::num};
+    core::num v6 = let final core::num? #t6 = this.{self::Test2::t2}{core::num?} in #t6 == null ?{core::num} this.{self::Test2::t2} = self::getDouble() : #t6{core::num};
+    core::num v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final core::num #t7 = this.{self::Test2::t}{core::num} in let final core::num #t8 = this.{self::Test2::t} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+  }
+}
+class Test3 extends core::Object {
+  field core::double t = 0.0;
+  field core::double? t2 = null;
+  synthetic constructor •() → self::Test3
+    : super core::Object::•()
+    ;
+  method test3() → void {
+    core::double v3 = this.{self::Test3::t} = self::getDouble();
+    core::double v6 = let final core::double? #t9 = this.{self::Test3::t2}{core::double?} in #t9 == null ?{core::double} this.{self::Test3::t2} = self::getDouble() : #t9{core::double};
+    core::double v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final core::double #t10 = this.{self::Test3::t}{core::double} in let final core::double #t11 = this.{self::Test3::t} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.weak.outline.expect
new file mode 100644
index 0000000..4f9be01
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int t;
+  field core::int? t2;
+  synthetic constructor •() → self::Test1
+    ;
+  method test() → void
+    ;
+}
+class Test2 extends core::Object {
+  field core::num t;
+  field core::num? t2;
+  synthetic constructor •() → self::Test2
+    ;
+  method test() → void
+    ;
+}
+class Test3 extends core::Object {
+  field core::double t;
+  field core::double? t2;
+  synthetic constructor •() → self::Test3
+    ;
+  method test3() → void
+    ;
+}
+static method getInt() → core::int
+  ;
+static method getNum() → core::num
+  ;
+static method getDouble() → core::double
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.weak.transformed.expect
new file mode 100644
index 0000000..2e65b61
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards2.dart.weak.transformed.expect
@@ -0,0 +1,59 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int t = 0;
+  field core::int? t2 = null;
+  synthetic constructor •() → self::Test1
+    : super core::Object::•()
+    ;
+  method test() → void {
+    core::int v1 = this.{self::Test1::t} = self::getInt();
+    core::int v4 = let final core::int? #t1 = this.{self::Test1::t2}{core::int?} in #t1 == null ?{core::int} this.{self::Test1::t2} = self::getInt() : #t1{core::int};
+    core::int v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final core::int #t2 = this.{self::Test1::t}{core::int} in let final core::int #t3 = this.{self::Test1::t} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+  }
+}
+class Test2 extends core::Object {
+  field core::num t = 0;
+  field core::num? t2 = null;
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  method test() → void {
+    core::int v1 = this.{self::Test2::t} = self::getInt();
+    core::num v2 = this.{self::Test2::t} = self::getNum();
+    core::double v3 = this.{self::Test2::t} = self::getDouble();
+    core::num v4 = let final core::num? #t4 = this.{self::Test2::t2}{core::num?} in #t4 == null ?{core::num} this.{self::Test2::t2} = self::getInt() : #t4{core::num};
+    core::num v5 = let final core::num? #t5 = this.{self::Test2::t2}{core::num?} in #t5 == null ?{core::num} this.{self::Test2::t2} = self::getNum() : #t5{core::num};
+    core::num v6 = let final core::num? #t6 = this.{self::Test2::t2}{core::num?} in #t6 == null ?{core::num} this.{self::Test2::t2} = self::getDouble() : #t6{core::num};
+    core::num v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final core::num #t7 = this.{self::Test2::t}{core::num} in let final core::num #t8 = this.{self::Test2::t} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+  }
+}
+class Test3 extends core::Object {
+  field core::double t = 0.0;
+  field core::double? t2 = null;
+  synthetic constructor •() → self::Test3
+    : super core::Object::•()
+    ;
+  method test3() → void {
+    core::double v3 = this.{self::Test3::t} = self::getDouble();
+    core::double v6 = let final core::double? #t9 = this.{self::Test3::t2}{core::double?} in #t9 == null ?{core::double} this.{self::Test3::t2} = self::getDouble() : #t9{core::double};
+    core::double v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final core::double #t10 = this.{self::Test3::t}{core::double} in let final core::double #t11 = this.{self::Test3::t} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart
index 6eb85e4..4b7b3b6e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.textual_outline.expect
index f2992f2..c70181a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<double> a = <double>[];
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.textual_outline_modelled.expect
index e20e0c8..89115d7 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<double> a = <double>[];
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.expect
index f6ef830..408370f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::double*>* a = <core::double*>[];
-static field core::double* b = let final core::List<core::double*>* #t1 = self::a in let final core::int* #t2 = 0 in let final core::double* #t3 = 1.0 in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, core::double*) →* void} in #t3;
+static field core::List<core::double> a = <core::double>[];
+static field core::double b = let final core::List<core::double> #t1 = self::a in let final core::int #t2 = 0 in let final core::double #t3 = 1.0 in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int, core::double) → void} in #t3;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.modular.expect
index f6ef830..408370f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.modular.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::double*>* a = <core::double*>[];
-static field core::double* b = let final core::List<core::double*>* #t1 = self::a in let final core::int* #t2 = 0 in let final core::double* #t3 = 1.0 in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, core::double*) →* void} in #t3;
+static field core::List<core::double> a = <core::double>[];
+static field core::double b = let final core::List<core::double> #t1 = self::a in let final core::int #t2 = 0 in let final core::double #t3 = 1.0 in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int, core::double) → void} in #t3;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.outline.expect
index b3128a3..a0ee092 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::double*>* a;
-static field core::double* b;
+static field core::List<core::double> a;
+static field core::double b;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.transformed.expect
index d457863..cdaffdf 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::double*>* a = core::_GrowableList::•<core::double*>(0);
-static field core::double* b = let final core::List<core::double*>* #t1 = self::a in let final core::int* #t2 = 0 in let final core::double* #t3 = 1.0 in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, core::double*) →* void} in #t3;
+static field core::List<core::double> a = core::_GrowableList::•<core::double>(0);
+static field core::double b = let final core::List<core::double> #t1 = self::a in let final core::int #t2 = 0 in let final core::double #t3 = 1.0 in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int, core::double) → void} in #t3;
 static method main() → dynamic {}
 
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart
index 39a70e4..fe315b1 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,76 +10,79 @@
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
-  B operator -(int i) => null;
-  B operator *(B v) => null;
-  C operator &(A v) => null;
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
 }
 
 class C extends B {}
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class Test {
-  B operator [](Index i) => null;
+  B operator [](Index i) => throw '';
   void operator []=(Index i, B v) {}
 
   void test() {
-    Test t = /*@ typeArgs=Test* */ f();
+    Test t = /*@typeArgs=Test*/ f();
 
-    t /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
+    t /*@target=Test.[]=*/ [/*@typeArgs=Index*/ f()] = /*@typeArgs=B*/ f();
 
     t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-         ??= /*@ typeArgs=B* */ f();
-
-    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
-
-    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
-
-    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
-
-    t /*@target=Test.[]*/ [/*@ typeArgs=Index* */ f()];
-
-    /*@target=B.-*/ --t
-        /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()];
+        /*@typeArgs=Index*/ f()] /*@target=B.+*/ += /*@typeArgs=C*/ f();
 
     t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] /*@target=B.-*/ --;
+        /*@typeArgs=Index*/ f()] /*@target=B.**/ *= /*@typeArgs=B*/ f();
 
-    var /*@ type=B* */ v1 = t /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
+    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.&*/ &= /*@typeArgs=A*/ f();
 
-    var /*@ type=B* */ v2 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-         ??= /*@ typeArgs=B* */ f();
+    t /*@target=Test.[]*/ [/*@typeArgs=Index*/ f()];
 
-    var /*@ type=A* */ v3 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    /*@target=B.-*/ --t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()];
 
-    var /*@ type=B* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
 
-    var /*@ type=C* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    var /*@type=B*/ v1 =
+        t /*@target=Test.[]=*/ [/*@typeArgs=Index*/ f()] = /*@typeArgs=B*/ f();
 
-    var /*@ type=B* */ v6 = t /*@target=Test.[]*/ [/*@ typeArgs=Index* */ f()];
+    var /*@type=B*/ v3 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.+*/ += /*@typeArgs=C*/ f();
 
-    var /*@ type=B* */ v7 =
-        /*@target=B.-*/ --t
-            /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()];
+    var /*@type=B*/ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.**/ *= /*@typeArgs=B*/ f();
 
-    var /*@ type=B* */ v8 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] /*@target=B.-*/ --;
+    var /*@type=C*/ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    var /*@type=B*/ v6 = t /*@target=Test.[]*/ [/*@typeArgs=Index*/ f()];
+
+    var /*@type=B*/ v7 =
+        /*@target=B.-*/ --t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index*/ f()];
+
+    var /*@type=B*/ v8 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
+  }
+}
+
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+
+  void test() {
+    Test2 t = /*@typeArgs=Test2*/ f();
+
+    t /*@target=Test2.[]=*/ [/*@typeArgs=Index*/ f()] = /*@typeArgs=B?*/ f();
+
+    t /*@target=Test2.[]*/ /*@target=Test2.[]=*/ [
+        /*@typeArgs=Index*/ f()] ??= /*@typeArgs=B?*/ f();
+
+    var /*@type=B?*/ v2 = t /*@target=Test2.[]*/ /*@target=Test2.[]=*/ [
+        /*@typeArgs=Index*/ f()] ??= /*@typeArgs=B?*/ f();
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.textual_outline.expect
index 5ad8b13..52bbd2c 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class Index {}
@@ -6,20 +5,26 @@
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
-  B operator -(int i) => null;
-  B operator *(B v) => null;
-  C operator &(A v) => null;
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
 }
 
 class C extends B {}
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class Test {
-  B operator [](Index i) => null;
+  B operator [](Index i) => throw '';
   void operator []=(Index i, B v) {}
   void test() {}
 }
 
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+  void test() {}
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.textual_outline_modelled.expect
index d66beca..3c0c624 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.textual_outline_modelled.expect
@@ -1,15 +1,14 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {}
 
 class B extends A {
-  A operator +(C v) => null;
-  B operator *(B v) => null;
-  B operator -(int i) => null;
-  C operator &(A v) => null;
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
 }
 
 class C extends B {}
@@ -17,9 +16,15 @@
 class Index {}
 
 class Test {
-  B operator [](Index i) => null;
+  B operator [](Index i) => throw '';
   void operator []=(Index i, B v) {}
   void test() {}
 }
 
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+  void test() {}
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.expect
index 8b4ab90..592786d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.expect
@@ -1,92 +1,74 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Index extends core::Object {
-  synthetic constructor •() → self::Index*
+  synthetic constructor •() → self::Index
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
-    return null;
-  operator -(core::int* i) → self::B*
-    return null;
-  operator *(self::B* v) → self::B*
-    return null;
-  operator &(self::A* v) → self::C*
-    return null;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  synthetic constructor •() → self::Test*
+  synthetic constructor •() → self::Test
     : super core::Object::•()
     ;
-  operator [](self::Index* i) → self::B*
-    return null;
-  operator []=(self::Index* i, self::B* v) → void {}
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
   method test() → void {
-    self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
-    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
-    t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index*, self::B*) →* void} in #t11;
-    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
-    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
-    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20){(self::Index*) →* self::B*} in #t21 == null ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22){(self::Index*, self::B*) →* void} in #t22 : #t21;
-    self::A* v3 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::A* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
-    self::B* v4 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index*, self::B*) →* void} in #t30;
-    self::C* v5 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::C* #t34 = #t32.{self::Test::[]}(#t33){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index*, self::B*) →* void} in #t34;
-    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
-    self::B* v7 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38){(self::Index*, self::B*) →* void} in #t38;
-    self::B* v8 = let final self::Test* #t40 = t in let final self::Index* #t41 = self::f<self::Index*>() in let final self::B* #t42 = #t40.{self::Test::[]}(#t41){(self::Index*) →* self::B*} in let final void #t43 = #t40.{self::Test::[]=}(#t41, #t42.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t42;
+    self::Test t = self::f<self::Test>();
+    t.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
+    let final self::Test #t1 = t in let final self::Index #t2 = self::f<self::Index>() in #t1.{self::Test::[]=}(#t2, #t1.{self::Test::[]}(#t2){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
+    let final self::Test #t3 = t in let final self::Index #t4 = self::f<self::Index>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
+    let final self::Test #t5 = t in let final self::Index #t6 = self::f<self::Index>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
+    t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
+    let final self::Test #t7 = t in let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = #t7.{self::Test::[]}(#t8){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t10 = #t7.{self::Test::[]=}(#t8, #t9){(self::Index, self::B) → void} in #t9;
+    let final self::Test #t11 = t in let final self::Index #t12 = self::f<self::Index>() in #t11.{self::Test::[]=}(#t12, #t11.{self::Test::[]}(#t12){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
+    self::B v1 = let final self::Test #t13 = t in let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = self::f<self::B>() in let final void #t16 = #t13.{self::Test::[]=}(#t14, #t15){(self::Index, self::B) → void} in #t15;
+    self::B v3 = let final self::Test #t17 = t in let final self::Index #t18 = self::f<self::Index>() in let final self::B #t19 = #t17.{self::Test::[]}(#t18){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t20 = #t17.{self::Test::[]=}(#t18, #t19){(self::Index, self::B) → void} in #t19;
+    self::B v4 = let final self::Test #t21 = t in let final self::Index #t22 = self::f<self::Index>() in let final self::B #t23 = #t21.{self::Test::[]}(#t22){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t24 = #t21.{self::Test::[]=}(#t22, #t23){(self::Index, self::B) → void} in #t23;
+    self::C v5 = let final self::Test #t25 = t in let final self::Index #t26 = self::f<self::Index>() in let final self::C #t27 = #t25.{self::Test::[]}(#t26){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t28 = #t25.{self::Test::[]=}(#t26, #t27){(self::Index, self::B) → void} in #t27;
+    self::B v6 = t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
+    self::B v7 = let final self::Test #t29 = t in let final self::Index #t30 = self::f<self::Index>() in let final self::B #t31 = #t29.{self::Test::[]}(#t30){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t32 = #t29.{self::Test::[]=}(#t30, #t31){(self::Index, self::B) → void} in #t31;
+    self::B v8 = let final self::Test #t33 = t in let final self::Index #t34 = self::f<self::Index>() in let final self::B #t35 = #t33.{self::Test::[]}(#t34){(self::Index) → self::B} in let final void #t36 = #t33.{self::Test::[]=}(#t34, #t35.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t35;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+  method test() → void {
+    self::Test2 t = self::f<self::Test2>();
+    t.{self::Test2::[]=}(self::f<self::Index>(), self::f<self::B?>()){(self::Index, self::B?) → void};
+    let final self::Test2 #t37 = t in let final self::Index #t38 = self::f<self::Index>() in #t37.{self::Test2::[]}(#t38){(self::Index) → self::B?} == null ?{self::B?} #t37.{self::Test2::[]=}(#t38, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
+    self::B? v2 = let final self::Test2 #t39 = t in let final self::Index #t40 = self::f<self::Index>() in let final self::B? #t41 = #t39.{self::Test2::[]}(#t40){(self::Index) → self::B?} in #t41 == null ?{self::B?} let final self::B? #t42 = self::f<self::B?>() in let final void #t43 = #t39.{self::Test2::[]=}(#t40, #t42){(self::Index, self::B?) → void} in #t42 : #t41{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.modular.expect
index 8b4ab90..592786d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.modular.expect
@@ -1,92 +1,74 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Index extends core::Object {
-  synthetic constructor •() → self::Index*
+  synthetic constructor •() → self::Index
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
-    return null;
-  operator -(core::int* i) → self::B*
-    return null;
-  operator *(self::B* v) → self::B*
-    return null;
-  operator &(self::A* v) → self::C*
-    return null;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  synthetic constructor •() → self::Test*
+  synthetic constructor •() → self::Test
     : super core::Object::•()
     ;
-  operator [](self::Index* i) → self::B*
-    return null;
-  operator []=(self::Index* i, self::B* v) → void {}
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
   method test() → void {
-    self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
-    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
-    t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index*, self::B*) →* void} in #t11;
-    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
-    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
-    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20){(self::Index*) →* self::B*} in #t21 == null ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22){(self::Index*, self::B*) →* void} in #t22 : #t21;
-    self::A* v3 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::A* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
-    self::B* v4 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index*, self::B*) →* void} in #t30;
-    self::C* v5 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::C* #t34 = #t32.{self::Test::[]}(#t33){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index*, self::B*) →* void} in #t34;
-    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
-    self::B* v7 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38){(self::Index*, self::B*) →* void} in #t38;
-    self::B* v8 = let final self::Test* #t40 = t in let final self::Index* #t41 = self::f<self::Index*>() in let final self::B* #t42 = #t40.{self::Test::[]}(#t41){(self::Index*) →* self::B*} in let final void #t43 = #t40.{self::Test::[]=}(#t41, #t42.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t42;
+    self::Test t = self::f<self::Test>();
+    t.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
+    let final self::Test #t1 = t in let final self::Index #t2 = self::f<self::Index>() in #t1.{self::Test::[]=}(#t2, #t1.{self::Test::[]}(#t2){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
+    let final self::Test #t3 = t in let final self::Index #t4 = self::f<self::Index>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
+    let final self::Test #t5 = t in let final self::Index #t6 = self::f<self::Index>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
+    t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
+    let final self::Test #t7 = t in let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = #t7.{self::Test::[]}(#t8){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t10 = #t7.{self::Test::[]=}(#t8, #t9){(self::Index, self::B) → void} in #t9;
+    let final self::Test #t11 = t in let final self::Index #t12 = self::f<self::Index>() in #t11.{self::Test::[]=}(#t12, #t11.{self::Test::[]}(#t12){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
+    self::B v1 = let final self::Test #t13 = t in let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = self::f<self::B>() in let final void #t16 = #t13.{self::Test::[]=}(#t14, #t15){(self::Index, self::B) → void} in #t15;
+    self::B v3 = let final self::Test #t17 = t in let final self::Index #t18 = self::f<self::Index>() in let final self::B #t19 = #t17.{self::Test::[]}(#t18){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t20 = #t17.{self::Test::[]=}(#t18, #t19){(self::Index, self::B) → void} in #t19;
+    self::B v4 = let final self::Test #t21 = t in let final self::Index #t22 = self::f<self::Index>() in let final self::B #t23 = #t21.{self::Test::[]}(#t22){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t24 = #t21.{self::Test::[]=}(#t22, #t23){(self::Index, self::B) → void} in #t23;
+    self::C v5 = let final self::Test #t25 = t in let final self::Index #t26 = self::f<self::Index>() in let final self::C #t27 = #t25.{self::Test::[]}(#t26){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t28 = #t25.{self::Test::[]=}(#t26, #t27){(self::Index, self::B) → void} in #t27;
+    self::B v6 = t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
+    self::B v7 = let final self::Test #t29 = t in let final self::Index #t30 = self::f<self::Index>() in let final self::B #t31 = #t29.{self::Test::[]}(#t30){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t32 = #t29.{self::Test::[]=}(#t30, #t31){(self::Index, self::B) → void} in #t31;
+    self::B v8 = let final self::Test #t33 = t in let final self::Index #t34 = self::f<self::Index>() in let final self::B #t35 = #t33.{self::Test::[]}(#t34){(self::Index) → self::B} in let final void #t36 = #t33.{self::Test::[]=}(#t34, #t35.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t35;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+  method test() → void {
+    self::Test2 t = self::f<self::Test2>();
+    t.{self::Test2::[]=}(self::f<self::Index>(), self::f<self::B?>()){(self::Index, self::B?) → void};
+    let final self::Test2 #t37 = t in let final self::Index #t38 = self::f<self::Index>() in #t37.{self::Test2::[]}(#t38){(self::Index) → self::B?} == null ?{self::B?} #t37.{self::Test2::[]=}(#t38, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
+    self::B? v2 = let final self::Test2 #t39 = t in let final self::Index #t40 = self::f<self::Index>() in let final self::B? #t41 = #t39.{self::Test2::[]}(#t40){(self::Index) → self::B?} in #t41 == null ?{self::B?} let final self::B? #t42 = self::f<self::B?>() in let final void #t43 = #t39.{self::Test2::[]=}(#t40, #t42){(self::Index, self::B?) → void} in #t42 : #t41{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.outline.expect
index 01bd466..03e4c14 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.outline.expect
@@ -1,72 +1,52 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Index extends core::Object {
-  synthetic constructor •() → self::Index*
+  synthetic constructor •() → self::Index
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator +(self::C* v) → self::A*
+  operator +(self::C v) → self::B
     ;
-  operator -(core::int* i) → self::B*
+  operator -(core::int i) → self::B
     ;
-  operator *(self::B* v) → self::B*
+  operator *(self::B v) → self::B
     ;
-  operator &(self::A* v) → self::C*
+  operator &(self::A v) → self::C
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 class Test extends core::Object {
-  synthetic constructor •() → self::Test*
+  synthetic constructor •() → self::Test
     ;
-  operator [](self::Index* i) → self::B*
+  operator [](self::Index i) → self::B
     ;
-  operator []=(self::Index* i, self::B* v) → void
+  operator []=(self::Index i, self::B v) → void
     ;
   method test() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    ;
+  operator [](self::Index i) → self::B?
+    ;
+  operator []=(self::Index i, self::B? v) → void
+    ;
+  method test() → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.transformed.expect
index 8b4ab90..592786d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.transformed.expect
@@ -1,92 +1,74 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Index extends core::Object {
-  synthetic constructor •() → self::Index*
+  synthetic constructor •() → self::Index
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::C* v) → self::A*
-    return null;
-  operator -(core::int* i) → self::B*
-    return null;
-  operator *(self::B* v) → self::B*
-    return null;
-  operator &(self::A* v) → self::C*
-    return null;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  synthetic constructor •() → self::Test*
+  synthetic constructor •() → self::Test
     : super core::Object::•()
     ;
-  operator [](self::Index* i) → self::B*
-    return null;
-  operator []=(self::Index* i, self::B* v) → void {}
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
   method test() → void {
-    self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
-    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
-    t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index*, self::B*) →* void} in #t11;
-    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
-    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
-    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20){(self::Index*) →* self::B*} in #t21 == null ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22){(self::Index*, self::B*) →* void} in #t22 : #t21;
-    self::A* v3 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::A* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
-    self::B* v4 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index*, self::B*) →* void} in #t30;
-    self::C* v5 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::C* #t34 = #t32.{self::Test::[]}(#t33){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index*, self::B*) →* void} in #t34;
-    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
-    self::B* v7 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38){(self::Index*, self::B*) →* void} in #t38;
-    self::B* v8 = let final self::Test* #t40 = t in let final self::Index* #t41 = self::f<self::Index*>() in let final self::B* #t42 = #t40.{self::Test::[]}(#t41){(self::Index*) →* self::B*} in let final void #t43 = #t40.{self::Test::[]=}(#t41, #t42.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t42;
+    self::Test t = self::f<self::Test>();
+    t.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
+    let final self::Test #t1 = t in let final self::Index #t2 = self::f<self::Index>() in #t1.{self::Test::[]=}(#t2, #t1.{self::Test::[]}(#t2){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
+    let final self::Test #t3 = t in let final self::Index #t4 = self::f<self::Index>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
+    let final self::Test #t5 = t in let final self::Index #t6 = self::f<self::Index>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
+    t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
+    let final self::Test #t7 = t in let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = #t7.{self::Test::[]}(#t8){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t10 = #t7.{self::Test::[]=}(#t8, #t9){(self::Index, self::B) → void} in #t9;
+    let final self::Test #t11 = t in let final self::Index #t12 = self::f<self::Index>() in #t11.{self::Test::[]=}(#t12, #t11.{self::Test::[]}(#t12){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
+    self::B v1 = let final self::Test #t13 = t in let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = self::f<self::B>() in let final void #t16 = #t13.{self::Test::[]=}(#t14, #t15){(self::Index, self::B) → void} in #t15;
+    self::B v3 = let final self::Test #t17 = t in let final self::Index #t18 = self::f<self::Index>() in let final self::B #t19 = #t17.{self::Test::[]}(#t18){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t20 = #t17.{self::Test::[]=}(#t18, #t19){(self::Index, self::B) → void} in #t19;
+    self::B v4 = let final self::Test #t21 = t in let final self::Index #t22 = self::f<self::Index>() in let final self::B #t23 = #t21.{self::Test::[]}(#t22){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t24 = #t21.{self::Test::[]=}(#t22, #t23){(self::Index, self::B) → void} in #t23;
+    self::C v5 = let final self::Test #t25 = t in let final self::Index #t26 = self::f<self::Index>() in let final self::C #t27 = #t25.{self::Test::[]}(#t26){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t28 = #t25.{self::Test::[]=}(#t26, #t27){(self::Index, self::B) → void} in #t27;
+    self::B v6 = t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
+    self::B v7 = let final self::Test #t29 = t in let final self::Index #t30 = self::f<self::Index>() in let final self::B #t31 = #t29.{self::Test::[]}(#t30){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t32 = #t29.{self::Test::[]=}(#t30, #t31){(self::Index, self::B) → void} in #t31;
+    self::B v8 = let final self::Test #t33 = t in let final self::Index #t34 = self::f<self::Index>() in let final self::B #t35 = #t33.{self::Test::[]}(#t34){(self::Index) → self::B} in let final void #t36 = #t33.{self::Test::[]=}(#t34, #t35.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t35;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+  method test() → void {
+    self::Test2 t = self::f<self::Test2>();
+    t.{self::Test2::[]=}(self::f<self::Index>(), self::f<self::B?>()){(self::Index, self::B?) → void};
+    let final self::Test2 #t37 = t in let final self::Index #t38 = self::f<self::Index>() in #t37.{self::Test2::[]}(#t38){(self::Index) → self::B?} == null ?{self::B?} #t37.{self::Test2::[]=}(#t38, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
+    self::B? v2 = let final self::Test2 #t39 = t in let final self::Index #t40 = self::f<self::Index>() in let final self::B? #t41 = #t39.{self::Test2::[]}(#t40){(self::Index) → self::B?} in #t41 == null ?{self::B?} let final self::B? #t42 = self::f<self::B?>() in let final void #t43 = #t39.{self::Test2::[]=}(#t40, #t42){(self::Index, self::B?) → void} in #t42 : #t41{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart
index e4108f8..026a536 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart
@@ -1,20 +1,20 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class Index {}
 
 class A {
-  C operator +(F v) => null;
-  C operator -(int i) => null;
+  C operator +(F v) => throw '';
+  C operator -(int i) => throw '';
 }
 
 class B extends A {
-  D operator +(E v) => null;
-  D operator -(int i) => null;
+  D operator +(E v) => throw '';
+  D operator -(int i) => throw '';
 }
 
 class C extends B {}
@@ -25,47 +25,53 @@
 
 class F extends E {}
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class Test {
-  B operator [](Index i) => null;
+  B operator [](Index i) => throw '';
   void operator []=(Index i, A v) {}
 
   void test() {
-    Test t = /*@ typeArgs=Test* */ f();
+    Test t = /*@typeArgs=Test*/ f();
 
-    t /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] = /*@ typeArgs=A* */ f();
-
-    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
-         ??= /*@ typeArgs=A* */ f();
-
-    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [/*@ typeArgs=Index* */ f()]
-        /*@target=B.+*/ += /*@ typeArgs=E* */ f();
-
-    /*@target=B.-*/ --t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()];
+    t /*@target=Test.[]=*/ [/*@typeArgs=Index*/ f()] = /*@typeArgs=A*/ f();
 
     t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] /*@target=B.-*/ --;
+        /*@typeArgs=Index*/ f()] /*@target=B.+*/ += /*@typeArgs=E*/ f();
 
-    var /*@ type=A* */ v1 = t /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] = /*@ typeArgs=A* */ f();
+    /*@target=B.-*/ --t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()];
 
-    var /*@ type=A* */ v2 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-         ??= /*@ typeArgs=A* */ f();
+    t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
 
-    var /*@ type=D* */ v3 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.+*/ += /*@ typeArgs=E* */ f();
+    var /*@type=A*/ v1 =
+        t /*@target=Test.[]=*/ [/*@typeArgs=Index*/ f()] = /*@typeArgs=A*/ f();
 
-    var /*@ type=D* */ v4 =
+    var /*@type=D*/ v3 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.+*/ += /*@typeArgs=E*/ f();
+
+    var /*@type=D*/ v4 =
         /*@target=B.-*/ --t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()];
+            /*@typeArgs=Index*/ f()];
 
-    var /*@ type=B* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] /*@target=B.-*/ --;
+    var /*@type=B*/ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
+  }
+}
+
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, A? v) {}
+
+  void test() {
+    Test2 t = /*@typeArgs=Test2*/ f();
+
+    t /*@target=Test2.[]*/ /*@target=Test2.[]=*/ [
+        /*@typeArgs=Index*/ f()] ??= /*@typeArgs=A?*/ f();
+
+    var /*@type=A?*/ v2 = t /*@target=Test2.[]*/ /*@target=Test2.[]=*/ [
+        /*@typeArgs=Index*/ f()] ??= /*@typeArgs=A?*/ f();
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.textual_outline.expect
index c3cbb2f..5616133 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.textual_outline.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
 class Index {}
 
 class A {
-  C operator +(F v) => null;
-  C operator -(int i) => null;
+  C operator +(F v) => throw '';
+  C operator -(int i) => throw '';
 }
 
 class B extends A {
-  D operator +(E v) => null;
-  D operator -(int i) => null;
+  D operator +(E v) => throw '';
+  D operator -(int i) => throw '';
 }
 
 class C extends B {}
@@ -21,12 +20,18 @@
 
 class F extends E {}
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class Test {
-  B operator [](Index i) => null;
+  B operator [](Index i) => throw '';
   void operator []=(Index i, A v) {}
   void test() {}
 }
 
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, A? v) {}
+  void test() {}
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.textual_outline_modelled.expect
index 1b9ab91..3b8607e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.textual_outline_modelled.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {
-  C operator +(F v) => null;
-  C operator -(int i) => null;
+  C operator +(F v) => throw '';
+  C operator -(int i) => throw '';
 }
 
 class B extends A {
-  D operator +(E v) => null;
-  D operator -(int i) => null;
+  D operator +(E v) => throw '';
+  D operator -(int i) => throw '';
 }
 
 class C extends B {}
@@ -24,9 +23,15 @@
 class Index {}
 
 class Test {
-  B operator [](Index i) => null;
+  B operator [](Index i) => throw '';
   void operator []=(Index i, A v) {}
   void test() {}
 }
 
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, A? v) {}
+  void test() {}
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.expect
index 685af9c..3db584e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.expect
@@ -1,101 +1,82 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Index extends core::Object {
-  synthetic constructor •() → self::Index*
+  synthetic constructor •() → self::Index
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(self::F* v) → self::C*
-    return null;
-  operator -(core::int* i) → self::C*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(self::F v) → self::C
+    return throw "";
+  operator -(core::int i) → self::C
+    return throw "";
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::E* v) → self::D*
-    return null;
-  operator -(core::int* i) → self::D*
-    return null;
+  operator +(self::E v) → self::D
+    return throw "";
+  operator -(core::int i) → self::D
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
 }
 class F extends self::E {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::E::•()
     ;
 }
 class Test extends core::Object {
-  synthetic constructor •() → self::Test*
+  synthetic constructor •() → self::Test
     : super core::Object::•()
     ;
-  operator [](self::Index* i) → self::B*
-    return null;
-  operator []=(self::Index* i, self::A* v) → void {}
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::A v) → void {}
   method test() → void {
-    self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::A*>()){(self::Index*, self::A*) →* void};
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::A*} #t1.{self::Test::[]=}(#t2, self::f<self::A*>()){(self::Index*, self::A*) →* void} : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::E*>()){(self::E*) →* self::D*}){(self::Index*, self::A*) →* void};
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in let final self::D* #t7 = #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*} in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7){(self::Index*, self::A*) →* void} in #t7;
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in #t9.{self::Test::[]=}(#t10, #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*}){(self::Index*, self::A*) →* void};
-    self::A* v1 = let final self::Test* #t11 = t in let final self::Index* #t12 = self::f<self::Index*>() in let final self::A* #t13 = self::f<self::A*>() in let final void #t14 = #t11.{self::Test::[]=}(#t12, #t13){(self::Index*, self::A*) →* void} in #t13;
-    self::A* v2 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = #t15.{self::Test::[]}(#t16){(self::Index*) →* self::B*} in #t17 == null ?{self::A*} let final self::A* #t18 = self::f<self::A*>() in let final void #t19 = #t15.{self::Test::[]=}(#t16, #t18){(self::Index*, self::A*) →* void} in #t18 : #t17;
-    self::D* v3 = let final self::Test* #t20 = t in let final self::Index* #t21 = self::f<self::Index*>() in let final self::D* #t22 = #t20.{self::Test::[]}(#t21){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::E*>()){(self::E*) →* self::D*} in let final void #t23 = #t20.{self::Test::[]=}(#t21, #t22){(self::Index*, self::A*) →* void} in #t22;
-    self::D* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::D* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::A*) →* void} in #t26;
-    self::B* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30.{self::B::-}(1){(core::int*) →* self::D*}){(self::Index*, self::A*) →* void} in #t30;
+    self::Test t = self::f<self::Test>();
+    t.{self::Test::[]=}(self::f<self::Index>(), self::f<self::A>()){(self::Index, self::A) → void};
+    let final self::Test #t1 = t in let final self::Index #t2 = self::f<self::Index>() in #t1.{self::Test::[]=}(#t2, #t1.{self::Test::[]}(#t2){(self::Index) → self::B}.{self::B::+}(self::f<self::E>()){(self::E) → self::D}){(self::Index, self::A) → void};
+    let final self::Test #t3 = t in let final self::Index #t4 = self::f<self::Index>() in let final self::D #t5 = #t3.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::D} in let final void #t6 = #t3.{self::Test::[]=}(#t4, #t5){(self::Index, self::A) → void} in #t5;
+    let final self::Test #t7 = t in let final self::Index #t8 = self::f<self::Index>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::D}){(self::Index, self::A) → void};
+    self::A v1 = let final self::Test #t9 = t in let final self::Index #t10 = self::f<self::Index>() in let final self::A #t11 = self::f<self::A>() in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index, self::A) → void} in #t11;
+    self::D v3 = let final self::Test #t13 = t in let final self::Index #t14 = self::f<self::Index>() in let final self::D #t15 = #t13.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::+}(self::f<self::E>()){(self::E) → self::D} in let final void #t16 = #t13.{self::Test::[]=}(#t14, #t15){(self::Index, self::A) → void} in #t15;
+    self::D v4 = let final self::Test #t17 = t in let final self::Index #t18 = self::f<self::Index>() in let final self::D #t19 = #t17.{self::Test::[]}(#t18){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::D} in let final void #t20 = #t17.{self::Test::[]=}(#t18, #t19){(self::Index, self::A) → void} in #t19;
+    self::B v5 = let final self::Test #t21 = t in let final self::Index #t22 = self::f<self::Index>() in let final self::B #t23 = #t21.{self::Test::[]}(#t22){(self::Index) → self::B} in let final void #t24 = #t21.{self::Test::[]=}(#t22, #t23.{self::B::-}(1){(core::int) → self::D}){(self::Index, self::A) → void} in #t23;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::A? v) → void {}
+  method test() → void {
+    self::Test2 t = self::f<self::Test2>();
+    let final self::Test2 #t25 = t in let final self::Index #t26 = self::f<self::Index>() in #t25.{self::Test2::[]}(#t26){(self::Index) → self::B?} == null ?{self::A?} #t25.{self::Test2::[]=}(#t26, self::f<self::A?>()){(self::Index, self::A?) → void} : null;
+    self::A? v2 = let final self::Test2 #t27 = t in let final self::Index #t28 = self::f<self::Index>() in let final self::B? #t29 = #t27.{self::Test2::[]}(#t28){(self::Index) → self::B?} in #t29 == null ?{self::A?} let final self::A? #t30 = self::f<self::A?>() in let final void #t31 = #t27.{self::Test2::[]=}(#t28, #t30){(self::Index, self::A?) → void} in #t30 : #t29{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.modular.expect
index 685af9c..3db584e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.modular.expect
@@ -1,101 +1,82 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Index extends core::Object {
-  synthetic constructor •() → self::Index*
+  synthetic constructor •() → self::Index
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(self::F* v) → self::C*
-    return null;
-  operator -(core::int* i) → self::C*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(self::F v) → self::C
+    return throw "";
+  operator -(core::int i) → self::C
+    return throw "";
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::E* v) → self::D*
-    return null;
-  operator -(core::int* i) → self::D*
-    return null;
+  operator +(self::E v) → self::D
+    return throw "";
+  operator -(core::int i) → self::D
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
 }
 class F extends self::E {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::E::•()
     ;
 }
 class Test extends core::Object {
-  synthetic constructor •() → self::Test*
+  synthetic constructor •() → self::Test
     : super core::Object::•()
     ;
-  operator [](self::Index* i) → self::B*
-    return null;
-  operator []=(self::Index* i, self::A* v) → void {}
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::A v) → void {}
   method test() → void {
-    self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::A*>()){(self::Index*, self::A*) →* void};
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::A*} #t1.{self::Test::[]=}(#t2, self::f<self::A*>()){(self::Index*, self::A*) →* void} : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::E*>()){(self::E*) →* self::D*}){(self::Index*, self::A*) →* void};
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in let final self::D* #t7 = #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*} in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7){(self::Index*, self::A*) →* void} in #t7;
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in #t9.{self::Test::[]=}(#t10, #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*}){(self::Index*, self::A*) →* void};
-    self::A* v1 = let final self::Test* #t11 = t in let final self::Index* #t12 = self::f<self::Index*>() in let final self::A* #t13 = self::f<self::A*>() in let final void #t14 = #t11.{self::Test::[]=}(#t12, #t13){(self::Index*, self::A*) →* void} in #t13;
-    self::A* v2 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = #t15.{self::Test::[]}(#t16){(self::Index*) →* self::B*} in #t17 == null ?{self::A*} let final self::A* #t18 = self::f<self::A*>() in let final void #t19 = #t15.{self::Test::[]=}(#t16, #t18){(self::Index*, self::A*) →* void} in #t18 : #t17;
-    self::D* v3 = let final self::Test* #t20 = t in let final self::Index* #t21 = self::f<self::Index*>() in let final self::D* #t22 = #t20.{self::Test::[]}(#t21){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::E*>()){(self::E*) →* self::D*} in let final void #t23 = #t20.{self::Test::[]=}(#t21, #t22){(self::Index*, self::A*) →* void} in #t22;
-    self::D* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::D* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::A*) →* void} in #t26;
-    self::B* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30.{self::B::-}(1){(core::int*) →* self::D*}){(self::Index*, self::A*) →* void} in #t30;
+    self::Test t = self::f<self::Test>();
+    t.{self::Test::[]=}(self::f<self::Index>(), self::f<self::A>()){(self::Index, self::A) → void};
+    let final self::Test #t1 = t in let final self::Index #t2 = self::f<self::Index>() in #t1.{self::Test::[]=}(#t2, #t1.{self::Test::[]}(#t2){(self::Index) → self::B}.{self::B::+}(self::f<self::E>()){(self::E) → self::D}){(self::Index, self::A) → void};
+    let final self::Test #t3 = t in let final self::Index #t4 = self::f<self::Index>() in let final self::D #t5 = #t3.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::D} in let final void #t6 = #t3.{self::Test::[]=}(#t4, #t5){(self::Index, self::A) → void} in #t5;
+    let final self::Test #t7 = t in let final self::Index #t8 = self::f<self::Index>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::D}){(self::Index, self::A) → void};
+    self::A v1 = let final self::Test #t9 = t in let final self::Index #t10 = self::f<self::Index>() in let final self::A #t11 = self::f<self::A>() in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index, self::A) → void} in #t11;
+    self::D v3 = let final self::Test #t13 = t in let final self::Index #t14 = self::f<self::Index>() in let final self::D #t15 = #t13.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::+}(self::f<self::E>()){(self::E) → self::D} in let final void #t16 = #t13.{self::Test::[]=}(#t14, #t15){(self::Index, self::A) → void} in #t15;
+    self::D v4 = let final self::Test #t17 = t in let final self::Index #t18 = self::f<self::Index>() in let final self::D #t19 = #t17.{self::Test::[]}(#t18){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::D} in let final void #t20 = #t17.{self::Test::[]=}(#t18, #t19){(self::Index, self::A) → void} in #t19;
+    self::B v5 = let final self::Test #t21 = t in let final self::Index #t22 = self::f<self::Index>() in let final self::B #t23 = #t21.{self::Test::[]}(#t22){(self::Index) → self::B} in let final void #t24 = #t21.{self::Test::[]=}(#t22, #t23.{self::B::-}(1){(core::int) → self::D}){(self::Index, self::A) → void} in #t23;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::A? v) → void {}
+  method test() → void {
+    self::Test2 t = self::f<self::Test2>();
+    let final self::Test2 #t25 = t in let final self::Index #t26 = self::f<self::Index>() in #t25.{self::Test2::[]}(#t26){(self::Index) → self::B?} == null ?{self::A?} #t25.{self::Test2::[]=}(#t26, self::f<self::A?>()){(self::Index, self::A?) → void} : null;
+    self::A? v2 = let final self::Test2 #t27 = t in let final self::Index #t28 = self::f<self::Index>() in let final self::B? #t29 = #t27.{self::Test2::[]}(#t28){(self::Index) → self::B?} in #t29 == null ?{self::A?} let final self::A? #t30 = self::f<self::A?>() in let final void #t31 = #t27.{self::Test2::[]=}(#t28, #t30){(self::Index, self::A?) → void} in #t30 : #t29{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.outline.expect
index c03f865..d6a42af 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.outline.expect
@@ -1,84 +1,64 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Index extends core::Object {
-  synthetic constructor •() → self::Index*
+  synthetic constructor •() → self::Index
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  operator +(self::F* v) → self::C*
+  operator +(self::F v) → self::C
     ;
-  operator -(core::int* i) → self::C*
+  operator -(core::int i) → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator +(self::E* v) → self::D*
+  operator +(self::E v) → self::D
     ;
-  operator -(core::int* i) → self::D*
+  operator -(core::int i) → self::D
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
 }
 class F extends self::E {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
 }
 class Test extends core::Object {
-  synthetic constructor •() → self::Test*
+  synthetic constructor •() → self::Test
     ;
-  operator [](self::Index* i) → self::B*
+  operator [](self::Index i) → self::B
     ;
-  operator []=(self::Index* i, self::A* v) → void
+  operator []=(self::Index i, self::A v) → void
     ;
   method test() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    ;
+  operator [](self::Index i) → self::B?
+    ;
+  operator []=(self::Index i, self::A? v) → void
+    ;
+  method test() → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.transformed.expect
index 685af9c..3db584e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.transformed.expect
@@ -1,101 +1,82 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Index extends core::Object {
-  synthetic constructor •() → self::Index*
+  synthetic constructor •() → self::Index
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(self::F* v) → self::C*
-    return null;
-  operator -(core::int* i) → self::C*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(self::F v) → self::C
+    return throw "";
+  operator -(core::int i) → self::C
+    return throw "";
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::E* v) → self::D*
-    return null;
-  operator -(core::int* i) → self::D*
-    return null;
+  operator +(self::E v) → self::D
+    return throw "";
+  operator -(core::int i) → self::D
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
 }
 class F extends self::E {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::E::•()
     ;
 }
 class Test extends core::Object {
-  synthetic constructor •() → self::Test*
+  synthetic constructor •() → self::Test
     : super core::Object::•()
     ;
-  operator [](self::Index* i) → self::B*
-    return null;
-  operator []=(self::Index* i, self::A* v) → void {}
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::A v) → void {}
   method test() → void {
-    self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::A*>()){(self::Index*, self::A*) →* void};
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::A*} #t1.{self::Test::[]=}(#t2, self::f<self::A*>()){(self::Index*, self::A*) →* void} : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::E*>()){(self::E*) →* self::D*}){(self::Index*, self::A*) →* void};
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in let final self::D* #t7 = #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*} in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7){(self::Index*, self::A*) →* void} in #t7;
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in #t9.{self::Test::[]=}(#t10, #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*}){(self::Index*, self::A*) →* void};
-    self::A* v1 = let final self::Test* #t11 = t in let final self::Index* #t12 = self::f<self::Index*>() in let final self::A* #t13 = self::f<self::A*>() in let final void #t14 = #t11.{self::Test::[]=}(#t12, #t13){(self::Index*, self::A*) →* void} in #t13;
-    self::A* v2 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = #t15.{self::Test::[]}(#t16){(self::Index*) →* self::B*} in #t17 == null ?{self::A*} let final self::A* #t18 = self::f<self::A*>() in let final void #t19 = #t15.{self::Test::[]=}(#t16, #t18){(self::Index*, self::A*) →* void} in #t18 : #t17;
-    self::D* v3 = let final self::Test* #t20 = t in let final self::Index* #t21 = self::f<self::Index*>() in let final self::D* #t22 = #t20.{self::Test::[]}(#t21){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::E*>()){(self::E*) →* self::D*} in let final void #t23 = #t20.{self::Test::[]=}(#t21, #t22){(self::Index*, self::A*) →* void} in #t22;
-    self::D* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::D* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::A*) →* void} in #t26;
-    self::B* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30.{self::B::-}(1){(core::int*) →* self::D*}){(self::Index*, self::A*) →* void} in #t30;
+    self::Test t = self::f<self::Test>();
+    t.{self::Test::[]=}(self::f<self::Index>(), self::f<self::A>()){(self::Index, self::A) → void};
+    let final self::Test #t1 = t in let final self::Index #t2 = self::f<self::Index>() in #t1.{self::Test::[]=}(#t2, #t1.{self::Test::[]}(#t2){(self::Index) → self::B}.{self::B::+}(self::f<self::E>()){(self::E) → self::D}){(self::Index, self::A) → void};
+    let final self::Test #t3 = t in let final self::Index #t4 = self::f<self::Index>() in let final self::D #t5 = #t3.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::D} in let final void #t6 = #t3.{self::Test::[]=}(#t4, #t5){(self::Index, self::A) → void} in #t5;
+    let final self::Test #t7 = t in let final self::Index #t8 = self::f<self::Index>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::D}){(self::Index, self::A) → void};
+    self::A v1 = let final self::Test #t9 = t in let final self::Index #t10 = self::f<self::Index>() in let final self::A #t11 = self::f<self::A>() in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index, self::A) → void} in #t11;
+    self::D v3 = let final self::Test #t13 = t in let final self::Index #t14 = self::f<self::Index>() in let final self::D #t15 = #t13.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::+}(self::f<self::E>()){(self::E) → self::D} in let final void #t16 = #t13.{self::Test::[]=}(#t14, #t15){(self::Index, self::A) → void} in #t15;
+    self::D v4 = let final self::Test #t17 = t in let final self::Index #t18 = self::f<self::Index>() in let final self::D #t19 = #t17.{self::Test::[]}(#t18){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::D} in let final void #t20 = #t17.{self::Test::[]=}(#t18, #t19){(self::Index, self::A) → void} in #t19;
+    self::B v5 = let final self::Test #t21 = t in let final self::Index #t22 = self::f<self::Index>() in let final self::B #t23 = #t21.{self::Test::[]}(#t22){(self::Index) → self::B} in let final void #t24 = #t21.{self::Test::[]=}(#t22, #t23.{self::B::-}(1){(core::int) → self::D}){(self::Index, self::A) → void} in #t23;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::A? v) → void {}
+  method test() → void {
+    self::Test2 t = self::f<self::Test2>();
+    let final self::Test2 #t25 = t in let final self::Index #t26 = self::f<self::Index>() in #t25.{self::Test2::[]}(#t26){(self::Index) → self::B?} == null ?{self::A?} #t25.{self::Test2::[]=}(#t26, self::f<self::A?>()){(self::Index, self::A?) → void} : null;
+    self::A? v2 = let final self::Test2 #t27 = t in let final self::Index #t28 = self::f<self::Index>() in let final self::B? #t29 = #t27.{self::Test2::[]}(#t28){(self::Index) → self::B?} in #t29 == null ?{self::A?} let final self::A? #t30 = self::f<self::A?>() in let final void #t31 = #t27.{self::Test2::[]=}(#t28, #t30){(self::Index, self::A?) → void} in #t30 : #t29{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart
index 89b4f0a..091014b 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -28,54 +30,54 @@
 class Test extends Base {
   void test() {
     super /*@target=Base.[]=*/ [
-        /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
+        /*@typeArgs=Index**/ f()] = /*@typeArgs=B**/ f();
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-         ??= /*@ typeArgs=B* */ f();
+            /*@typeArgs=Index**/ f()]
+         ??= /*@typeArgs=B**/ f();
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+            /*@typeArgs=Index**/ f()]
+        /*@target=B.+*/ += /*@typeArgs=C**/ f();
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+            /*@typeArgs=Index**/ f()]
+        /*@target=B.**/ *= /*@typeArgs=B**/ f();
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+            /*@typeArgs=Index**/ f()]
+        /*@target=B.&*/ &= /*@typeArgs=A**/ f();
 
     /*@target=B.-*/ --super /*@target=Base.[]*/ /*@target=Base.[]=*/
-        [/*@ typeArgs=Index* */ f()];
+        [/*@typeArgs=Index**/ f()];
 
     super /*@target=Base.[]*/ /*@target=Base.[]=*/
-        [/*@ typeArgs=Index* */ f()] /*@target=B.-*/ --;
+        [/*@typeArgs=Index**/ f()] /*@target=B.-*/ --;
 
-    var /*@ type=B* */ v1 = super /*@target=Base.[]=*/ [
-        /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
+    var /*@type=B**/ v1 = super /*@target=Base.[]=*/ [
+        /*@typeArgs=Index**/ f()] = /*@typeArgs=B**/ f();
 
-    var /*@ type=B* */ v2 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-         ??= /*@ typeArgs=B* */ f();
+    var /*@type=B**/ v2 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+            /*@typeArgs=Index**/ f()]
+         ??= /*@typeArgs=B**/ f();
 
-    var /*@ type=A* */ v3 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    var /*@type=A**/ v3 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+            /*@typeArgs=Index**/ f()]
+        /*@target=B.+*/ += /*@typeArgs=C**/ f();
 
-    var /*@ type=B* */ v4 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    var /*@type=B**/ v4 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+            /*@typeArgs=Index**/ f()]
+        /*@target=B.**/ *= /*@typeArgs=B**/ f();
 
-    var /*@ type=C* */ v5 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    var /*@type=C**/ v5 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+            /*@typeArgs=Index**/ f()]
+        /*@target=B.&*/ &= /*@typeArgs=A**/ f();
 
-    var /*@ type=B* */ v6 = /*@target=B.-*/ --super
-        /*@target=Base.[]*/ /*@target=Base.[]=*/ [/*@ typeArgs=Index* */ f()];
+    var /*@type=B**/ v6 = /*@target=B.-*/ --super
+        /*@target=Base.[]*/ /*@target=Base.[]=*/ [/*@typeArgs=Index**/ f()];
 
-    var /*@ type=B* */ v7 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
-        [/*@ typeArgs=Index* */ f()] /*@target=B.-*/ --;
+    var /*@type=B**/ v7 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        [/*@typeArgs=Index**/ f()] /*@target=B.-*/ --;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart
new file mode 100644
index 0000000..0333a40
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class Index {}
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Base {
+  B operator [](Index i) => throw '';
+  void operator []=(Index i, B v) {}
+}
+
+class Test extends Base {
+  void test() {
+    super /*@target=Base.[]=*/ [/*@typeArgs=Index*/ f()] = /*@typeArgs=B*/ f();
+
+    super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    /*@target=B.-*/ --super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        [/*@typeArgs=Index*/ f()];
+
+    super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        [/*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
+
+    var /*@type=B*/ v1 = super /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] = /*@typeArgs=B*/ f();
+
+    var /*@type=B*/ v3 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    var /*@type=B*/ v4 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    var /*@type=C*/ v5 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    var /*@type=B*/ v6 = /*@target=B.-*/ --super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        /*@typeArgs=Index*/ f()];
+
+    var /*@type=B*/ v7 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        [/*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
+  }
+}
+
+class Base2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+}
+
+class Test2 extends Base2 {
+  void test() {
+    super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ [
+        /*@typeArgs=Index*/ f()] ??= /*@typeArgs=B?*/ f();
+
+    var /*@type=B?*/ v2 = super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ [
+        /*@typeArgs=Index*/ f()] ??= /*@typeArgs=B?*/ f();
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.textual_outline.expect
new file mode 100644
index 0000000..5b1cc8c
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.textual_outline.expect
@@ -0,0 +1,36 @@
+library test;
+
+class Index {}
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Base {
+  B operator [](Index i) => throw '';
+  void operator []=(Index i, B v) {}
+}
+
+class Test extends Base {
+  void test() {}
+}
+
+class Base2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+}
+
+class Test2 extends Base2 {
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1a3ca27
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.textual_outline_modelled.expect
@@ -0,0 +1,36 @@
+library test;
+
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class Base {
+  B operator [](Index i) => throw '';
+  void operator []=(Index i, B v) {}
+}
+
+class Base2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+}
+
+class C extends B {}
+
+class Index {}
+
+class Test extends Base {
+  void test() {}
+}
+
+class Test2 extends Base2 {
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.weak.expect
new file mode 100644
index 0000000..fb9581e
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.weak.expect
@@ -0,0 +1,79 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::[]=}(self::f<self::Index>(), self::f<self::B>());
+    let final self::Index #t1 = self::f<self::Index>() in super.{self::Base::[]=}(#t1, super.{self::Base::[]}(#t1).{self::B::+}(self::f<self::C>()){(self::C) → self::B});
+    let final self::Index #t2 = self::f<self::Index>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::*}(self::f<self::B>()){(self::B) → self::B});
+    let final self::Index #t3 = self::f<self::Index>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::&}(self::f<self::A>()){(self::A) → self::C});
+    let final self::Index #t4 = self::f<self::Index>() in let final self::B #t5 = super.{self::Base::[]}(#t4).{self::B::-}(1){(core::int) → self::B} in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
+    let final self::Index #t7 = self::f<self::Index>() in super.{self::Base::[]=}(#t7, super.{self::Base::[]}(#t7).{self::B::-}(1){(core::int) → self::B});
+    self::B v1 = let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = self::f<self::B>() in let final void #t10 = super.{self::Base::[]=}(#t8, #t9) in #t9;
+    self::B v3 = let final self::Index #t11 = self::f<self::Index>() in let final self::B #t12 = super.{self::Base::[]}(#t11).{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t13 = super.{self::Base::[]=}(#t11, #t12) in #t12;
+    self::B v4 = let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = super.{self::Base::[]}(#t14).{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t16 = super.{self::Base::[]=}(#t14, #t15) in #t15;
+    self::C v5 = let final self::Index #t17 = self::f<self::Index>() in let final self::C #t18 = super.{self::Base::[]}(#t17).{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t19 = super.{self::Base::[]=}(#t17, #t18) in #t18;
+    self::B v6 = let final self::Index #t20 = self::f<self::Index>() in let final self::B #t21 = super.{self::Base::[]}(#t20).{self::B::-}(1){(core::int) → self::B} in let final void #t22 = super.{self::Base::[]=}(#t20, #t21) in #t21;
+    self::B v7 = let final self::Index #t23 = self::f<self::Index>() in let final self::B #t24 = super.{self::Base::[]}(#t23) in let final void #t25 = super.{self::Base::[]=}(#t23, #t24.{self::B::-}(1){(core::int) → self::B}) in #t24;
+  }
+}
+class Base2 extends core::Object {
+  synthetic constructor •() → self::Base2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+}
+class Test2 extends self::Base2 {
+  synthetic constructor •() → self::Test2
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    let final self::Index #t26 = self::f<self::Index>() in super.{self::Base2::[]}(#t26) == null ?{self::B?} super.{self::Base2::[]=}(#t26, self::f<self::B?>()) : null;
+    self::B? v2 = let final self::Index #t27 = self::f<self::Index>() in let final self::B? #t28 = super.{self::Base2::[]}(#t27) in #t28 == null ?{self::B?} let final self::B? #t29 = self::f<self::B?>() in let final void #t30 = super.{self::Base2::[]=}(#t27, #t29) in #t29 : #t28{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.weak.modular.expect
new file mode 100644
index 0000000..fb9581e
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::[]=}(self::f<self::Index>(), self::f<self::B>());
+    let final self::Index #t1 = self::f<self::Index>() in super.{self::Base::[]=}(#t1, super.{self::Base::[]}(#t1).{self::B::+}(self::f<self::C>()){(self::C) → self::B});
+    let final self::Index #t2 = self::f<self::Index>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::*}(self::f<self::B>()){(self::B) → self::B});
+    let final self::Index #t3 = self::f<self::Index>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::&}(self::f<self::A>()){(self::A) → self::C});
+    let final self::Index #t4 = self::f<self::Index>() in let final self::B #t5 = super.{self::Base::[]}(#t4).{self::B::-}(1){(core::int) → self::B} in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
+    let final self::Index #t7 = self::f<self::Index>() in super.{self::Base::[]=}(#t7, super.{self::Base::[]}(#t7).{self::B::-}(1){(core::int) → self::B});
+    self::B v1 = let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = self::f<self::B>() in let final void #t10 = super.{self::Base::[]=}(#t8, #t9) in #t9;
+    self::B v3 = let final self::Index #t11 = self::f<self::Index>() in let final self::B #t12 = super.{self::Base::[]}(#t11).{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t13 = super.{self::Base::[]=}(#t11, #t12) in #t12;
+    self::B v4 = let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = super.{self::Base::[]}(#t14).{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t16 = super.{self::Base::[]=}(#t14, #t15) in #t15;
+    self::C v5 = let final self::Index #t17 = self::f<self::Index>() in let final self::C #t18 = super.{self::Base::[]}(#t17).{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t19 = super.{self::Base::[]=}(#t17, #t18) in #t18;
+    self::B v6 = let final self::Index #t20 = self::f<self::Index>() in let final self::B #t21 = super.{self::Base::[]}(#t20).{self::B::-}(1){(core::int) → self::B} in let final void #t22 = super.{self::Base::[]=}(#t20, #t21) in #t21;
+    self::B v7 = let final self::Index #t23 = self::f<self::Index>() in let final self::B #t24 = super.{self::Base::[]}(#t23) in let final void #t25 = super.{self::Base::[]=}(#t23, #t24.{self::B::-}(1){(core::int) → self::B}) in #t24;
+  }
+}
+class Base2 extends core::Object {
+  synthetic constructor •() → self::Base2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+}
+class Test2 extends self::Base2 {
+  synthetic constructor •() → self::Test2
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    let final self::Index #t26 = self::f<self::Index>() in super.{self::Base2::[]}(#t26) == null ?{self::B?} super.{self::Base2::[]=}(#t26, self::f<self::B?>()) : null;
+    self::B? v2 = let final self::Index #t27 = self::f<self::Index>() in let final self::B? #t28 = super.{self::Base2::[]}(#t27) in #t28 == null ?{self::B?} let final self::B? #t29 = self::f<self::B?>() in let final void #t30 = super.{self::Base2::[]=}(#t27, #t29) in #t29 : #t28{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.weak.outline.expect
new file mode 100644
index 0000000..090bb5b
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.weak.outline.expect
@@ -0,0 +1,60 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+class Base extends core::Object {
+  synthetic constructor •() → self::Base
+    ;
+  operator [](self::Index i) → self::B
+    ;
+  operator []=(self::Index i, self::B v) → void
+    ;
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test
+    ;
+  method test() → void
+    ;
+}
+class Base2 extends core::Object {
+  synthetic constructor •() → self::Base2
+    ;
+  operator [](self::Index i) → self::B?
+    ;
+  operator []=(self::Index i, self::B? v) → void
+    ;
+}
+class Test2 extends self::Base2 {
+  synthetic constructor •() → self::Test2
+    ;
+  method test() → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.weak.transformed.expect
new file mode 100644
index 0000000..fb9581e
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super2.dart.weak.transformed.expect
@@ -0,0 +1,79 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::[]=}(self::f<self::Index>(), self::f<self::B>());
+    let final self::Index #t1 = self::f<self::Index>() in super.{self::Base::[]=}(#t1, super.{self::Base::[]}(#t1).{self::B::+}(self::f<self::C>()){(self::C) → self::B});
+    let final self::Index #t2 = self::f<self::Index>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::*}(self::f<self::B>()){(self::B) → self::B});
+    let final self::Index #t3 = self::f<self::Index>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::&}(self::f<self::A>()){(self::A) → self::C});
+    let final self::Index #t4 = self::f<self::Index>() in let final self::B #t5 = super.{self::Base::[]}(#t4).{self::B::-}(1){(core::int) → self::B} in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
+    let final self::Index #t7 = self::f<self::Index>() in super.{self::Base::[]=}(#t7, super.{self::Base::[]}(#t7).{self::B::-}(1){(core::int) → self::B});
+    self::B v1 = let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = self::f<self::B>() in let final void #t10 = super.{self::Base::[]=}(#t8, #t9) in #t9;
+    self::B v3 = let final self::Index #t11 = self::f<self::Index>() in let final self::B #t12 = super.{self::Base::[]}(#t11).{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t13 = super.{self::Base::[]=}(#t11, #t12) in #t12;
+    self::B v4 = let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = super.{self::Base::[]}(#t14).{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t16 = super.{self::Base::[]=}(#t14, #t15) in #t15;
+    self::C v5 = let final self::Index #t17 = self::f<self::Index>() in let final self::C #t18 = super.{self::Base::[]}(#t17).{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t19 = super.{self::Base::[]=}(#t17, #t18) in #t18;
+    self::B v6 = let final self::Index #t20 = self::f<self::Index>() in let final self::B #t21 = super.{self::Base::[]}(#t20).{self::B::-}(1){(core::int) → self::B} in let final void #t22 = super.{self::Base::[]=}(#t20, #t21) in #t21;
+    self::B v7 = let final self::Index #t23 = self::f<self::Index>() in let final self::B #t24 = super.{self::Base::[]}(#t23) in let final void #t25 = super.{self::Base::[]=}(#t23, #t24.{self::B::-}(1){(core::int) → self::B}) in #t24;
+  }
+}
+class Base2 extends core::Object {
+  synthetic constructor •() → self::Base2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+}
+class Test2 extends self::Base2 {
+  synthetic constructor •() → self::Test2
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    let final self::Index #t26 = self::f<self::Index>() in super.{self::Base2::[]}(#t26) == null ?{self::B?} super.{self::Base2::[]=}(#t26, self::f<self::B?>()) : null;
+    self::B? v2 = let final self::Index #t27 = self::f<self::Index>() in let final self::B? #t28 = super.{self::Base2::[]}(#t27) in #t28 == null ?{self::B?} let final self::B? #t29 = self::f<self::B?>() in let final void #t30 = super.{self::Base2::[]=}(#t27, #t29) in #t29 : #t28{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart
index afa9f53..c842e0a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -19,312 +21,312 @@
 
 abstract class Test1 extends Base<int, int> {
   void test() {
-    var /*@ type=int* */ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
+    var /*@type=int**/ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
 
-    var /*@ type=num* */ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
 
-    var /*@ type=int* */ v4 =
+    var /*@type=int**/ v4 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getInt();
 
-    var /*@ type=num* */ v5 =
+    var /*@type=num**/ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getNum();
 
-    var /*@ type=int* */ v7 =
+    var /*@type=int**/ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 =
+    var /*@type=num**/ v8 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getNum();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++super
         /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x'];
 
-    var /*@ type=int* */ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+    var /*@type=int**/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
         ['x'] /*@target=num.+*/ ++;
   }
 }
 
 abstract class Test2 extends Base<int, num> {
   void test() {
-    var /*@ type=int* */ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
+    var /*@type=int**/ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
 
-    var /*@ type=num* */ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
 
-    var /*@ type=double* */ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
+    var /*@type=double**/ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
 
-    var /*@ type=int* */ v4 =
+    var /*@type=int**/ v4 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getInt();
 
-    var /*@ type=num* */ v5 =
+    var /*@type=num**/ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getNum();
 
-    var /*@ type=num* */ v6 =
+    var /*@type=num**/ v6 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getDouble();
 
-    var /*@ type=int* */ v7 =
+    var /*@type=int**/ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 =
+    var /*@type=num**/ v8 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getNum();
 
-    var /*@ type=double* */ v9 =
+    var /*@type=double**/ v9 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getDouble();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++super
         /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x'];
 
-    var /*@ type=int* */ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+    var /*@type=int**/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
         ['x'] /*@target=num.+*/ ++;
   }
 }
 
 abstract class Test3 extends Base<int, double> {
   void test() {
-    var /*@ type=num* */ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
 
-    var /*@ type=double* */ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
+    var /*@type=double**/ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
 
-    var /*@ type=num* */ v5 =
+    var /*@type=num**/ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getNum();
 
-    var /*@ type=num* */ v6 =
+    var /*@type=num**/ v6 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getDouble();
 
-    var /*@ type=int* */ v7 =
+    var /*@type=int**/ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 =
+    var /*@type=num**/ v8 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getNum();
 
-    var /*@ type=double* */ v9 =
+    var /*@type=double**/ v9 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getDouble();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++super
         /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x'];
 
-    var /*@ type=int* */ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+    var /*@type=int**/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
         ['x'] /*@target=num.+*/ ++;
   }
 }
 
 abstract class Test4 extends Base<num, int> {
   void test() {
-    var /*@ type=int* */ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
+    var /*@type=int**/ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
 
-    var /*@ type=num* */ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
 
-    var /*@ type=num* */ v4 =
+    var /*@type=num**/ v4 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getInt();
 
-    var /*@ type=num* */ v5 =
+    var /*@type=num**/ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getNum();
 
-    var /*@ type=num* */ v7 =
+    var /*@type=num**/ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 =
+    var /*@type=num**/ v8 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++super
+    var /*@type=num**/ v10 = /*@target=num.+*/ ++super
         /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x'];
 
-    var /*@ type=num* */ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+    var /*@type=num**/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
         ['x'] /*@target=num.+*/ ++;
   }
 }
 
 abstract class Test5 extends Base<num, num> {
   void test() {
-    var /*@ type=int* */ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
+    var /*@type=int**/ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
 
-    var /*@ type=num* */ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
 
-    var /*@ type=double* */ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
+    var /*@type=double**/ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
 
-    var /*@ type=num* */ v4 =
+    var /*@type=num**/ v4 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getInt();
 
-    var /*@ type=num* */ v5 =
+    var /*@type=num**/ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getNum();
 
-    var /*@ type=num* */ v6 =
+    var /*@type=num**/ v6 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getDouble();
 
-    var /*@ type=num* */ v7 =
+    var /*@type=num**/ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 =
+    var /*@type=num**/ v8 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v9 =
+    var /*@type=num**/ v9 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getDouble();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++super
+    var /*@type=num**/ v10 = /*@target=num.+*/ ++super
         /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x'];
 
-    var /*@ type=num* */ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+    var /*@type=num**/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
         ['x'] /*@target=num.+*/ ++;
   }
 }
 
 abstract class Test6 extends Base<num, double> {
   void test() {
-    var /*@ type=num* */ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
 
-    var /*@ type=double* */ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
+    var /*@type=double**/ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
 
-    var /*@ type=num* */ v5 =
+    var /*@type=num**/ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getNum();
 
-    var /*@ type=num* */ v6 =
+    var /*@type=num**/ v6 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getDouble();
 
-    var /*@ type=num* */ v7 =
+    var /*@type=num**/ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 =
+    var /*@type=num**/ v8 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v9 =
+    var /*@type=num**/ v9 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=num.+*/ += getDouble();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++super
+    var /*@type=num**/ v10 = /*@target=num.+*/ ++super
         /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x'];
 
-    var /*@ type=num* */ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+    var /*@type=num**/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
         ['x'] /*@target=num.+*/ ++;
   }
 }
 
 abstract class Test7 extends Base<double, int> {
   void test() {
-    var /*@ type=int* */ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
+    var /*@type=int**/ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
 
-    var /*@ type=num* */ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
 
-    var /*@ type=num* */ v4 =
+    var /*@type=num**/ v4 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getInt();
 
-    var /*@ type=num* */ v5 =
+    var /*@type=num**/ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getNum();
 
-    var /*@ type=double* */ v7 =
+    var /*@type=double**/ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 =
+    var /*@type=double**/ v8 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=double.+*/ += getNum();
 
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
+    var /*@type=double**/ v10 = /*@target=double.+*/ ++super
         /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x'];
 
-    var /*@ type=double* */ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+    var /*@type=double**/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
         ['x'] /*@target=double.+*/ ++;
   }
 }
 
 abstract class Test8 extends Base<double, num> {
   void test() {
-    var /*@ type=int* */ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
+    var /*@type=int**/ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
 
-    var /*@ type=num* */ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
 
-    var /*@ type=double* */ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
+    var /*@type=double**/ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
 
-    var /*@ type=num* */ v4 =
+    var /*@type=num**/ v4 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getInt();
 
-    var /*@ type=num* */ v5 =
+    var /*@type=num**/ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getNum();
 
-    var /*@ type=double* */ v6 =
+    var /*@type=double**/ v6 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getDouble();
 
-    var /*@ type=double* */ v7 =
+    var /*@type=double**/ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 =
+    var /*@type=double**/ v8 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=double.+*/ += getNum();
 
-    var /*@ type=double* */ v9 =
+    var /*@type=double**/ v9 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=double.+*/ += getDouble();
 
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
+    var /*@type=double**/ v10 = /*@target=double.+*/ ++super
         /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x'];
 
-    var /*@ type=double* */ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+    var /*@type=double**/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
         ['x'] /*@target=double.+*/ ++;
   }
 }
 
 abstract class Test9 extends Base<double, double> {
   void test() {
-    var /*@ type=num* */ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
 
-    var /*@ type=double* */ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
+    var /*@type=double**/ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
 
-    var /*@ type=num* */ v5 =
+    var /*@type=num**/ v5 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getNum();
 
-    var /*@ type=double* */ v6 =
+    var /*@type=double**/ v6 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
              ??= getDouble();
 
-    var /*@ type=double* */ v7 =
+    var /*@type=double**/ v7 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 =
+    var /*@type=double**/ v8 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=double.+*/ += getNum();
 
-    var /*@ type=double* */ v9 =
+    var /*@type=double**/ v9 =
         super /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x']
             /*@target=double.+*/ += getDouble();
 
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
+    var /*@type=double**/ v10 = /*@target=double.+*/ ++super
         /*@target=Base.[]*/ /*@target=Base.[]=*/ ['x'];
 
-    var /*@ type=double* */ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+    var /*@type=double**/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
         ['x'] /*@target=double.+*/ ++;
   }
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect
index 92e9469..d972f1a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect
@@ -2,31 +2,31 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:106:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:108:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //             /*@target=num.+*/ += getInt();
 //                               ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:116:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
-//     var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
-//                                                  ^
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:118:48: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//     var /*@type=int**/ v10 = /*@target=num.+*/ ++super
+//                                                ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:120:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:122:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //         ['x'] /*@target=num.+*/ ++;
 //                                 ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:244:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:246:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //             /*@target=double.+*/ += getInt();
 //                                  ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:248:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //             /*@target=double.+*/ += getNum();
 //                                  ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-//     var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
-//                                                        ^
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:252:54: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//     var /*@type=double**/ v10 = /*@target=double.+*/ ++super
+//                                                      ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:254:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:256:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //         ['x'] /*@target=double.+*/ ++;
 //                                    ^
 //
@@ -96,15 +96,15 @@
     core::double* v3 = let final core::String* #t66 = "x" in let final core::double* #t67 = self::getDouble() in let final void #t68 = super.{self::Base::[]=}(#t66, #t67) in #t67;
     core::num* v5 = let final core::String* #t69 = "x" in let final core::int* #t70 = super.{self::Base::[]}(#t69) in #t70 == null ?{core::num*} let final core::num* #t71 = self::getNum() as{TypeError} core::double* in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
     core::num* v6 = let final core::String* #t73 = "x" in let final core::int* #t74 = super.{self::Base::[]}(#t73) in #t74 == null ?{core::num*} let final core::double* #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
-    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:106:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:108:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
             /*@target=num.+*/ += getInt();
                               ^" in super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t79 = super.{self::Base::[]=}(#t77, #t78) in #t78;
     core::num* v8 = let final core::String* #t80 = "x" in let final core::num* #t81 = super.{self::Base::[]}(#t80).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t82 = super.{self::Base::[]=}(#t80, #t81) in #t81;
     core::double* v9 = let final core::String* #t83 = "x" in let final core::double* #t84 = super.{self::Base::[]}(#t83).{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t85 = super.{self::Base::[]=}(#t83, #t84) in #t84;
-    core::int* v10 = let final core::String* #t86 = "x" in let final core::int* #t87 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:116:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
-                                                 ^" in super.{self::Base::[]}(#t86).{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t88 = super.{self::Base::[]=}(#t86, #t87) in #t87;
-    core::int* v11 = let final core::String* #t89 = "x" in let final core::int* #t90 = super.{self::Base::[]}(#t89) in let final void #t91 = super.{self::Base::[]=}(#t89, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:120:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    core::int* v10 = let final core::String* #t86 = "x" in let final core::int* #t87 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:118:48: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++super
+                                               ^" in super.{self::Base::[]}(#t86).{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t88 = super.{self::Base::[]=}(#t86, #t87) in #t87;
+    core::int* v11 = let final core::String* #t89 = "x" in let final core::int* #t90 = super.{self::Base::[]}(#t89) in let final void #t91 = super.{self::Base::[]=}(#t89, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:122:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
         ['x'] /*@target=num.+*/ ++;
                                 ^" in #t90.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*) in #t90;
   }
@@ -167,16 +167,16 @@
     core::num* v2 = let final core::String* #t186 = "x" in let final core::num* #t187 = self::getNum() as{TypeError} core::int* in let final void #t188 = super.{self::Base::[]=}(#t186, #t187) in #t187;
     core::num* v4 = let final core::String* #t189 = "x" in let final core::double* #t190 = super.{self::Base::[]}(#t189) in #t190 == null ?{core::num*} let final core::int* #t191 = self::getInt() in let final void #t192 = super.{self::Base::[]=}(#t189, #t191) in #t191 : #t190;
     core::num* v5 = let final core::String* #t193 = "x" in let final core::double* #t194 = super.{self::Base::[]}(#t193) in #t194 == null ?{core::num*} let final core::num* #t195 = self::getNum() as{TypeError} core::int* in let final void #t196 = super.{self::Base::[]=}(#t193, #t195) in #t195 : #t194;
-    core::double* v7 = let final core::String* #t197 = "x" in let final core::double* #t198 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:244:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::double* v7 = let final core::String* #t197 = "x" in let final core::double* #t198 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:246:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
             /*@target=double.+*/ += getInt();
                                  ^" in super.{self::Base::[]}(#t197).{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t199 = super.{self::Base::[]=}(#t197, #t198) in #t198;
-    core::double* v8 = let final core::String* #t200 = "x" in let final core::double* #t201 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:248:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::double* v8 = let final core::String* #t200 = "x" in let final core::double* #t201 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
             /*@target=double.+*/ += getNum();
                                  ^" in super.{self::Base::[]}(#t200).{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t202 = super.{self::Base::[]=}(#t200, #t201) in #t201;
-    core::double* v10 = let final core::String* #t203 = "x" in let final core::double* #t204 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
-                                                       ^" in super.{self::Base::[]}(#t203).{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t205 = super.{self::Base::[]=}(#t203, #t204) in #t204;
-    core::double* v11 = let final core::String* #t206 = "x" in let final core::double* #t207 = super.{self::Base::[]}(#t206) in let final void #t208 = super.{self::Base::[]=}(#t206, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:254:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::double* v10 = let final core::String* #t203 = "x" in let final core::double* #t204 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:252:54: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    var /*@type=double**/ v10 = /*@target=double.+*/ ++super
+                                                     ^" in super.{self::Base::[]}(#t203).{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t205 = super.{self::Base::[]=}(#t203, #t204) in #t204;
+    core::double* v11 = let final core::String* #t206 = "x" in let final core::double* #t207 = super.{self::Base::[]}(#t206) in let final void #t208 = super.{self::Base::[]=}(#t206, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:256:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         ['x'] /*@target=double.+*/ ++;
                                    ^" in #t207.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*) in #t207;
   }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.modular.expect
index 92e9469..d972f1a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.modular.expect
@@ -2,31 +2,31 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:106:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:108:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //             /*@target=num.+*/ += getInt();
 //                               ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:116:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
-//     var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
-//                                                  ^
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:118:48: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//     var /*@type=int**/ v10 = /*@target=num.+*/ ++super
+//                                                ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:120:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:122:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //         ['x'] /*@target=num.+*/ ++;
 //                                 ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:244:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:246:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //             /*@target=double.+*/ += getInt();
 //                                  ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:248:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //             /*@target=double.+*/ += getNum();
 //                                  ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-//     var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
-//                                                        ^
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:252:54: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//     var /*@type=double**/ v10 = /*@target=double.+*/ ++super
+//                                                      ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:254:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:256:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //         ['x'] /*@target=double.+*/ ++;
 //                                    ^
 //
@@ -96,15 +96,15 @@
     core::double* v3 = let final core::String* #t66 = "x" in let final core::double* #t67 = self::getDouble() in let final void #t68 = super.{self::Base::[]=}(#t66, #t67) in #t67;
     core::num* v5 = let final core::String* #t69 = "x" in let final core::int* #t70 = super.{self::Base::[]}(#t69) in #t70 == null ?{core::num*} let final core::num* #t71 = self::getNum() as{TypeError} core::double* in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
     core::num* v6 = let final core::String* #t73 = "x" in let final core::int* #t74 = super.{self::Base::[]}(#t73) in #t74 == null ?{core::num*} let final core::double* #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
-    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:106:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:108:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
             /*@target=num.+*/ += getInt();
                               ^" in super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t79 = super.{self::Base::[]=}(#t77, #t78) in #t78;
     core::num* v8 = let final core::String* #t80 = "x" in let final core::num* #t81 = super.{self::Base::[]}(#t80).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t82 = super.{self::Base::[]=}(#t80, #t81) in #t81;
     core::double* v9 = let final core::String* #t83 = "x" in let final core::double* #t84 = super.{self::Base::[]}(#t83).{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t85 = super.{self::Base::[]=}(#t83, #t84) in #t84;
-    core::int* v10 = let final core::String* #t86 = "x" in let final core::int* #t87 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:116:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
-                                                 ^" in super.{self::Base::[]}(#t86).{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t88 = super.{self::Base::[]=}(#t86, #t87) in #t87;
-    core::int* v11 = let final core::String* #t89 = "x" in let final core::int* #t90 = super.{self::Base::[]}(#t89) in let final void #t91 = super.{self::Base::[]=}(#t89, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:120:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    core::int* v10 = let final core::String* #t86 = "x" in let final core::int* #t87 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:118:48: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++super
+                                               ^" in super.{self::Base::[]}(#t86).{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t88 = super.{self::Base::[]=}(#t86, #t87) in #t87;
+    core::int* v11 = let final core::String* #t89 = "x" in let final core::int* #t90 = super.{self::Base::[]}(#t89) in let final void #t91 = super.{self::Base::[]=}(#t89, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:122:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
         ['x'] /*@target=num.+*/ ++;
                                 ^" in #t90.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*) in #t90;
   }
@@ -167,16 +167,16 @@
     core::num* v2 = let final core::String* #t186 = "x" in let final core::num* #t187 = self::getNum() as{TypeError} core::int* in let final void #t188 = super.{self::Base::[]=}(#t186, #t187) in #t187;
     core::num* v4 = let final core::String* #t189 = "x" in let final core::double* #t190 = super.{self::Base::[]}(#t189) in #t190 == null ?{core::num*} let final core::int* #t191 = self::getInt() in let final void #t192 = super.{self::Base::[]=}(#t189, #t191) in #t191 : #t190;
     core::num* v5 = let final core::String* #t193 = "x" in let final core::double* #t194 = super.{self::Base::[]}(#t193) in #t194 == null ?{core::num*} let final core::num* #t195 = self::getNum() as{TypeError} core::int* in let final void #t196 = super.{self::Base::[]=}(#t193, #t195) in #t195 : #t194;
-    core::double* v7 = let final core::String* #t197 = "x" in let final core::double* #t198 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:244:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::double* v7 = let final core::String* #t197 = "x" in let final core::double* #t198 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:246:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
             /*@target=double.+*/ += getInt();
                                  ^" in super.{self::Base::[]}(#t197).{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t199 = super.{self::Base::[]=}(#t197, #t198) in #t198;
-    core::double* v8 = let final core::String* #t200 = "x" in let final core::double* #t201 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:248:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::double* v8 = let final core::String* #t200 = "x" in let final core::double* #t201 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
             /*@target=double.+*/ += getNum();
                                  ^" in super.{self::Base::[]}(#t200).{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t202 = super.{self::Base::[]=}(#t200, #t201) in #t201;
-    core::double* v10 = let final core::String* #t203 = "x" in let final core::double* #t204 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
-                                                       ^" in super.{self::Base::[]}(#t203).{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t205 = super.{self::Base::[]=}(#t203, #t204) in #t204;
-    core::double* v11 = let final core::String* #t206 = "x" in let final core::double* #t207 = super.{self::Base::[]}(#t206) in let final void #t208 = super.{self::Base::[]=}(#t206, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:254:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::double* v10 = let final core::String* #t203 = "x" in let final core::double* #t204 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:252:54: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    var /*@type=double**/ v10 = /*@target=double.+*/ ++super
+                                                     ^" in super.{self::Base::[]}(#t203).{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t205 = super.{self::Base::[]=}(#t203, #t204) in #t204;
+    core::double* v11 = let final core::String* #t206 = "x" in let final core::double* #t207 = super.{self::Base::[]}(#t206) in let final void #t208 = super.{self::Base::[]=}(#t206, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:256:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         ['x'] /*@target=double.+*/ ++;
                                    ^" in #t207.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*) in #t207;
   }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart
new file mode 100644
index 0000000..418e77a
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart
@@ -0,0 +1,260 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+abstract class Base<T, U> {
+  T operator [](String s) => /*@target=Base.getValue*/ getValue(s);
+  void operator []=(String s, U v) => /*@target=Base.setValue*/ setValue(s, v);
+
+  T getValue(String s);
+  void setValue(String s, U v);
+}
+
+abstract class Base2<T, U> {
+  T? operator [](String s) => /*@target=Base2.getValue*/ getValue(s);
+  void operator []=(
+      String s, U? v) => /*@target=Base2.setValue*/ setValue(s, v);
+
+  T? getValue(String s);
+  void setValue(String s, U? v);
+}
+
+abstract class Test1a extends Base<int, int> {
+  void test() {
+    var /*@type=int*/ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
+
+    var /*@type=int*/ v7 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=num.+*/ += getInt();
+
+    var /*@type=int*/ v10 = /*@target=num.+*/ ++super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'];
+
+    var /*@type=int*/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        ['x'] /*@target=num.+*/ ++;
+  }
+}
+
+abstract class Test1b extends Base2<int, int> {
+  void test() {
+    var /*@type=int*/ v4 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getInt();
+  }
+}
+
+abstract class Test2a extends Base<int, num> {
+  void test() {
+    var /*@type=int*/ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
+
+    var /*@type=num*/ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
+
+    var /*@type=double*/ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
+
+    var /*@type=int*/ v7 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=num.+*/ += getInt();
+
+    var /*@type=num*/ v8 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=num.+*/ += getNum();
+
+    var /*@type=double*/ v9 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=num.+*/ += getDouble();
+
+    var /*@type=int*/ v10 = /*@target=num.+*/ ++super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'];
+
+    var /*@type=int*/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        ['x'] /*@target=num.+*/ ++;
+  }
+}
+
+abstract class Test2b extends Base2<int, num> {
+  void test() {
+    var /*@type=int*/ v4 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getInt();
+
+    var /*@type=num*/ v5 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getNum();
+
+    var /*@type=num*/ v6 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getDouble();
+  }
+}
+
+abstract class Test3a extends Base<int, double> {
+  void test() {
+    var /*@type=double*/ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
+
+    var /*@type=double*/ v9 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=num.+*/ += getDouble();
+
+    var /*@type=double*/ v10 = /*@target=num.+*/ ++super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'];
+
+    var /*@type=int*/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        ['x'] /*@target=num.+*/ ++;
+  }
+}
+
+abstract class Test3b extends Base2<int, double> {
+  void test() {
+    var /*@type=num*/ v6 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getDouble();
+  }
+}
+
+abstract class Test4a extends Base<num, int> {
+  void test() {
+    var /*@type=int*/ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
+  }
+}
+
+abstract class Test4b extends Base2<num, int> {
+  void test() {
+    var /*@type=num*/ v4 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getInt();
+  }
+}
+
+abstract class Test5a extends Base<num, num> {
+  void test() {
+    var /*@type=int*/ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
+
+    var /*@type=num*/ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
+
+    var /*@type=double*/ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
+
+    var /*@type=num*/ v7 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=num.+*/ += getInt();
+
+    var /*@type=num*/ v8 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=num.+*/ += getNum();
+
+    var /*@type=double*/ v9 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=num.+*/ += getDouble();
+
+    var /*@type=num*/ v10 = /*@target=num.+*/ ++super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'];
+
+    var /*@type=num*/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        ['x'] /*@target=num.+*/ ++;
+  }
+}
+
+abstract class Test5b extends Base2<num, num> {
+  void test() {
+    var /*@type=num*/ v4 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getInt();
+
+    var /*@type=num*/ v5 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getNum();
+
+    var /*@type=num*/ v6 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getDouble();
+  }
+}
+
+abstract class Test6a extends Base<num, double> {
+  void test() {
+    var /*@type=double*/ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
+
+    var /*@type=double*/ v9 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=num.+*/ += getDouble();
+
+    var /*@type=double*/ v10 = /*@target=num.+*/ ++super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'];
+
+    var /*@type=num*/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        ['x'] /*@target=num.+*/ ++;
+  }
+}
+
+abstract class Test6b extends Base2<num, double> {
+  void test() {
+    var /*@type=num*/ v6 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getDouble();
+  }
+}
+
+abstract class Test7a extends Base<double, int> {
+  void test() {
+    var /*@type=int*/ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
+  }
+}
+
+abstract class Test7b extends Base2<double, int> {
+  void test() {
+    var /*@type=num*/ v4 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getInt();
+  }
+}
+
+abstract class Test8a extends Base<double, num> {
+  void test() {
+    var /*@type=int*/ v1 = super /*@target=Base.[]=*/ ['x'] = getInt();
+
+    var /*@type=num*/ v2 = super /*@target=Base.[]=*/ ['x'] = getNum();
+
+    var /*@type=double*/ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
+
+    var /*@type=double*/ v7 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=double.+*/ += getInt();
+
+    var /*@type=double*/ v8 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=double.+*/ += getNum();
+
+    var /*@type=double*/ v9 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=double.+*/ += getDouble();
+
+    var /*@type=double*/ v10 = /*@target=double.+*/ ++super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'];
+
+    var /*@type=double*/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        ['x'] /*@target=double.+*/ ++;
+  }
+}
+
+abstract class Test8b extends Base2<double, num> {
+  void test() {
+    var /*@type=num*/ v4 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getInt();
+
+    var /*@type=num*/ v5 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getNum();
+
+    var /*@type=double*/ v6 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getDouble();
+  }
+}
+
+abstract class Test9a extends Base<double, double> {
+  void test() {
+    var /*@type=double*/ v3 = super /*@target=Base.[]=*/ ['x'] = getDouble();
+
+    var /*@type=double*/ v8 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=double.+*/ += getNum();
+
+    var /*@type=double*/ v9 = super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'] /*@target=double.+*/ += getDouble();
+
+    var /*@type=double*/ v10 = /*@target=double.+*/ ++super /*@target=Base.[]*/ /*@target=Base.[]=*/ [
+        'x'];
+
+    var /*@type=double*/ v11 = super /*@target=Base.[]*/ /*@target=Base.[]=*/
+        ['x'] /*@target=double.+*/ ++;
+  }
+}
+
+abstract class Test9b extends Base2<double, double> {
+  void test() {
+    var /*@type=double*/ v6 =
+        super /*@target=Base2.[]*/ /*@target=Base2.[]=*/ ['x'] ??= getDouble();
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.textual_outline.expect
new file mode 100644
index 0000000..5799605
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.textual_outline.expect
@@ -0,0 +1,93 @@
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+abstract class Base<T, U> {
+  T operator [](String s) => getValue(s);
+  void operator []=(String s, U v) => setValue(s, v);
+  T getValue(String s);
+  void setValue(String s, U v);
+}
+
+abstract class Base2<T, U> {
+  T? operator [](String s) => getValue(s);
+  void operator []=(String s, U? v) => setValue(s, v);
+  T? getValue(String s);
+  void setValue(String s, U? v);
+}
+
+abstract class Test1a extends Base<int, int> {
+  void test() {}
+}
+
+abstract class Test1b extends Base2<int, int> {
+  void test() {}
+}
+
+abstract class Test2a extends Base<int, num> {
+  void test() {}
+}
+
+abstract class Test2b extends Base2<int, num> {
+  void test() {}
+}
+
+abstract class Test3a extends Base<int, double> {
+  void test() {}
+}
+
+abstract class Test3b extends Base2<int, double> {
+  void test() {}
+}
+
+abstract class Test4a extends Base<num, int> {
+  void test() {}
+}
+
+abstract class Test4b extends Base2<num, int> {
+  void test() {}
+}
+
+abstract class Test5a extends Base<num, num> {
+  void test() {}
+}
+
+abstract class Test5b extends Base2<num, num> {
+  void test() {}
+}
+
+abstract class Test6a extends Base<num, double> {
+  void test() {}
+}
+
+abstract class Test6b extends Base2<num, double> {
+  void test() {}
+}
+
+abstract class Test7a extends Base<double, int> {
+  void test() {}
+}
+
+abstract class Test7b extends Base2<double, int> {
+  void test() {}
+}
+
+abstract class Test8a extends Base<double, num> {
+  void test() {}
+}
+
+abstract class Test8b extends Base2<double, num> {
+  void test() {}
+}
+
+abstract class Test9a extends Base<double, double> {
+  void test() {}
+}
+
+abstract class Test9b extends Base2<double, double> {
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a310fca
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.textual_outline_modelled.expect
@@ -0,0 +1,92 @@
+library test;
+
+abstract class Base<T, U> {
+  T getValue(String s);
+  T operator [](String s) => getValue(s);
+  void operator []=(String s, U v) => setValue(s, v);
+  void setValue(String s, U v);
+}
+
+abstract class Base2<T, U> {
+  T? getValue(String s);
+  T? operator [](String s) => getValue(s);
+  void operator []=(String s, U? v) => setValue(s, v);
+  void setValue(String s, U? v);
+}
+
+abstract class Test1a extends Base<int, int> {
+  void test() {}
+}
+
+abstract class Test1b extends Base2<int, int> {
+  void test() {}
+}
+
+abstract class Test2a extends Base<int, num> {
+  void test() {}
+}
+
+abstract class Test2b extends Base2<int, num> {
+  void test() {}
+}
+
+abstract class Test3a extends Base<int, double> {
+  void test() {}
+}
+
+abstract class Test3b extends Base2<int, double> {
+  void test() {}
+}
+
+abstract class Test4a extends Base<num, int> {
+  void test() {}
+}
+
+abstract class Test4b extends Base2<num, int> {
+  void test() {}
+}
+
+abstract class Test5a extends Base<num, num> {
+  void test() {}
+}
+
+abstract class Test5b extends Base2<num, num> {
+  void test() {}
+}
+
+abstract class Test6a extends Base<num, double> {
+  void test() {}
+}
+
+abstract class Test6b extends Base2<num, double> {
+  void test() {}
+}
+
+abstract class Test7a extends Base<double, int> {
+  void test() {}
+}
+
+abstract class Test7b extends Base2<double, int> {
+  void test() {}
+}
+
+abstract class Test8a extends Base<double, num> {
+  void test() {}
+}
+
+abstract class Test8b extends Base2<double, num> {
+  void test() {}
+}
+
+abstract class Test9a extends Base<double, double> {
+  void test() {}
+}
+
+abstract class Test9b extends Base2<double, double> {
+  void test() {}
+}
+
+double getDouble() => 0.0;
+int getInt() => 0;
+main() {}
+num getNum() => 0;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.weak.expect
new file mode 100644
index 0000000..3dbc4a9
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.weak.expect
@@ -0,0 +1,217 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Base<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base<self::Base::T%, self::Base::U%>
+    : super core::Object::•()
+    ;
+  operator [](core::String s) → self::Base::T%
+    return this.{self::Base::getValue}(s){(core::String) → self::Base::T%};
+  operator []=(core::String s, covariant-by-class self::Base::U% v) → void
+    return this.{self::Base::setValue}(s, v){(core::String, self::Base::U%) → void};
+  abstract method getValue(core::String s) → self::Base::T%;
+  abstract method setValue(core::String s, covariant-by-class self::Base::U% v) → void;
+}
+abstract class Base2<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base2<self::Base2::T%, self::Base2::U%>
+    : super core::Object::•()
+    ;
+  operator [](core::String s) → self::Base2::T?
+    return this.{self::Base2::getValue}(s){(core::String) → self::Base2::T?};
+  operator []=(core::String s, covariant-by-class self::Base2::U? v) → void
+    return this.{self::Base2::setValue}(s, v){(core::String, self::Base2::U?) → void};
+  abstract method getValue(core::String s) → self::Base2::T?;
+  abstract method setValue(core::String s, covariant-by-class self::Base2::U? v) → void;
+}
+abstract class Test1a extends self::Base<core::int, core::int> {
+  synthetic constructor •() → self::Test1a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t1 = "x" in let final core::int #t2 = self::getInt() in let final void #t3 = super.{self::Base::[]=}(#t1, #t2) in #t2;
+    core::int v7 = let final core::String #t4 = "x" in let final core::int #t5 = super.{self::Base::[]}(#t4).{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
+    core::int v10 = let final core::String #t7 = "x" in let final core::int #t8 = super.{self::Base::[]}(#t7).{core::num::+}(1){(core::num) → core::int} in let final void #t9 = super.{self::Base::[]=}(#t7, #t8) in #t8;
+    core::int v11 = let final core::String #t10 = "x" in let final core::int #t11 = super.{self::Base::[]}(#t10) in let final void #t12 = super.{self::Base::[]=}(#t10, #t11.{core::num::+}(1){(core::num) → core::int}) in #t11;
+  }
+}
+abstract class Test1b extends self::Base2<core::int, core::int> {
+  synthetic constructor •() → self::Test1b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::int v4 = let final core::String #t13 = "x" in let final core::int? #t14 = super.{self::Base2::[]}(#t13) in #t14 == null ?{core::int} let final core::int #t15 = self::getInt() in let final void #t16 = super.{self::Base2::[]=}(#t13, #t15) in #t15 : #t14{core::int};
+  }
+}
+abstract class Test2a extends self::Base<core::int, core::num> {
+  synthetic constructor •() → self::Test2a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t17 = "x" in let final core::int #t18 = self::getInt() in let final void #t19 = super.{self::Base::[]=}(#t17, #t18) in #t18;
+    core::num v2 = let final core::String #t20 = "x" in let final core::num #t21 = self::getNum() in let final void #t22 = super.{self::Base::[]=}(#t20, #t21) in #t21;
+    core::double v3 = let final core::String #t23 = "x" in let final core::double #t24 = self::getDouble() in let final void #t25 = super.{self::Base::[]=}(#t23, #t24) in #t24;
+    core::int v7 = let final core::String #t26 = "x" in let final core::int #t27 = super.{self::Base::[]}(#t26).{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t28 = super.{self::Base::[]=}(#t26, #t27) in #t27;
+    core::num v8 = let final core::String #t29 = "x" in let final core::num #t30 = super.{self::Base::[]}(#t29).{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t31 = super.{self::Base::[]=}(#t29, #t30) in #t30;
+    core::double v9 = let final core::String #t32 = "x" in let final core::double #t33 = super.{self::Base::[]}(#t32).{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t34 = super.{self::Base::[]=}(#t32, #t33) in #t33;
+    core::int v10 = let final core::String #t35 = "x" in let final core::int #t36 = super.{self::Base::[]}(#t35).{core::num::+}(1){(core::num) → core::int} in let final void #t37 = super.{self::Base::[]=}(#t35, #t36) in #t36;
+    core::int v11 = let final core::String #t38 = "x" in let final core::int #t39 = super.{self::Base::[]}(#t38) in let final void #t40 = super.{self::Base::[]=}(#t38, #t39.{core::num::+}(1){(core::num) → core::int}) in #t39;
+  }
+}
+abstract class Test2b extends self::Base2<core::int, core::num> {
+  synthetic constructor •() → self::Test2b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::int v4 = let final core::String #t41 = "x" in let final core::int? #t42 = super.{self::Base2::[]}(#t41) in #t42 == null ?{core::int} let final core::int #t43 = self::getInt() in let final void #t44 = super.{self::Base2::[]=}(#t41, #t43) in #t43 : #t42{core::int};
+    core::num v5 = let final core::String #t45 = "x" in let final core::int? #t46 = super.{self::Base2::[]}(#t45) in #t46 == null ?{core::num} let final core::num #t47 = self::getNum() in let final void #t48 = super.{self::Base2::[]=}(#t45, #t47) in #t47 : #t46{core::int};
+    core::num v6 = let final core::String #t49 = "x" in let final core::int? #t50 = super.{self::Base2::[]}(#t49) in #t50 == null ?{core::num} let final core::double #t51 = self::getDouble() in let final void #t52 = super.{self::Base2::[]=}(#t49, #t51) in #t51 : #t50{core::int};
+  }
+}
+abstract class Test3a extends self::Base<core::int, core::double> {
+  synthetic constructor •() → self::Test3a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::double v3 = let final core::String #t53 = "x" in let final core::double #t54 = self::getDouble() in let final void #t55 = super.{self::Base::[]=}(#t53, #t54) in #t54;
+    core::double v9 = let final core::String #t56 = "x" in let final core::double #t57 = super.{self::Base::[]}(#t56).{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t58 = super.{self::Base::[]=}(#t56, #t57) in #t57;
+    core::double v10 = let final core::String #t59 = "x" in let final core::double #t60 = super.{self::Base::[]}(#t59).{core::num::+}(1.0){(core::num) → core::double} in let final void #t61 = super.{self::Base::[]=}(#t59, #t60) in #t60;
+    core::int v11 = let final core::String #t62 = "x" in let final core::int #t63 = super.{self::Base::[]}(#t62) in let final void #t64 = super.{self::Base::[]=}(#t62, #t63.{core::num::+}(1.0){(core::num) → core::double}) in #t63;
+  }
+}
+abstract class Test3b extends self::Base2<core::int, core::double> {
+  synthetic constructor •() → self::Test3b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v6 = let final core::String #t65 = "x" in let final core::int? #t66 = super.{self::Base2::[]}(#t65) in #t66 == null ?{core::num} let final core::double #t67 = self::getDouble() in let final void #t68 = super.{self::Base2::[]=}(#t65, #t67) in #t67 : #t66{core::int};
+  }
+}
+abstract class Test4a extends self::Base<core::num, core::int> {
+  synthetic constructor •() → self::Test4a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t69 = "x" in let final core::int #t70 = self::getInt() in let final void #t71 = super.{self::Base::[]=}(#t69, #t70) in #t70;
+  }
+}
+abstract class Test4b extends self::Base2<core::num, core::int> {
+  synthetic constructor •() → self::Test4b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v4 = let final core::String #t72 = "x" in let final core::num? #t73 = super.{self::Base2::[]}(#t72) in #t73 == null ?{core::num} let final core::int #t74 = self::getInt() in let final void #t75 = super.{self::Base2::[]=}(#t72, #t74) in #t74 : #t73{core::num};
+  }
+}
+abstract class Test5a extends self::Base<core::num, core::num> {
+  synthetic constructor •() → self::Test5a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t76 = "x" in let final core::int #t77 = self::getInt() in let final void #t78 = super.{self::Base::[]=}(#t76, #t77) in #t77;
+    core::num v2 = let final core::String #t79 = "x" in let final core::num #t80 = self::getNum() in let final void #t81 = super.{self::Base::[]=}(#t79, #t80) in #t80;
+    core::double v3 = let final core::String #t82 = "x" in let final core::double #t83 = self::getDouble() in let final void #t84 = super.{self::Base::[]=}(#t82, #t83) in #t83;
+    core::num v7 = let final core::String #t85 = "x" in let final core::num #t86 = super.{self::Base::[]}(#t85).{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t87 = super.{self::Base::[]=}(#t85, #t86) in #t86;
+    core::num v8 = let final core::String #t88 = "x" in let final core::num #t89 = super.{self::Base::[]}(#t88).{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t90 = super.{self::Base::[]=}(#t88, #t89) in #t89;
+    core::double v9 = let final core::String #t91 = "x" in let final core::double #t92 = super.{self::Base::[]}(#t91).{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t93 = super.{self::Base::[]=}(#t91, #t92) in #t92;
+    core::num v10 = let final core::String #t94 = "x" in let final core::num #t95 = super.{self::Base::[]}(#t94).{core::num::+}(1){(core::num) → core::num} in let final void #t96 = super.{self::Base::[]=}(#t94, #t95) in #t95;
+    core::num v11 = let final core::String #t97 = "x" in let final core::num #t98 = super.{self::Base::[]}(#t97) in let final void #t99 = super.{self::Base::[]=}(#t97, #t98.{core::num::+}(1){(core::num) → core::num}) in #t98;
+  }
+}
+abstract class Test5b extends self::Base2<core::num, core::num> {
+  synthetic constructor •() → self::Test5b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v4 = let final core::String #t100 = "x" in let final core::num? #t101 = super.{self::Base2::[]}(#t100) in #t101 == null ?{core::num} let final core::int #t102 = self::getInt() in let final void #t103 = super.{self::Base2::[]=}(#t100, #t102) in #t102 : #t101{core::num};
+    core::num v5 = let final core::String #t104 = "x" in let final core::num? #t105 = super.{self::Base2::[]}(#t104) in #t105 == null ?{core::num} let final core::num #t106 = self::getNum() in let final void #t107 = super.{self::Base2::[]=}(#t104, #t106) in #t106 : #t105{core::num};
+    core::num v6 = let final core::String #t108 = "x" in let final core::num? #t109 = super.{self::Base2::[]}(#t108) in #t109 == null ?{core::num} let final core::double #t110 = self::getDouble() in let final void #t111 = super.{self::Base2::[]=}(#t108, #t110) in #t110 : #t109{core::num};
+  }
+}
+abstract class Test6a extends self::Base<core::num, core::double> {
+  synthetic constructor •() → self::Test6a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::double v3 = let final core::String #t112 = "x" in let final core::double #t113 = self::getDouble() in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
+    core::double v9 = let final core::String #t115 = "x" in let final core::double #t116 = super.{self::Base::[]}(#t115).{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t117 = super.{self::Base::[]=}(#t115, #t116) in #t116;
+    core::double v10 = let final core::String #t118 = "x" in let final core::double #t119 = super.{self::Base::[]}(#t118).{core::num::+}(1.0){(core::num) → core::double} in let final void #t120 = super.{self::Base::[]=}(#t118, #t119) in #t119;
+    core::num v11 = let final core::String #t121 = "x" in let final core::num #t122 = super.{self::Base::[]}(#t121) in let final void #t123 = super.{self::Base::[]=}(#t121, #t122.{core::num::+}(1.0){(core::num) → core::double}) in #t122;
+  }
+}
+abstract class Test6b extends self::Base2<core::num, core::double> {
+  synthetic constructor •() → self::Test6b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v6 = let final core::String #t124 = "x" in let final core::num? #t125 = super.{self::Base2::[]}(#t124) in #t125 == null ?{core::num} let final core::double #t126 = self::getDouble() in let final void #t127 = super.{self::Base2::[]=}(#t124, #t126) in #t126 : #t125{core::num};
+  }
+}
+abstract class Test7a extends self::Base<core::double, core::int> {
+  synthetic constructor •() → self::Test7a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t128 = "x" in let final core::int #t129 = self::getInt() in let final void #t130 = super.{self::Base::[]=}(#t128, #t129) in #t129;
+  }
+}
+abstract class Test7b extends self::Base2<core::double, core::int> {
+  synthetic constructor •() → self::Test7b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v4 = let final core::String #t131 = "x" in let final core::double? #t132 = super.{self::Base2::[]}(#t131) in #t132 == null ?{core::num} let final core::int #t133 = self::getInt() in let final void #t134 = super.{self::Base2::[]=}(#t131, #t133) in #t133 : #t132{core::double};
+  }
+}
+abstract class Test8a extends self::Base<core::double, core::num> {
+  synthetic constructor •() → self::Test8a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t135 = "x" in let final core::int #t136 = self::getInt() in let final void #t137 = super.{self::Base::[]=}(#t135, #t136) in #t136;
+    core::num v2 = let final core::String #t138 = "x" in let final core::num #t139 = self::getNum() in let final void #t140 = super.{self::Base::[]=}(#t138, #t139) in #t139;
+    core::double v3 = let final core::String #t141 = "x" in let final core::double #t142 = self::getDouble() in let final void #t143 = super.{self::Base::[]=}(#t141, #t142) in #t142;
+    core::double v7 = let final core::String #t144 = "x" in let final core::double #t145 = super.{self::Base::[]}(#t144).{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t146 = super.{self::Base::[]=}(#t144, #t145) in #t145;
+    core::double v8 = let final core::String #t147 = "x" in let final core::double #t148 = super.{self::Base::[]}(#t147).{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t149 = super.{self::Base::[]=}(#t147, #t148) in #t148;
+    core::double v9 = let final core::String #t150 = "x" in let final core::double #t151 = super.{self::Base::[]}(#t150).{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t152 = super.{self::Base::[]=}(#t150, #t151) in #t151;
+    core::double v10 = let final core::String #t153 = "x" in let final core::double #t154 = super.{self::Base::[]}(#t153).{core::double::+}(1){(core::num) → core::double} in let final void #t155 = super.{self::Base::[]=}(#t153, #t154) in #t154;
+    core::double v11 = let final core::String #t156 = "x" in let final core::double #t157 = super.{self::Base::[]}(#t156) in let final void #t158 = super.{self::Base::[]=}(#t156, #t157.{core::double::+}(1){(core::num) → core::double}) in #t157;
+  }
+}
+abstract class Test8b extends self::Base2<core::double, core::num> {
+  synthetic constructor •() → self::Test8b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v4 = let final core::String #t159 = "x" in let final core::double? #t160 = super.{self::Base2::[]}(#t159) in #t160 == null ?{core::num} let final core::int #t161 = self::getInt() in let final void #t162 = super.{self::Base2::[]=}(#t159, #t161) in #t161 : #t160{core::double};
+    core::num v5 = let final core::String #t163 = "x" in let final core::double? #t164 = super.{self::Base2::[]}(#t163) in #t164 == null ?{core::num} let final core::num #t165 = self::getNum() in let final void #t166 = super.{self::Base2::[]=}(#t163, #t165) in #t165 : #t164{core::double};
+    core::double v6 = let final core::String #t167 = "x" in let final core::double? #t168 = super.{self::Base2::[]}(#t167) in #t168 == null ?{core::double} let final core::double #t169 = self::getDouble() in let final void #t170 = super.{self::Base2::[]=}(#t167, #t169) in #t169 : #t168{core::double};
+  }
+}
+abstract class Test9a extends self::Base<core::double, core::double> {
+  synthetic constructor •() → self::Test9a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::double v3 = let final core::String #t171 = "x" in let final core::double #t172 = self::getDouble() in let final void #t173 = super.{self::Base::[]=}(#t171, #t172) in #t172;
+    core::double v8 = let final core::String #t174 = "x" in let final core::double #t175 = super.{self::Base::[]}(#t174).{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
+    core::double v9 = let final core::String #t177 = "x" in let final core::double #t178 = super.{self::Base::[]}(#t177).{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
+    core::double v10 = let final core::String #t180 = "x" in let final core::double #t181 = super.{self::Base::[]}(#t180).{core::double::+}(1){(core::num) → core::double} in let final void #t182 = super.{self::Base::[]=}(#t180, #t181) in #t181;
+    core::double v11 = let final core::String #t183 = "x" in let final core::double #t184 = super.{self::Base::[]}(#t183) in let final void #t185 = super.{self::Base::[]=}(#t183, #t184.{core::double::+}(1){(core::num) → core::double}) in #t184;
+  }
+}
+abstract class Test9b extends self::Base2<core::double, core::double> {
+  synthetic constructor •() → self::Test9b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::double v6 = let final core::String #t186 = "x" in let final core::double? #t187 = super.{self::Base2::[]}(#t186) in #t187 == null ?{core::double} let final core::double #t188 = self::getDouble() in let final void #t189 = super.{self::Base2::[]=}(#t186, #t188) in #t188 : #t187{core::double};
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.weak.modular.expect
new file mode 100644
index 0000000..3dbc4a9
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.weak.modular.expect
@@ -0,0 +1,217 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Base<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base<self::Base::T%, self::Base::U%>
+    : super core::Object::•()
+    ;
+  operator [](core::String s) → self::Base::T%
+    return this.{self::Base::getValue}(s){(core::String) → self::Base::T%};
+  operator []=(core::String s, covariant-by-class self::Base::U% v) → void
+    return this.{self::Base::setValue}(s, v){(core::String, self::Base::U%) → void};
+  abstract method getValue(core::String s) → self::Base::T%;
+  abstract method setValue(core::String s, covariant-by-class self::Base::U% v) → void;
+}
+abstract class Base2<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base2<self::Base2::T%, self::Base2::U%>
+    : super core::Object::•()
+    ;
+  operator [](core::String s) → self::Base2::T?
+    return this.{self::Base2::getValue}(s){(core::String) → self::Base2::T?};
+  operator []=(core::String s, covariant-by-class self::Base2::U? v) → void
+    return this.{self::Base2::setValue}(s, v){(core::String, self::Base2::U?) → void};
+  abstract method getValue(core::String s) → self::Base2::T?;
+  abstract method setValue(core::String s, covariant-by-class self::Base2::U? v) → void;
+}
+abstract class Test1a extends self::Base<core::int, core::int> {
+  synthetic constructor •() → self::Test1a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t1 = "x" in let final core::int #t2 = self::getInt() in let final void #t3 = super.{self::Base::[]=}(#t1, #t2) in #t2;
+    core::int v7 = let final core::String #t4 = "x" in let final core::int #t5 = super.{self::Base::[]}(#t4).{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
+    core::int v10 = let final core::String #t7 = "x" in let final core::int #t8 = super.{self::Base::[]}(#t7).{core::num::+}(1){(core::num) → core::int} in let final void #t9 = super.{self::Base::[]=}(#t7, #t8) in #t8;
+    core::int v11 = let final core::String #t10 = "x" in let final core::int #t11 = super.{self::Base::[]}(#t10) in let final void #t12 = super.{self::Base::[]=}(#t10, #t11.{core::num::+}(1){(core::num) → core::int}) in #t11;
+  }
+}
+abstract class Test1b extends self::Base2<core::int, core::int> {
+  synthetic constructor •() → self::Test1b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::int v4 = let final core::String #t13 = "x" in let final core::int? #t14 = super.{self::Base2::[]}(#t13) in #t14 == null ?{core::int} let final core::int #t15 = self::getInt() in let final void #t16 = super.{self::Base2::[]=}(#t13, #t15) in #t15 : #t14{core::int};
+  }
+}
+abstract class Test2a extends self::Base<core::int, core::num> {
+  synthetic constructor •() → self::Test2a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t17 = "x" in let final core::int #t18 = self::getInt() in let final void #t19 = super.{self::Base::[]=}(#t17, #t18) in #t18;
+    core::num v2 = let final core::String #t20 = "x" in let final core::num #t21 = self::getNum() in let final void #t22 = super.{self::Base::[]=}(#t20, #t21) in #t21;
+    core::double v3 = let final core::String #t23 = "x" in let final core::double #t24 = self::getDouble() in let final void #t25 = super.{self::Base::[]=}(#t23, #t24) in #t24;
+    core::int v7 = let final core::String #t26 = "x" in let final core::int #t27 = super.{self::Base::[]}(#t26).{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t28 = super.{self::Base::[]=}(#t26, #t27) in #t27;
+    core::num v8 = let final core::String #t29 = "x" in let final core::num #t30 = super.{self::Base::[]}(#t29).{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t31 = super.{self::Base::[]=}(#t29, #t30) in #t30;
+    core::double v9 = let final core::String #t32 = "x" in let final core::double #t33 = super.{self::Base::[]}(#t32).{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t34 = super.{self::Base::[]=}(#t32, #t33) in #t33;
+    core::int v10 = let final core::String #t35 = "x" in let final core::int #t36 = super.{self::Base::[]}(#t35).{core::num::+}(1){(core::num) → core::int} in let final void #t37 = super.{self::Base::[]=}(#t35, #t36) in #t36;
+    core::int v11 = let final core::String #t38 = "x" in let final core::int #t39 = super.{self::Base::[]}(#t38) in let final void #t40 = super.{self::Base::[]=}(#t38, #t39.{core::num::+}(1){(core::num) → core::int}) in #t39;
+  }
+}
+abstract class Test2b extends self::Base2<core::int, core::num> {
+  synthetic constructor •() → self::Test2b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::int v4 = let final core::String #t41 = "x" in let final core::int? #t42 = super.{self::Base2::[]}(#t41) in #t42 == null ?{core::int} let final core::int #t43 = self::getInt() in let final void #t44 = super.{self::Base2::[]=}(#t41, #t43) in #t43 : #t42{core::int};
+    core::num v5 = let final core::String #t45 = "x" in let final core::int? #t46 = super.{self::Base2::[]}(#t45) in #t46 == null ?{core::num} let final core::num #t47 = self::getNum() in let final void #t48 = super.{self::Base2::[]=}(#t45, #t47) in #t47 : #t46{core::int};
+    core::num v6 = let final core::String #t49 = "x" in let final core::int? #t50 = super.{self::Base2::[]}(#t49) in #t50 == null ?{core::num} let final core::double #t51 = self::getDouble() in let final void #t52 = super.{self::Base2::[]=}(#t49, #t51) in #t51 : #t50{core::int};
+  }
+}
+abstract class Test3a extends self::Base<core::int, core::double> {
+  synthetic constructor •() → self::Test3a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::double v3 = let final core::String #t53 = "x" in let final core::double #t54 = self::getDouble() in let final void #t55 = super.{self::Base::[]=}(#t53, #t54) in #t54;
+    core::double v9 = let final core::String #t56 = "x" in let final core::double #t57 = super.{self::Base::[]}(#t56).{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t58 = super.{self::Base::[]=}(#t56, #t57) in #t57;
+    core::double v10 = let final core::String #t59 = "x" in let final core::double #t60 = super.{self::Base::[]}(#t59).{core::num::+}(1.0){(core::num) → core::double} in let final void #t61 = super.{self::Base::[]=}(#t59, #t60) in #t60;
+    core::int v11 = let final core::String #t62 = "x" in let final core::int #t63 = super.{self::Base::[]}(#t62) in let final void #t64 = super.{self::Base::[]=}(#t62, #t63.{core::num::+}(1.0){(core::num) → core::double}) in #t63;
+  }
+}
+abstract class Test3b extends self::Base2<core::int, core::double> {
+  synthetic constructor •() → self::Test3b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v6 = let final core::String #t65 = "x" in let final core::int? #t66 = super.{self::Base2::[]}(#t65) in #t66 == null ?{core::num} let final core::double #t67 = self::getDouble() in let final void #t68 = super.{self::Base2::[]=}(#t65, #t67) in #t67 : #t66{core::int};
+  }
+}
+abstract class Test4a extends self::Base<core::num, core::int> {
+  synthetic constructor •() → self::Test4a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t69 = "x" in let final core::int #t70 = self::getInt() in let final void #t71 = super.{self::Base::[]=}(#t69, #t70) in #t70;
+  }
+}
+abstract class Test4b extends self::Base2<core::num, core::int> {
+  synthetic constructor •() → self::Test4b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v4 = let final core::String #t72 = "x" in let final core::num? #t73 = super.{self::Base2::[]}(#t72) in #t73 == null ?{core::num} let final core::int #t74 = self::getInt() in let final void #t75 = super.{self::Base2::[]=}(#t72, #t74) in #t74 : #t73{core::num};
+  }
+}
+abstract class Test5a extends self::Base<core::num, core::num> {
+  synthetic constructor •() → self::Test5a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t76 = "x" in let final core::int #t77 = self::getInt() in let final void #t78 = super.{self::Base::[]=}(#t76, #t77) in #t77;
+    core::num v2 = let final core::String #t79 = "x" in let final core::num #t80 = self::getNum() in let final void #t81 = super.{self::Base::[]=}(#t79, #t80) in #t80;
+    core::double v3 = let final core::String #t82 = "x" in let final core::double #t83 = self::getDouble() in let final void #t84 = super.{self::Base::[]=}(#t82, #t83) in #t83;
+    core::num v7 = let final core::String #t85 = "x" in let final core::num #t86 = super.{self::Base::[]}(#t85).{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t87 = super.{self::Base::[]=}(#t85, #t86) in #t86;
+    core::num v8 = let final core::String #t88 = "x" in let final core::num #t89 = super.{self::Base::[]}(#t88).{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t90 = super.{self::Base::[]=}(#t88, #t89) in #t89;
+    core::double v9 = let final core::String #t91 = "x" in let final core::double #t92 = super.{self::Base::[]}(#t91).{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t93 = super.{self::Base::[]=}(#t91, #t92) in #t92;
+    core::num v10 = let final core::String #t94 = "x" in let final core::num #t95 = super.{self::Base::[]}(#t94).{core::num::+}(1){(core::num) → core::num} in let final void #t96 = super.{self::Base::[]=}(#t94, #t95) in #t95;
+    core::num v11 = let final core::String #t97 = "x" in let final core::num #t98 = super.{self::Base::[]}(#t97) in let final void #t99 = super.{self::Base::[]=}(#t97, #t98.{core::num::+}(1){(core::num) → core::num}) in #t98;
+  }
+}
+abstract class Test5b extends self::Base2<core::num, core::num> {
+  synthetic constructor •() → self::Test5b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v4 = let final core::String #t100 = "x" in let final core::num? #t101 = super.{self::Base2::[]}(#t100) in #t101 == null ?{core::num} let final core::int #t102 = self::getInt() in let final void #t103 = super.{self::Base2::[]=}(#t100, #t102) in #t102 : #t101{core::num};
+    core::num v5 = let final core::String #t104 = "x" in let final core::num? #t105 = super.{self::Base2::[]}(#t104) in #t105 == null ?{core::num} let final core::num #t106 = self::getNum() in let final void #t107 = super.{self::Base2::[]=}(#t104, #t106) in #t106 : #t105{core::num};
+    core::num v6 = let final core::String #t108 = "x" in let final core::num? #t109 = super.{self::Base2::[]}(#t108) in #t109 == null ?{core::num} let final core::double #t110 = self::getDouble() in let final void #t111 = super.{self::Base2::[]=}(#t108, #t110) in #t110 : #t109{core::num};
+  }
+}
+abstract class Test6a extends self::Base<core::num, core::double> {
+  synthetic constructor •() → self::Test6a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::double v3 = let final core::String #t112 = "x" in let final core::double #t113 = self::getDouble() in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
+    core::double v9 = let final core::String #t115 = "x" in let final core::double #t116 = super.{self::Base::[]}(#t115).{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t117 = super.{self::Base::[]=}(#t115, #t116) in #t116;
+    core::double v10 = let final core::String #t118 = "x" in let final core::double #t119 = super.{self::Base::[]}(#t118).{core::num::+}(1.0){(core::num) → core::double} in let final void #t120 = super.{self::Base::[]=}(#t118, #t119) in #t119;
+    core::num v11 = let final core::String #t121 = "x" in let final core::num #t122 = super.{self::Base::[]}(#t121) in let final void #t123 = super.{self::Base::[]=}(#t121, #t122.{core::num::+}(1.0){(core::num) → core::double}) in #t122;
+  }
+}
+abstract class Test6b extends self::Base2<core::num, core::double> {
+  synthetic constructor •() → self::Test6b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v6 = let final core::String #t124 = "x" in let final core::num? #t125 = super.{self::Base2::[]}(#t124) in #t125 == null ?{core::num} let final core::double #t126 = self::getDouble() in let final void #t127 = super.{self::Base2::[]=}(#t124, #t126) in #t126 : #t125{core::num};
+  }
+}
+abstract class Test7a extends self::Base<core::double, core::int> {
+  synthetic constructor •() → self::Test7a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t128 = "x" in let final core::int #t129 = self::getInt() in let final void #t130 = super.{self::Base::[]=}(#t128, #t129) in #t129;
+  }
+}
+abstract class Test7b extends self::Base2<core::double, core::int> {
+  synthetic constructor •() → self::Test7b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v4 = let final core::String #t131 = "x" in let final core::double? #t132 = super.{self::Base2::[]}(#t131) in #t132 == null ?{core::num} let final core::int #t133 = self::getInt() in let final void #t134 = super.{self::Base2::[]=}(#t131, #t133) in #t133 : #t132{core::double};
+  }
+}
+abstract class Test8a extends self::Base<core::double, core::num> {
+  synthetic constructor •() → self::Test8a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t135 = "x" in let final core::int #t136 = self::getInt() in let final void #t137 = super.{self::Base::[]=}(#t135, #t136) in #t136;
+    core::num v2 = let final core::String #t138 = "x" in let final core::num #t139 = self::getNum() in let final void #t140 = super.{self::Base::[]=}(#t138, #t139) in #t139;
+    core::double v3 = let final core::String #t141 = "x" in let final core::double #t142 = self::getDouble() in let final void #t143 = super.{self::Base::[]=}(#t141, #t142) in #t142;
+    core::double v7 = let final core::String #t144 = "x" in let final core::double #t145 = super.{self::Base::[]}(#t144).{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t146 = super.{self::Base::[]=}(#t144, #t145) in #t145;
+    core::double v8 = let final core::String #t147 = "x" in let final core::double #t148 = super.{self::Base::[]}(#t147).{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t149 = super.{self::Base::[]=}(#t147, #t148) in #t148;
+    core::double v9 = let final core::String #t150 = "x" in let final core::double #t151 = super.{self::Base::[]}(#t150).{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t152 = super.{self::Base::[]=}(#t150, #t151) in #t151;
+    core::double v10 = let final core::String #t153 = "x" in let final core::double #t154 = super.{self::Base::[]}(#t153).{core::double::+}(1){(core::num) → core::double} in let final void #t155 = super.{self::Base::[]=}(#t153, #t154) in #t154;
+    core::double v11 = let final core::String #t156 = "x" in let final core::double #t157 = super.{self::Base::[]}(#t156) in let final void #t158 = super.{self::Base::[]=}(#t156, #t157.{core::double::+}(1){(core::num) → core::double}) in #t157;
+  }
+}
+abstract class Test8b extends self::Base2<core::double, core::num> {
+  synthetic constructor •() → self::Test8b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v4 = let final core::String #t159 = "x" in let final core::double? #t160 = super.{self::Base2::[]}(#t159) in #t160 == null ?{core::num} let final core::int #t161 = self::getInt() in let final void #t162 = super.{self::Base2::[]=}(#t159, #t161) in #t161 : #t160{core::double};
+    core::num v5 = let final core::String #t163 = "x" in let final core::double? #t164 = super.{self::Base2::[]}(#t163) in #t164 == null ?{core::num} let final core::num #t165 = self::getNum() in let final void #t166 = super.{self::Base2::[]=}(#t163, #t165) in #t165 : #t164{core::double};
+    core::double v6 = let final core::String #t167 = "x" in let final core::double? #t168 = super.{self::Base2::[]}(#t167) in #t168 == null ?{core::double} let final core::double #t169 = self::getDouble() in let final void #t170 = super.{self::Base2::[]=}(#t167, #t169) in #t169 : #t168{core::double};
+  }
+}
+abstract class Test9a extends self::Base<core::double, core::double> {
+  synthetic constructor •() → self::Test9a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::double v3 = let final core::String #t171 = "x" in let final core::double #t172 = self::getDouble() in let final void #t173 = super.{self::Base::[]=}(#t171, #t172) in #t172;
+    core::double v8 = let final core::String #t174 = "x" in let final core::double #t175 = super.{self::Base::[]}(#t174).{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
+    core::double v9 = let final core::String #t177 = "x" in let final core::double #t178 = super.{self::Base::[]}(#t177).{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
+    core::double v10 = let final core::String #t180 = "x" in let final core::double #t181 = super.{self::Base::[]}(#t180).{core::double::+}(1){(core::num) → core::double} in let final void #t182 = super.{self::Base::[]=}(#t180, #t181) in #t181;
+    core::double v11 = let final core::String #t183 = "x" in let final core::double #t184 = super.{self::Base::[]}(#t183) in let final void #t185 = super.{self::Base::[]=}(#t183, #t184.{core::double::+}(1){(core::num) → core::double}) in #t184;
+  }
+}
+abstract class Test9b extends self::Base2<core::double, core::double> {
+  synthetic constructor •() → self::Test9b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::double v6 = let final core::String #t186 = "x" in let final core::double? #t187 = super.{self::Base2::[]}(#t186) in #t187 == null ?{core::double} let final core::double #t188 = self::getDouble() in let final void #t189 = super.{self::Base2::[]=}(#t186, #t188) in #t188 : #t187{core::double};
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.weak.outline.expect
new file mode 100644
index 0000000..b0f1f8a
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.weak.outline.expect
@@ -0,0 +1,140 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Base<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base<self::Base::T%, self::Base::U%>
+    ;
+  operator [](core::String s) → self::Base::T%
+    ;
+  operator []=(core::String s, covariant-by-class self::Base::U% v) → void
+    ;
+  abstract method getValue(core::String s) → self::Base::T%;
+  abstract method setValue(core::String s, covariant-by-class self::Base::U% v) → void;
+}
+abstract class Base2<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base2<self::Base2::T%, self::Base2::U%>
+    ;
+  operator [](core::String s) → self::Base2::T?
+    ;
+  operator []=(core::String s, covariant-by-class self::Base2::U? v) → void
+    ;
+  abstract method getValue(core::String s) → self::Base2::T?;
+  abstract method setValue(core::String s, covariant-by-class self::Base2::U? v) → void;
+}
+abstract class Test1a extends self::Base<core::int, core::int> {
+  synthetic constructor •() → self::Test1a
+    ;
+  method test() → void
+    ;
+}
+abstract class Test1b extends self::Base2<core::int, core::int> {
+  synthetic constructor •() → self::Test1b
+    ;
+  method test() → void
+    ;
+}
+abstract class Test2a extends self::Base<core::int, core::num> {
+  synthetic constructor •() → self::Test2a
+    ;
+  method test() → void
+    ;
+}
+abstract class Test2b extends self::Base2<core::int, core::num> {
+  synthetic constructor •() → self::Test2b
+    ;
+  method test() → void
+    ;
+}
+abstract class Test3a extends self::Base<core::int, core::double> {
+  synthetic constructor •() → self::Test3a
+    ;
+  method test() → void
+    ;
+}
+abstract class Test3b extends self::Base2<core::int, core::double> {
+  synthetic constructor •() → self::Test3b
+    ;
+  method test() → void
+    ;
+}
+abstract class Test4a extends self::Base<core::num, core::int> {
+  synthetic constructor •() → self::Test4a
+    ;
+  method test() → void
+    ;
+}
+abstract class Test4b extends self::Base2<core::num, core::int> {
+  synthetic constructor •() → self::Test4b
+    ;
+  method test() → void
+    ;
+}
+abstract class Test5a extends self::Base<core::num, core::num> {
+  synthetic constructor •() → self::Test5a
+    ;
+  method test() → void
+    ;
+}
+abstract class Test5b extends self::Base2<core::num, core::num> {
+  synthetic constructor •() → self::Test5b
+    ;
+  method test() → void
+    ;
+}
+abstract class Test6a extends self::Base<core::num, core::double> {
+  synthetic constructor •() → self::Test6a
+    ;
+  method test() → void
+    ;
+}
+abstract class Test6b extends self::Base2<core::num, core::double> {
+  synthetic constructor •() → self::Test6b
+    ;
+  method test() → void
+    ;
+}
+abstract class Test7a extends self::Base<core::double, core::int> {
+  synthetic constructor •() → self::Test7a
+    ;
+  method test() → void
+    ;
+}
+abstract class Test7b extends self::Base2<core::double, core::int> {
+  synthetic constructor •() → self::Test7b
+    ;
+  method test() → void
+    ;
+}
+abstract class Test8a extends self::Base<core::double, core::num> {
+  synthetic constructor •() → self::Test8a
+    ;
+  method test() → void
+    ;
+}
+abstract class Test8b extends self::Base2<core::double, core::num> {
+  synthetic constructor •() → self::Test8b
+    ;
+  method test() → void
+    ;
+}
+abstract class Test9a extends self::Base<core::double, core::double> {
+  synthetic constructor •() → self::Test9a
+    ;
+  method test() → void
+    ;
+}
+abstract class Test9b extends self::Base2<core::double, core::double> {
+  synthetic constructor •() → self::Test9b
+    ;
+  method test() → void
+    ;
+}
+static method getInt() → core::int
+  ;
+static method getNum() → core::num
+  ;
+static method getDouble() → core::double
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.weak.transformed.expect
new file mode 100644
index 0000000..27278ff
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards2.dart.weak.transformed.expect
@@ -0,0 +1,322 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Base<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base<self::Base::T%, self::Base::U%>
+    : super core::Object::•()
+    ;
+  operator [](core::String s) → self::Base::T%
+    return this.{self::Base::getValue}(s){(core::String) → self::Base::T%};
+  operator []=(core::String s, covariant-by-class self::Base::U% v) → void
+    return this.{self::Base::setValue}(s, v){(core::String, self::Base::U%) → void};
+  abstract method getValue(core::String s) → self::Base::T%;
+  abstract method setValue(core::String s, covariant-by-class self::Base::U% v) → void;
+}
+abstract class Base2<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base2<self::Base2::T%, self::Base2::U%>
+    : super core::Object::•()
+    ;
+  operator [](core::String s) → self::Base2::T?
+    return this.{self::Base2::getValue}(s){(core::String) → self::Base2::T?};
+  operator []=(core::String s, covariant-by-class self::Base2::U? v) → void
+    return this.{self::Base2::setValue}(s, v){(core::String, self::Base2::U?) → void};
+  abstract method getValue(core::String s) → self::Base2::T?;
+  abstract method setValue(core::String s, covariant-by-class self::Base2::U? v) → void;
+}
+abstract class Test1a extends self::Base<core::int, core::int> {
+  synthetic constructor •() → self::Test1a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t1 = "x" in let final core::int #t2 = self::getInt() in let final void #t3 = super.{self::Base::[]=}(#t1, #t2) in #t2;
+    core::int v7 = let final core::String #t4 = "x" in let final core::int #t5 = super.{self::Base::[]}(#t4).{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
+    core::int v10 = let final core::String #t7 = "x" in let final core::int #t8 = super.{self::Base::[]}(#t7).{core::num::+}(1){(core::num) → core::int} in let final void #t9 = super.{self::Base::[]=}(#t7, #t8) in #t8;
+    core::int v11 = let final core::String #t10 = "x" in let final core::int #t11 = super.{self::Base::[]}(#t10) in let final void #t12 = super.{self::Base::[]=}(#t10, #t11.{core::num::+}(1){(core::num) → core::int}) in #t11;
+  }
+}
+abstract class Test1b extends self::Base2<core::int, core::int> {
+  synthetic constructor •() → self::Test1b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::int v4 = let final core::String #t13 = "x" in let final core::int? #t14 = super.{self::Base2::[]}(#t13) in #t14 == null ?{core::int} let final core::int #t15 = self::getInt() in let final void #t16 = super.{self::Base2::[]=}(#t13, #t15) in #t15 : #t14{core::int};
+  }
+}
+abstract class Test2a extends self::Base<core::int, core::num> {
+  synthetic constructor •() → self::Test2a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t17 = "x" in let final core::int #t18 = self::getInt() in let final void #t19 = super.{self::Base::[]=}(#t17, #t18) in #t18;
+    core::num v2 = let final core::String #t20 = "x" in let final core::num #t21 = self::getNum() in let final void #t22 = super.{self::Base::[]=}(#t20, #t21) in #t21;
+    core::double v3 = let final core::String #t23 = "x" in let final core::double #t24 = self::getDouble() in let final void #t25 = super.{self::Base::[]=}(#t23, #t24) in #t24;
+    core::int v7 = let final core::String #t26 = "x" in let final core::int #t27 = super.{self::Base::[]}(#t26).{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t28 = super.{self::Base::[]=}(#t26, #t27) in #t27;
+    core::num v8 = let final core::String #t29 = "x" in let final core::num #t30 = super.{self::Base::[]}(#t29).{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t31 = super.{self::Base::[]=}(#t29, #t30) in #t30;
+    core::double v9 = let final core::String #t32 = "x" in let final core::double #t33 = super.{self::Base::[]}(#t32).{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t34 = super.{self::Base::[]=}(#t32, #t33) in #t33;
+    core::int v10 = let final core::String #t35 = "x" in let final core::int #t36 = super.{self::Base::[]}(#t35).{core::num::+}(1){(core::num) → core::int} in let final void #t37 = super.{self::Base::[]=}(#t35, #t36) in #t36;
+    core::int v11 = let final core::String #t38 = "x" in let final core::int #t39 = super.{self::Base::[]}(#t38) in let final void #t40 = super.{self::Base::[]=}(#t38, #t39.{core::num::+}(1){(core::num) → core::int}) in #t39;
+  }
+}
+abstract class Test2b extends self::Base2<core::int, core::num> {
+  synthetic constructor •() → self::Test2b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::int v4 = let final core::String #t41 = "x" in let final core::int? #t42 = super.{self::Base2::[]}(#t41) in #t42 == null ?{core::int} let final core::int #t43 = self::getInt() in let final void #t44 = super.{self::Base2::[]=}(#t41, #t43) in #t43 : #t42{core::int};
+    core::num v5 = let final core::String #t45 = "x" in let final core::int? #t46 = super.{self::Base2::[]}(#t45) in #t46 == null ?{core::num} let final core::num #t47 = self::getNum() in let final void #t48 = super.{self::Base2::[]=}(#t45, #t47) in #t47 : #t46{core::int};
+    core::num v6 = let final core::String #t49 = "x" in let final core::int? #t50 = super.{self::Base2::[]}(#t49) in #t50 == null ?{core::num} let final core::double #t51 = self::getDouble() in let final void #t52 = super.{self::Base2::[]=}(#t49, #t51) in #t51 : #t50{core::int};
+  }
+}
+abstract class Test3a extends self::Base<core::int, core::double> {
+  synthetic constructor •() → self::Test3a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::double v3 = let final core::String #t53 = "x" in let final core::double #t54 = self::getDouble() in let final void #t55 = super.{self::Base::[]=}(#t53, #t54) in #t54;
+    core::double v9 = let final core::String #t56 = "x" in let final core::double #t57 = super.{self::Base::[]}(#t56).{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t58 = super.{self::Base::[]=}(#t56, #t57) in #t57;
+    core::double v10 = let final core::String #t59 = "x" in let final core::double #t60 = super.{self::Base::[]}(#t59).{core::num::+}(1.0){(core::num) → core::double} in let final void #t61 = super.{self::Base::[]=}(#t59, #t60) in #t60;
+    core::int v11 = let final core::String #t62 = "x" in let final core::int #t63 = super.{self::Base::[]}(#t62) in let final void #t64 = super.{self::Base::[]=}(#t62, #t63.{core::num::+}(1.0){(core::num) → core::double}) in #t63;
+  }
+}
+abstract class Test3b extends self::Base2<core::int, core::double> {
+  synthetic constructor •() → self::Test3b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v6 = let final core::String #t65 = "x" in let final core::int? #t66 = super.{self::Base2::[]}(#t65) in #t66 == null ?{core::num} let final core::double #t67 = self::getDouble() in let final void #t68 = super.{self::Base2::[]=}(#t65, #t67) in #t67 : #t66{core::int};
+  }
+}
+abstract class Test4a extends self::Base<core::num, core::int> {
+  synthetic constructor •() → self::Test4a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t69 = "x" in let final core::int #t70 = self::getInt() in let final void #t71 = super.{self::Base::[]=}(#t69, #t70) in #t70;
+  }
+}
+abstract class Test4b extends self::Base2<core::num, core::int> {
+  synthetic constructor •() → self::Test4b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v4 = let final core::String #t72 = "x" in let final core::num? #t73 = super.{self::Base2::[]}(#t72) in #t73 == null ?{core::num} let final core::int #t74 = self::getInt() in let final void #t75 = super.{self::Base2::[]=}(#t72, #t74) in #t74 : #t73{core::num};
+  }
+}
+abstract class Test5a extends self::Base<core::num, core::num> {
+  synthetic constructor •() → self::Test5a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t76 = "x" in let final core::int #t77 = self::getInt() in let final void #t78 = super.{self::Base::[]=}(#t76, #t77) in #t77;
+    core::num v2 = let final core::String #t79 = "x" in let final core::num #t80 = self::getNum() in let final void #t81 = super.{self::Base::[]=}(#t79, #t80) in #t80;
+    core::double v3 = let final core::String #t82 = "x" in let final core::double #t83 = self::getDouble() in let final void #t84 = super.{self::Base::[]=}(#t82, #t83) in #t83;
+    core::num v7 = let final core::String #t85 = "x" in let final core::num #t86 = super.{self::Base::[]}(#t85).{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t87 = super.{self::Base::[]=}(#t85, #t86) in #t86;
+    core::num v8 = let final core::String #t88 = "x" in let final core::num #t89 = super.{self::Base::[]}(#t88).{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t90 = super.{self::Base::[]=}(#t88, #t89) in #t89;
+    core::double v9 = let final core::String #t91 = "x" in let final core::double #t92 = super.{self::Base::[]}(#t91).{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t93 = super.{self::Base::[]=}(#t91, #t92) in #t92;
+    core::num v10 = let final core::String #t94 = "x" in let final core::num #t95 = super.{self::Base::[]}(#t94).{core::num::+}(1){(core::num) → core::num} in let final void #t96 = super.{self::Base::[]=}(#t94, #t95) in #t95;
+    core::num v11 = let final core::String #t97 = "x" in let final core::num #t98 = super.{self::Base::[]}(#t97) in let final void #t99 = super.{self::Base::[]=}(#t97, #t98.{core::num::+}(1){(core::num) → core::num}) in #t98;
+  }
+}
+abstract class Test5b extends self::Base2<core::num, core::num> {
+  synthetic constructor •() → self::Test5b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v4 = let final core::String #t100 = "x" in let final core::num? #t101 = super.{self::Base2::[]}(#t100) in #t101 == null ?{core::num} let final core::int #t102 = self::getInt() in let final void #t103 = super.{self::Base2::[]=}(#t100, #t102) in #t102 : #t101{core::num};
+    core::num v5 = let final core::String #t104 = "x" in let final core::num? #t105 = super.{self::Base2::[]}(#t104) in #t105 == null ?{core::num} let final core::num #t106 = self::getNum() in let final void #t107 = super.{self::Base2::[]=}(#t104, #t106) in #t106 : #t105{core::num};
+    core::num v6 = let final core::String #t108 = "x" in let final core::num? #t109 = super.{self::Base2::[]}(#t108) in #t109 == null ?{core::num} let final core::double #t110 = self::getDouble() in let final void #t111 = super.{self::Base2::[]=}(#t108, #t110) in #t110 : #t109{core::num};
+  }
+}
+abstract class Test6a extends self::Base<core::num, core::double> {
+  synthetic constructor •() → self::Test6a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::double v3 = let final core::String #t112 = "x" in let final core::double #t113 = self::getDouble() in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
+    core::double v9 = let final core::String #t115 = "x" in let final core::double #t116 = super.{self::Base::[]}(#t115).{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t117 = super.{self::Base::[]=}(#t115, #t116) in #t116;
+    core::double v10 = let final core::String #t118 = "x" in let final core::double #t119 = super.{self::Base::[]}(#t118).{core::num::+}(1.0){(core::num) → core::double} in let final void #t120 = super.{self::Base::[]=}(#t118, #t119) in #t119;
+    core::num v11 = let final core::String #t121 = "x" in let final core::num #t122 = super.{self::Base::[]}(#t121) in let final void #t123 = super.{self::Base::[]=}(#t121, #t122.{core::num::+}(1.0){(core::num) → core::double}) in #t122;
+  }
+}
+abstract class Test6b extends self::Base2<core::num, core::double> {
+  synthetic constructor •() → self::Test6b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v6 = let final core::String #t124 = "x" in let final core::num? #t125 = super.{self::Base2::[]}(#t124) in #t125 == null ?{core::num} let final core::double #t126 = self::getDouble() in let final void #t127 = super.{self::Base2::[]=}(#t124, #t126) in #t126 : #t125{core::num};
+  }
+}
+abstract class Test7a extends self::Base<core::double, core::int> {
+  synthetic constructor •() → self::Test7a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t128 = "x" in let final core::int #t129 = self::getInt() in let final void #t130 = super.{self::Base::[]=}(#t128, #t129) in #t129;
+  }
+}
+abstract class Test7b extends self::Base2<core::double, core::int> {
+  synthetic constructor •() → self::Test7b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v4 = let final core::String #t131 = "x" in let final core::double? #t132 = super.{self::Base2::[]}(#t131) in #t132 == null ?{core::num} let final core::int #t133 = self::getInt() in let final void #t134 = super.{self::Base2::[]=}(#t131, #t133) in #t133 : #t132{core::double};
+  }
+}
+abstract class Test8a extends self::Base<core::double, core::num> {
+  synthetic constructor •() → self::Test8a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = let final core::String #t135 = "x" in let final core::int #t136 = self::getInt() in let final void #t137 = super.{self::Base::[]=}(#t135, #t136) in #t136;
+    core::num v2 = let final core::String #t138 = "x" in let final core::num #t139 = self::getNum() in let final void #t140 = super.{self::Base::[]=}(#t138, #t139) in #t139;
+    core::double v3 = let final core::String #t141 = "x" in let final core::double #t142 = self::getDouble() in let final void #t143 = super.{self::Base::[]=}(#t141, #t142) in #t142;
+    core::double v7 = let final core::String #t144 = "x" in let final core::double #t145 = super.{self::Base::[]}(#t144).{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t146 = super.{self::Base::[]=}(#t144, #t145) in #t145;
+    core::double v8 = let final core::String #t147 = "x" in let final core::double #t148 = super.{self::Base::[]}(#t147).{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t149 = super.{self::Base::[]=}(#t147, #t148) in #t148;
+    core::double v9 = let final core::String #t150 = "x" in let final core::double #t151 = super.{self::Base::[]}(#t150).{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t152 = super.{self::Base::[]=}(#t150, #t151) in #t151;
+    core::double v10 = let final core::String #t153 = "x" in let final core::double #t154 = super.{self::Base::[]}(#t153).{core::double::+}(1){(core::num) → core::double} in let final void #t155 = super.{self::Base::[]=}(#t153, #t154) in #t154;
+    core::double v11 = let final core::String #t156 = "x" in let final core::double #t157 = super.{self::Base::[]}(#t156) in let final void #t158 = super.{self::Base::[]=}(#t156, #t157.{core::double::+}(1){(core::num) → core::double}) in #t157;
+  }
+}
+abstract class Test8b extends self::Base2<core::double, core::num> {
+  synthetic constructor •() → self::Test8b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::num v4 = let final core::String #t159 = "x" in let final core::double? #t160 = super.{self::Base2::[]}(#t159) in #t160 == null ?{core::num} let final core::int #t161 = self::getInt() in let final void #t162 = super.{self::Base2::[]=}(#t159, #t161) in #t161 : #t160{core::double};
+    core::num v5 = let final core::String #t163 = "x" in let final core::double? #t164 = super.{self::Base2::[]}(#t163) in #t164 == null ?{core::num} let final core::num #t165 = self::getNum() in let final void #t166 = super.{self::Base2::[]=}(#t163, #t165) in #t165 : #t164{core::double};
+    core::double v6 = let final core::String #t167 = "x" in let final core::double? #t168 = super.{self::Base2::[]}(#t167) in #t168 == null ?{core::double} let final core::double #t169 = self::getDouble() in let final void #t170 = super.{self::Base2::[]=}(#t167, #t169) in #t169 : #t168{core::double};
+  }
+}
+abstract class Test9a extends self::Base<core::double, core::double> {
+  synthetic constructor •() → self::Test9a
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::double v3 = let final core::String #t171 = "x" in let final core::double #t172 = self::getDouble() in let final void #t173 = super.{self::Base::[]=}(#t171, #t172) in #t172;
+    core::double v8 = let final core::String #t174 = "x" in let final core::double #t175 = super.{self::Base::[]}(#t174).{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
+    core::double v9 = let final core::String #t177 = "x" in let final core::double #t178 = super.{self::Base::[]}(#t177).{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
+    core::double v10 = let final core::String #t180 = "x" in let final core::double #t181 = super.{self::Base::[]}(#t180).{core::double::+}(1){(core::num) → core::double} in let final void #t182 = super.{self::Base::[]=}(#t180, #t181) in #t181;
+    core::double v11 = let final core::String #t183 = "x" in let final core::double #t184 = super.{self::Base::[]}(#t183) in let final void #t185 = super.{self::Base::[]=}(#t183, #t184.{core::double::+}(1){(core::num) → core::double}) in #t184;
+  }
+}
+abstract class Test9b extends self::Base2<core::double, core::double> {
+  synthetic constructor •() → self::Test9b
+    : super self::Base2::•()
+    ;
+  method test() → void {
+    core::double v6 = let final core::String #t186 = "x" in let final core::double? #t187 = super.{self::Base2::[]}(#t186) in #t187 == null ?{core::double} let final core::double #t188 = self::getDouble() in let final void #t189 = super.{self::Base2::[]=}(#t186, #t188) in #t188 : #t187{core::double};
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:31:56 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:34:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:34:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:37:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:37:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:40:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:40:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:47:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:47:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:53:56 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:55:56 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:57:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:60:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:60:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:63:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:63:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:66:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:66:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:69:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:69:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:72:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:72:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:79:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:79:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:82:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:82:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:85:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:85:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:91:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:94:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:94:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:97:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:97:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:100:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:100:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:107:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:107:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:113:56 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:120:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:120:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:126:56 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:128:56 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:130:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:133:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:133:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:136:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:136:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:139:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:139:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:142:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:142:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:145:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:145:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:152:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:152:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:155:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:155:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:158:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:158:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:164:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:167:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:167:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:170:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:170:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:173:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:173:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:180:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:180:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:186:56 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:193:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:193:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:199:56 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:201:56 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:203:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:206:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:206:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:209:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:209:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:212:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:212:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:215:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:215:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:218:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:218:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:225:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:225:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:228:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:228:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:231:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:231:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:237:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:240:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:240:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:243:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:243:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:246:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:246:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:249:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:249:10 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:256:59 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:256:59 -> StringConstant("x")
+Extra constant evaluation: evaluated: 653, effectively constant: 101
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart
index e0b9ec5..69e955d0 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -26,55 +28,55 @@
 
   void test() {
     this /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
+        /*@typeArgs=Index**/ f()] = /*@typeArgs=B**/ f();
 
     this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-         ??= /*@ typeArgs=B* */ f();
+            /*@typeArgs=Index**/ f()]
+         ??= /*@typeArgs=B**/ f();
 
     this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+            /*@typeArgs=Index**/ f()]
+        /*@target=B.+*/ += /*@typeArgs=C**/ f();
 
     this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+            /*@typeArgs=Index**/ f()]
+        /*@target=B.**/ *= /*@typeArgs=B**/ f();
 
     this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+            /*@typeArgs=Index**/ f()]
+        /*@target=B.&*/ &= /*@typeArgs=A**/ f();
 
     /*@target=B.-*/ --this /*@target=Test.[]*/ /*@target=Test.[]=*/
-        [/*@ typeArgs=Index* */ f()];
+        [/*@typeArgs=Index**/ f()];
 
     this /*@target=Test.[]*/ /*@target=Test.[]=*/
-        [/*@ typeArgs=Index* */ f()] /*@target=B.-*/ --;
+        [/*@typeArgs=Index**/ f()] /*@target=B.-*/ --;
 
-    var /*@ type=B* */ v1 = this /*@target=Test.[]=*/ [
-        /*@ typeArgs=Index* */ f()] = /*@ typeArgs=B* */ f();
+    var /*@type=B**/ v1 = this /*@target=Test.[]=*/ [
+        /*@typeArgs=Index**/ f()] = /*@typeArgs=B**/ f();
 
-    var /*@ type=B* */ v2 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-         ??= /*@ typeArgs=B* */ f();
+    var /*@type=B**/ v2 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index**/ f()]
+         ??= /*@typeArgs=B**/ f();
 
-    var /*@ type=A* */ v3 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    var /*@type=A**/ v3 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index**/ f()]
+        /*@target=B.+*/ += /*@typeArgs=C**/ f();
 
-    var /*@ type=B* */ v4 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    var /*@type=B**/ v4 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index**/ f()]
+        /*@target=B.**/ *= /*@typeArgs=B**/ f();
 
-    var /*@ type=C* */ v5 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
-            /*@ typeArgs=Index* */ f()]
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    var /*@type=C**/ v5 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+            /*@typeArgs=Index**/ f()]
+        /*@target=B.&*/ &= /*@typeArgs=A**/ f();
 
-    var /*@ type=B* */ v6 =
+    var /*@type=B**/ v6 =
         /*@target=B.-*/ --this /*@target=Test.[]*/ /*@target=Test.[]=*/
-            [/*@ typeArgs=Index* */ f()];
+            [/*@typeArgs=Index**/ f()];
 
-    var /*@ type=B* */ v7 = this /*@target=Test.[]*/ /*@target=Test.[]=*/
-        [/*@ typeArgs=Index* */ f()] /*@target=B.-*/ --;
+    var /*@type=B**/ v7 = this /*@target=Test.[]*/ /*@target=Test.[]=*/
+        [/*@typeArgs=Index**/ f()] /*@target=B.-*/ --;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart
new file mode 100644
index 0000000..c45071b
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart
@@ -0,0 +1,79 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class Index {}
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Test {
+  B operator [](Index i) => throw '';
+  void operator []=(Index i, B v) {}
+
+  void test() {
+    this /*@target=Test.[]=*/ [/*@typeArgs=Index*/ f()] = /*@typeArgs=B*/ f();
+
+    this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    /*@target=B.-*/ --this /*@target=Test.[]*/ /*@target=Test.[]=*/
+        [/*@typeArgs=Index*/ f()];
+
+    this /*@target=Test.[]*/ /*@target=Test.[]=*/
+        [/*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
+
+    var /*@type=B*/ v1 = this /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] = /*@typeArgs=B*/ f();
+
+    var /*@type=B*/ v3 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    var /*@type=B*/ v4 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    var /*@type=C*/ v5 = this /*@target=Test.[]*/ /*@target=Test.[]=*/ [
+        /*@typeArgs=Index*/ f()] /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    var /*@type=B*/ v6 =
+        /*@target=B.-*/ --this /*@target=Test.[]*/ /*@target=Test.[]=*/
+            [/*@typeArgs=Index*/ f()];
+
+    var /*@type=B*/ v7 = this /*@target=Test.[]*/ /*@target=Test.[]=*/
+        [/*@typeArgs=Index*/ f()] /*@target=B.-*/ --;
+  }
+}
+
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+
+  void test() {
+    this /*@target=Test2.[]*/ /*@target=Test2.[]=*/ [
+        /*@typeArgs=Index*/ f()] ??= /*@typeArgs=B?*/ f();
+
+    var /*@type=B?*/ v2 = this /*@target=Test2.[]*/ /*@target=Test2.[]=*/ [
+        /*@typeArgs=Index*/ f()] ??= /*@typeArgs=B?*/ f();
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.textual_outline.expect
new file mode 100644
index 0000000..52bbd2c
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.textual_outline.expect
@@ -0,0 +1,30 @@
+library test;
+
+class Index {}
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Test {
+  B operator [](Index i) => throw '';
+  void operator []=(Index i, B v) {}
+  void test() {}
+}
+
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3c0c624
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.textual_outline_modelled.expect
@@ -0,0 +1,30 @@
+library test;
+
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+class Index {}
+
+class Test {
+  B operator [](Index i) => throw '';
+  void operator []=(Index i, B v) {}
+  void test() {}
+}
+
+class Test2 {
+  B? operator [](Index i) => throw '';
+  void operator []=(Index i, B? v) {}
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.weak.expect
new file mode 100644
index 0000000..cb7ea47
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.weak.expect
@@ -0,0 +1,69 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
+  method test() → void {
+    this.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
+    let final self::Index #t1 = self::f<self::Index>() in this.{self::Test::[]=}(#t1, this.{self::Test::[]}(#t1){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
+    let final self::Index #t2 = self::f<self::Index>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
+    let final self::Index #t3 = self::f<self::Index>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
+    let final self::Index #t4 = self::f<self::Index>() in let final self::B #t5 = this.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t6 = this.{self::Test::[]=}(#t4, #t5){(self::Index, self::B) → void} in #t5;
+    let final self::Index #t7 = self::f<self::Index>() in this.{self::Test::[]=}(#t7, this.{self::Test::[]}(#t7){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
+    self::B v1 = let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = self::f<self::B>() in let final void #t10 = this.{self::Test::[]=}(#t8, #t9){(self::Index, self::B) → void} in #t9;
+    self::B v3 = let final self::Index #t11 = self::f<self::Index>() in let final self::B #t12 = this.{self::Test::[]}(#t11){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t13 = this.{self::Test::[]=}(#t11, #t12){(self::Index, self::B) → void} in #t12;
+    self::B v4 = let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = this.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t16 = this.{self::Test::[]=}(#t14, #t15){(self::Index, self::B) → void} in #t15;
+    self::C v5 = let final self::Index #t17 = self::f<self::Index>() in let final self::C #t18 = this.{self::Test::[]}(#t17){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t19 = this.{self::Test::[]=}(#t17, #t18){(self::Index, self::B) → void} in #t18;
+    self::B v6 = let final self::Index #t20 = self::f<self::Index>() in let final self::B #t21 = this.{self::Test::[]}(#t20){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t22 = this.{self::Test::[]=}(#t20, #t21){(self::Index, self::B) → void} in #t21;
+    self::B v7 = let final self::Index #t23 = self::f<self::Index>() in let final self::B #t24 = this.{self::Test::[]}(#t23){(self::Index) → self::B} in let final void #t25 = this.{self::Test::[]=}(#t23, #t24.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t24;
+  }
+}
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+  method test() → void {
+    let final self::Index #t26 = self::f<self::Index>() in this.{self::Test2::[]}(#t26){(self::Index) → self::B?} == null ?{self::B?} this.{self::Test2::[]=}(#t26, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
+    self::B? v2 = let final self::Index #t27 = self::f<self::Index>() in let final self::B? #t28 = this.{self::Test2::[]}(#t27){(self::Index) → self::B?} in #t28 == null ?{self::B?} let final self::B? #t29 = self::f<self::B?>() in let final void #t30 = this.{self::Test2::[]=}(#t27, #t29){(self::Index, self::B?) → void} in #t29 : #t28{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.weak.modular.expect
new file mode 100644
index 0000000..cb7ea47
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
+  method test() → void {
+    this.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
+    let final self::Index #t1 = self::f<self::Index>() in this.{self::Test::[]=}(#t1, this.{self::Test::[]}(#t1){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
+    let final self::Index #t2 = self::f<self::Index>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
+    let final self::Index #t3 = self::f<self::Index>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
+    let final self::Index #t4 = self::f<self::Index>() in let final self::B #t5 = this.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t6 = this.{self::Test::[]=}(#t4, #t5){(self::Index, self::B) → void} in #t5;
+    let final self::Index #t7 = self::f<self::Index>() in this.{self::Test::[]=}(#t7, this.{self::Test::[]}(#t7){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
+    self::B v1 = let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = self::f<self::B>() in let final void #t10 = this.{self::Test::[]=}(#t8, #t9){(self::Index, self::B) → void} in #t9;
+    self::B v3 = let final self::Index #t11 = self::f<self::Index>() in let final self::B #t12 = this.{self::Test::[]}(#t11){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t13 = this.{self::Test::[]=}(#t11, #t12){(self::Index, self::B) → void} in #t12;
+    self::B v4 = let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = this.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t16 = this.{self::Test::[]=}(#t14, #t15){(self::Index, self::B) → void} in #t15;
+    self::C v5 = let final self::Index #t17 = self::f<self::Index>() in let final self::C #t18 = this.{self::Test::[]}(#t17){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t19 = this.{self::Test::[]=}(#t17, #t18){(self::Index, self::B) → void} in #t18;
+    self::B v6 = let final self::Index #t20 = self::f<self::Index>() in let final self::B #t21 = this.{self::Test::[]}(#t20){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t22 = this.{self::Test::[]=}(#t20, #t21){(self::Index, self::B) → void} in #t21;
+    self::B v7 = let final self::Index #t23 = self::f<self::Index>() in let final self::B #t24 = this.{self::Test::[]}(#t23){(self::Index) → self::B} in let final void #t25 = this.{self::Test::[]=}(#t23, #t24.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t24;
+  }
+}
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+  method test() → void {
+    let final self::Index #t26 = self::f<self::Index>() in this.{self::Test2::[]}(#t26){(self::Index) → self::B?} == null ?{self::B?} this.{self::Test2::[]=}(#t26, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
+    self::B? v2 = let final self::Index #t27 = self::f<self::Index>() in let final self::B? #t28 = this.{self::Test2::[]}(#t27){(self::Index) → self::B?} in #t28 == null ?{self::B?} let final self::B? #t29 = self::f<self::B?>() in let final void #t30 = this.{self::Test2::[]=}(#t27, #t29){(self::Index, self::B?) → void} in #t29 : #t28{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.weak.outline.expect
new file mode 100644
index 0000000..03e4c14
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.weak.outline.expect
@@ -0,0 +1,52 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test
+    ;
+  operator [](self::Index i) → self::B
+    ;
+  operator []=(self::Index i, self::B v) → void
+    ;
+  method test() → void
+    ;
+}
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    ;
+  operator [](self::Index i) → self::B?
+    ;
+  operator []=(self::Index i, self::B? v) → void
+    ;
+  method test() → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.weak.transformed.expect
new file mode 100644
index 0000000..cb7ea47
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this2.dart.weak.transformed.expect
@@ -0,0 +1,69 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B
+    return throw "";
+  operator []=(self::Index i, self::B v) → void {}
+  method test() → void {
+    this.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
+    let final self::Index #t1 = self::f<self::Index>() in this.{self::Test::[]=}(#t1, this.{self::Test::[]}(#t1){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
+    let final self::Index #t2 = self::f<self::Index>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
+    let final self::Index #t3 = self::f<self::Index>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
+    let final self::Index #t4 = self::f<self::Index>() in let final self::B #t5 = this.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t6 = this.{self::Test::[]=}(#t4, #t5){(self::Index, self::B) → void} in #t5;
+    let final self::Index #t7 = self::f<self::Index>() in this.{self::Test::[]=}(#t7, this.{self::Test::[]}(#t7){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
+    self::B v1 = let final self::Index #t8 = self::f<self::Index>() in let final self::B #t9 = self::f<self::B>() in let final void #t10 = this.{self::Test::[]=}(#t8, #t9){(self::Index, self::B) → void} in #t9;
+    self::B v3 = let final self::Index #t11 = self::f<self::Index>() in let final self::B #t12 = this.{self::Test::[]}(#t11){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t13 = this.{self::Test::[]=}(#t11, #t12){(self::Index, self::B) → void} in #t12;
+    self::B v4 = let final self::Index #t14 = self::f<self::Index>() in let final self::B #t15 = this.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t16 = this.{self::Test::[]=}(#t14, #t15){(self::Index, self::B) → void} in #t15;
+    self::C v5 = let final self::Index #t17 = self::f<self::Index>() in let final self::C #t18 = this.{self::Test::[]}(#t17){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t19 = this.{self::Test::[]=}(#t17, #t18){(self::Index, self::B) → void} in #t18;
+    self::B v6 = let final self::Index #t20 = self::f<self::Index>() in let final self::B #t21 = this.{self::Test::[]}(#t20){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t22 = this.{self::Test::[]=}(#t20, #t21){(self::Index, self::B) → void} in #t21;
+    self::B v7 = let final self::Index #t23 = self::f<self::Index>() in let final self::B #t24 = this.{self::Test::[]}(#t23){(self::Index) → self::B} in let final void #t25 = this.{self::Test::[]=}(#t23, #t24.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t24;
+  }
+}
+class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  operator [](self::Index i) → self::B?
+    return throw "";
+  operator []=(self::Index i, self::B? v) → void {}
+  method test() → void {
+    let final self::Index #t26 = self::f<self::Index>() in this.{self::Test2::[]}(#t26){(self::Index) → self::B?} == null ?{self::B?} this.{self::Test2::[]=}(#t26, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
+    self::B? v2 = let final self::Index #t27 = self::f<self::Index>() in let final self::B? #t28 = this.{self::Test2::[]}(#t27){(self::Index) → self::B?} in #t28 == null ?{self::B?} let final self::B? #t29 = self::f<self::B?>() in let final void #t30 = this.{self::Test2::[]=}(#t27, #t29){(self::Index, self::B?) → void} in #t29 : #t28{self::B};
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart
index f6d9aab..129dcb0 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -14,30 +16,30 @@
   void operator []=(String s, int v);
 
   void test() {
-    var /*@ type=int* */ v1 = this /*@target=Test1.[]=*/ ['x'] = getInt();
+    var /*@type=int**/ v1 = this /*@target=Test1.[]=*/ ['x'] = getInt();
 
-    var /*@ type=num* */ v2 = this /*@target=Test1.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = this /*@target=Test1.[]=*/ ['x'] = getNum();
 
-    var /*@ type=int* */ v4 = this
+    var /*@type=int**/ v4 = this
             /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
          ??= getInt();
 
-    var /*@ type=num* */ v5 = this
+    var /*@type=num**/ v5 = this
             /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
          ??= getNum();
 
-    var /*@ type=int* */ v7 = this
+    var /*@type=int**/ v7 = this
             /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = this
+    var /*@type=num**/ v8 = this
             /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++this
         /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x'];
 
-    var /*@ type=int* */ v11 = this
+    var /*@type=int**/ v11 = this
             /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
         /*@target=num.+*/ ++;
   }
@@ -48,40 +50,40 @@
   void operator []=(String s, num v);
 
   void test() {
-    var /*@ type=int* */ v1 = this /*@target=Test2.[]=*/ ['x'] = getInt();
+    var /*@type=int**/ v1 = this /*@target=Test2.[]=*/ ['x'] = getInt();
 
-    var /*@ type=num* */ v2 = this /*@target=Test2.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = this /*@target=Test2.[]=*/ ['x'] = getNum();
 
-    var /*@ type=double* */ v3 = this /*@target=Test2.[]=*/ ['x'] = getDouble();
+    var /*@type=double**/ v3 = this /*@target=Test2.[]=*/ ['x'] = getDouble();
 
-    var /*@ type=int* */ v4 = this
+    var /*@type=int**/ v4 = this
             /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
          ??= getInt();
 
-    var /*@ type=num* */ v5 = this
+    var /*@type=num**/ v5 = this
             /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
          ??= getNum();
 
-    var /*@ type=num* */ v6 = this
+    var /*@type=num**/ v6 = this
             /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
          ??= getDouble();
 
-    var /*@ type=int* */ v7 = this
+    var /*@type=int**/ v7 = this
             /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = this
+    var /*@type=num**/ v8 = this
             /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=double* */ v9 = this
+    var /*@type=double**/ v9 = this
             /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
         /*@target=num.+*/ += getDouble();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++this
         /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'];
 
-    var /*@ type=int* */ v11 = this
+    var /*@type=int**/ v11 = this
             /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
         /*@target=num.+*/ ++;
   }
@@ -92,34 +94,34 @@
   void operator []=(String s, double v);
 
   void test() {
-    var /*@ type=num* */ v2 = this /*@target=Test3.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = this /*@target=Test3.[]=*/ ['x'] = getNum();
 
-    var /*@ type=double* */ v3 = this /*@target=Test3.[]=*/ ['x'] = getDouble();
+    var /*@type=double**/ v3 = this /*@target=Test3.[]=*/ ['x'] = getDouble();
 
-    var /*@ type=num* */ v5 = this
+    var /*@type=num**/ v5 = this
             /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
          ??= getNum();
 
-    var /*@ type=num* */ v6 = this
+    var /*@type=num**/ v6 = this
             /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
          ??= getDouble();
 
-    var /*@ type=int* */ v7 = this
+    var /*@type=int**/ v7 = this
             /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = this
+    var /*@type=num**/ v8 = this
             /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=double* */ v9 = this
+    var /*@type=double**/ v9 = this
             /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
         /*@target=num.+*/ += getDouble();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++this
         /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x'];
 
-    var /*@ type=int* */ v11 = this
+    var /*@type=int**/ v11 = this
             /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
         /*@target=num.+*/ ++;
   }
@@ -130,30 +132,30 @@
   void operator []=(String s, int v);
 
   void test() {
-    var /*@ type=int* */ v1 = this /*@target=Test4.[]=*/ ['x'] = getInt();
+    var /*@type=int**/ v1 = this /*@target=Test4.[]=*/ ['x'] = getInt();
 
-    var /*@ type=num* */ v2 = this /*@target=Test4.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = this /*@target=Test4.[]=*/ ['x'] = getNum();
 
-    var /*@ type=num* */ v4 = this
+    var /*@type=num**/ v4 = this
             /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
          ??= getInt();
 
-    var /*@ type=num* */ v5 = this
+    var /*@type=num**/ v5 = this
             /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
          ??= getNum();
 
-    var /*@ type=num* */ v7 = this
+    var /*@type=num**/ v7 = this
             /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = this
+    var /*@type=num**/ v8 = this
             /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++this
+    var /*@type=num**/ v10 = /*@target=num.+*/ ++this
         /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x'];
 
-    var /*@ type=num* */ v11 = this
+    var /*@type=num**/ v11 = this
             /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
         /*@target=num.+*/ ++;
   }
@@ -164,40 +166,40 @@
   void operator []=(String s, num v);
 
   void test() {
-    var /*@ type=int* */ v1 = this /*@target=Test5.[]=*/ ['x'] = getInt();
+    var /*@type=int**/ v1 = this /*@target=Test5.[]=*/ ['x'] = getInt();
 
-    var /*@ type=num* */ v2 = this /*@target=Test5.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = this /*@target=Test5.[]=*/ ['x'] = getNum();
 
-    var /*@ type=double* */ v3 = this /*@target=Test5.[]=*/ ['x'] = getDouble();
+    var /*@type=double**/ v3 = this /*@target=Test5.[]=*/ ['x'] = getDouble();
 
-    var /*@ type=num* */ v4 = this
+    var /*@type=num**/ v4 = this
             /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
          ??= getInt();
 
-    var /*@ type=num* */ v5 = this
+    var /*@type=num**/ v5 = this
             /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
          ??= getNum();
 
-    var /*@ type=num* */ v6 = this
+    var /*@type=num**/ v6 = this
             /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
          ??= getDouble();
 
-    var /*@ type=num* */ v7 = this
+    var /*@type=num**/ v7 = this
             /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = this
+    var /*@type=num**/ v8 = this
             /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v9 = this
+    var /*@type=num**/ v9 = this
             /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
         /*@target=num.+*/ += getDouble();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++this
+    var /*@type=num**/ v10 = /*@target=num.+*/ ++this
         /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x'];
 
-    var /*@ type=num* */ v11 = this
+    var /*@type=num**/ v11 = this
             /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
         /*@target=num.+*/ ++;
   }
@@ -208,34 +210,34 @@
   void operator []=(String s, double v);
 
   void test() {
-    var /*@ type=num* */ v2 = this /*@target=Test6.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = this /*@target=Test6.[]=*/ ['x'] = getNum();
 
-    var /*@ type=double* */ v3 = this /*@target=Test6.[]=*/ ['x'] = getDouble();
+    var /*@type=double**/ v3 = this /*@target=Test6.[]=*/ ['x'] = getDouble();
 
-    var /*@ type=num* */ v5 = this
+    var /*@type=num**/ v5 = this
             /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
          ??= getNum();
 
-    var /*@ type=num* */ v6 = this
+    var /*@type=num**/ v6 = this
             /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
          ??= getDouble();
 
-    var /*@ type=num* */ v7 = this
+    var /*@type=num**/ v7 = this
             /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = this
+    var /*@type=num**/ v8 = this
             /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v9 = this
+    var /*@type=num**/ v9 = this
             /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
         /*@target=num.+*/ += getDouble();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++this
+    var /*@type=num**/ v10 = /*@target=num.+*/ ++this
         /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x'];
 
-    var /*@ type=num* */ v11 = this
+    var /*@type=num**/ v11 = this
             /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
         /*@target=num.+*/ ++;
   }
@@ -246,31 +248,31 @@
   void operator []=(String s, int v);
 
   void test() {
-    var /*@ type=int* */ v1 = this /*@target=Test7.[]=*/ ['x'] = getInt();
+    var /*@type=int**/ v1 = this /*@target=Test7.[]=*/ ['x'] = getInt();
 
-    var /*@ type=num* */ v2 = this
+    var /*@type=num**/ v2 = this
         /*@target=Test7.[]=*/ ['x'] = getNum();
 
-    var /*@ type=num* */ v4 = this
+    var /*@type=num**/ v4 = this
             /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
          ??= getInt();
 
-    var /*@ type=num* */ v5 = this
+    var /*@type=num**/ v5 = this
             /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
          ??= getNum();
 
-    var /*@ type=double* */ v7 = this
+    var /*@type=double**/ v7 = this
             /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
         /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 = this
+    var /*@type=double**/ v8 = this
             /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
         /*@target=double.+*/ += getNum();
 
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
+    var /*@type=double**/ v10 = /*@target=double.+*/ ++this
         /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x'];
 
-    var /*@ type=double* */ v11 = this
+    var /*@type=double**/ v11 = this
             /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
         /*@target=double.+*/ ++;
   }
@@ -281,42 +283,42 @@
   void operator []=(String s, num v);
 
   void test() {
-    var /*@ type=int* */ v1 = this /*@target=Test8.[]=*/ ['x'] = getInt();
+    var /*@type=int**/ v1 = this /*@target=Test8.[]=*/ ['x'] = getInt();
 
-    var /*@ type=num* */ v2 = this
+    var /*@type=num**/ v2 = this
         /*@target=Test8.[]=*/ ['x'] = getNum();
 
-    var /*@ type=double* */ v3 = this
+    var /*@type=double**/ v3 = this
         /*@target=Test8.[]=*/ ['x'] = getDouble();
 
-    var /*@ type=num* */ v4 = this
+    var /*@type=num**/ v4 = this
             /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
          ??= getInt();
 
-    var /*@ type=num* */ v5 = this
+    var /*@type=num**/ v5 = this
             /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
          ??= getNum();
 
-    var /*@ type=double* */ v6 = this
+    var /*@type=double**/ v6 = this
             /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
          ??= getDouble();
 
-    var /*@ type=double* */ v7 = this
+    var /*@type=double**/ v7 = this
             /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
         /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 = this
+    var /*@type=double**/ v8 = this
             /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
         /*@target=double.+*/ += getNum();
 
-    var /*@ type=double* */ v9 = this
+    var /*@type=double**/ v9 = this
             /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
         /*@target=double.+*/ += getDouble();
 
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
+    var /*@type=double**/ v10 = /*@target=double.+*/ ++this
         /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x'];
 
-    var /*@ type=double* */ v11 = this
+    var /*@type=double**/ v11 = this
         /*@target=Test8.[]*/ /*@target=Test8.[]=*/ [
         'x'] /*@target=double.+*/ ++;
   }
@@ -327,35 +329,35 @@
   void operator []=(String s, double v);
 
   void test() {
-    var /*@ type=num* */ v2 = this /*@target=Test9.[]=*/ ['x'] = getNum();
+    var /*@type=num**/ v2 = this /*@target=Test9.[]=*/ ['x'] = getNum();
 
-    var /*@ type=double* */ v3 = this
+    var /*@type=double**/ v3 = this
         /*@target=Test9.[]=*/ ['x'] = getDouble();
 
-    var /*@ type=num* */ v5 = this
+    var /*@type=num**/ v5 = this
             /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
          ??= getNum();
 
-    var /*@ type=double* */ v6 = this
+    var /*@type=double**/ v6 = this
             /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
          ??= getDouble();
 
-    var /*@ type=double* */ v7 = this
+    var /*@type=double**/ v7 = this
             /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
         /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 = this
+    var /*@type=double**/ v8 = this
             /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
         /*@target=double.+*/ += getNum();
 
-    var /*@ type=double* */ v9 = this
+    var /*@type=double**/ v9 = this
             /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
         /*@target=double.+*/ += getDouble();
 
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
+    var /*@type=double**/ v10 = /*@target=double.+*/ ++this
         /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x'];
 
-    var /*@ type=double* */ v11 = this
+    var /*@type=double**/ v11 = this
             /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
         /*@target=double.+*/ ++;
   }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.expect
index 99a0822..b06b8ef 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.expect
@@ -2,31 +2,31 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:109:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:111:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //         /*@target=num.+*/ += getInt();
 //                           ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:119:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
-//     var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
-//                                                  ^
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:121:48: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//     var /*@type=int**/ v10 = /*@target=num.+*/ ++this
+//                                                ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:124:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //         /*@target=num.+*/ ++;
 //                           ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:264:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:266:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //         /*@target=double.+*/ += getInt();
 //                              ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:268:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //         /*@target=double.+*/ += getNum();
 //                              ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-//     var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
-//                                                        ^
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:272:54: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//     var /*@type=double**/ v10 = /*@target=double.+*/ ++this
+//                                                      ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:275:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:277:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //         /*@target=double.+*/ ++;
 //                              ^
 //
@@ -101,15 +101,15 @@
     core::double* v3 = let final core::String* #t66 = "x" in let final core::double* #t67 = self::getDouble() in let final void #t68 = this.{self::Test3::[]=}(#t66, #t67){(core::String*, core::double*) →* void} in #t67;
     core::num* v5 = let final core::String* #t69 = "x" in let final core::int* #t70 = this.{self::Test3::[]}(#t69){(core::String*) →* core::int*} in #t70 == null ?{core::num*} let final core::num* #t71 = self::getNum() as{TypeError} core::double* in let final void #t72 = this.{self::Test3::[]=}(#t69, #t71){(core::String*, core::double*) →* void} in #t71 : #t70;
     core::num* v6 = let final core::String* #t73 = "x" in let final core::int* #t74 = this.{self::Test3::[]}(#t73){(core::String*) →* core::int*} in #t74 == null ?{core::num*} let final core::double* #t75 = self::getDouble() in let final void #t76 = this.{self::Test3::[]=}(#t73, #t75){(core::String*, core::double*) →* void} in #t75 : #t74;
-    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:109:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:111:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
         /*@target=num.+*/ += getInt();
                           ^" in this.{self::Test3::[]}(#t77){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t79 = this.{self::Test3::[]=}(#t77, #t78){(core::String*, core::double*) →* void} in #t78;
     core::num* v8 = let final core::String* #t80 = "x" in let final core::num* #t81 = this.{self::Test3::[]}(#t80){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t82 = this.{self::Test3::[]=}(#t80, #t81){(core::String*, core::double*) →* void} in #t81;
     core::double* v9 = let final core::String* #t83 = "x" in let final core::double* #t84 = this.{self::Test3::[]}(#t83){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t85 = this.{self::Test3::[]=}(#t83, #t84){(core::String*, core::double*) →* void} in #t84;
-    core::int* v10 = let final core::String* #t86 = "x" in let final core::int* #t87 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:119:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
-                                                 ^" in this.{self::Test3::[]}(#t86){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t88 = this.{self::Test3::[]=}(#t86, #t87){(core::String*, core::double*) →* void} in #t87;
-    core::int* v11 = let final core::String* #t89 = "x" in let final core::int* #t90 = this.{self::Test3::[]}(#t89){(core::String*) →* core::int*} in let final void #t91 = this.{self::Test3::[]=}(#t89, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:124:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    core::int* v10 = let final core::String* #t86 = "x" in let final core::int* #t87 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:121:48: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++this
+                                               ^" in this.{self::Test3::[]}(#t86){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t88 = this.{self::Test3::[]=}(#t86, #t87){(core::String*, core::double*) →* void} in #t87;
+    core::int* v11 = let final core::String* #t89 = "x" in let final core::int* #t90 = this.{self::Test3::[]}(#t89){(core::String*) →* core::int*} in let final void #t91 = this.{self::Test3::[]=}(#t89, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
         /*@target=num.+*/ ++;
                           ^" in #t90.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t90;
   }
@@ -220,16 +220,16 @@
     core::num* v2 = let final core::String* #t186 = "x" in let final core::num* #t187 = self::getNum() as{TypeError} core::int* in let final void #t188 = this.{self::Test7::[]=}(#t186, #t187){(core::String*, core::int*) →* void} in #t187;
     core::num* v4 = let final core::String* #t189 = "x" in let final core::double* #t190 = this.{self::Test7::[]}(#t189){(core::String*) →* core::double*} in #t190 == null ?{core::num*} let final core::int* #t191 = self::getInt() in let final void #t192 = this.{self::Test7::[]=}(#t189, #t191){(core::String*, core::int*) →* void} in #t191 : #t190;
     core::num* v5 = let final core::String* #t193 = "x" in let final core::double* #t194 = this.{self::Test7::[]}(#t193){(core::String*) →* core::double*} in #t194 == null ?{core::num*} let final core::num* #t195 = self::getNum() as{TypeError} core::int* in let final void #t196 = this.{self::Test7::[]=}(#t193, #t195){(core::String*, core::int*) →* void} in #t195 : #t194;
-    core::double* v7 = let final core::String* #t197 = "x" in let final core::double* #t198 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:264:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::double* v7 = let final core::String* #t197 = "x" in let final core::double* #t198 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:266:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         /*@target=double.+*/ += getInt();
                              ^" in this.{self::Test7::[]}(#t197){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t199 = this.{self::Test7::[]=}(#t197, #t198){(core::String*, core::int*) →* void} in #t198;
-    core::double* v8 = let final core::String* #t200 = "x" in let final core::double* #t201 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:268:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::double* v8 = let final core::String* #t200 = "x" in let final core::double* #t201 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         /*@target=double.+*/ += getNum();
                              ^" in this.{self::Test7::[]}(#t200){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t202 = this.{self::Test7::[]=}(#t200, #t201){(core::String*, core::int*) →* void} in #t201;
-    core::double* v10 = let final core::String* #t203 = "x" in let final core::double* #t204 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
-                                                       ^" in this.{self::Test7::[]}(#t203){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t205 = this.{self::Test7::[]=}(#t203, #t204){(core::String*, core::int*) →* void} in #t204;
-    core::double* v11 = let final core::String* #t206 = "x" in let final core::double* #t207 = this.{self::Test7::[]}(#t206){(core::String*) →* core::double*} in let final void #t208 = this.{self::Test7::[]=}(#t206, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:275:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::double* v10 = let final core::String* #t203 = "x" in let final core::double* #t204 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:272:54: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    var /*@type=double**/ v10 = /*@target=double.+*/ ++this
+                                                     ^" in this.{self::Test7::[]}(#t203){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t205 = this.{self::Test7::[]=}(#t203, #t204){(core::String*, core::int*) →* void} in #t204;
+    core::double* v11 = let final core::String* #t206 = "x" in let final core::double* #t207 = this.{self::Test7::[]}(#t206){(core::String*) →* core::double*} in let final void #t208 = this.{self::Test7::[]=}(#t206, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:277:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         /*@target=double.+*/ ++;
                              ^" in #t207.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t207;
   }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.modular.expect
index 99a0822..b06b8ef 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.modular.expect
@@ -2,31 +2,31 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:109:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:111:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //         /*@target=num.+*/ += getInt();
 //                           ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:119:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
-//     var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
-//                                                  ^
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:121:48: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//     var /*@type=int**/ v10 = /*@target=num.+*/ ++this
+//                                                ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:124:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //         /*@target=num.+*/ ++;
 //                           ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:264:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:266:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //         /*@target=double.+*/ += getInt();
 //                              ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:268:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //         /*@target=double.+*/ += getNum();
 //                              ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-//     var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
-//                                                        ^
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:272:54: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//     var /*@type=double**/ v10 = /*@target=double.+*/ ++this
+//                                                      ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:275:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:277:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //         /*@target=double.+*/ ++;
 //                              ^
 //
@@ -101,15 +101,15 @@
     core::double* v3 = let final core::String* #t66 = "x" in let final core::double* #t67 = self::getDouble() in let final void #t68 = this.{self::Test3::[]=}(#t66, #t67){(core::String*, core::double*) →* void} in #t67;
     core::num* v5 = let final core::String* #t69 = "x" in let final core::int* #t70 = this.{self::Test3::[]}(#t69){(core::String*) →* core::int*} in #t70 == null ?{core::num*} let final core::num* #t71 = self::getNum() as{TypeError} core::double* in let final void #t72 = this.{self::Test3::[]=}(#t69, #t71){(core::String*, core::double*) →* void} in #t71 : #t70;
     core::num* v6 = let final core::String* #t73 = "x" in let final core::int* #t74 = this.{self::Test3::[]}(#t73){(core::String*) →* core::int*} in #t74 == null ?{core::num*} let final core::double* #t75 = self::getDouble() in let final void #t76 = this.{self::Test3::[]=}(#t73, #t75){(core::String*, core::double*) →* void} in #t75 : #t74;
-    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:109:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:111:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
         /*@target=num.+*/ += getInt();
                           ^" in this.{self::Test3::[]}(#t77){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t79 = this.{self::Test3::[]=}(#t77, #t78){(core::String*, core::double*) →* void} in #t78;
     core::num* v8 = let final core::String* #t80 = "x" in let final core::num* #t81 = this.{self::Test3::[]}(#t80){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t82 = this.{self::Test3::[]=}(#t80, #t81){(core::String*, core::double*) →* void} in #t81;
     core::double* v9 = let final core::String* #t83 = "x" in let final core::double* #t84 = this.{self::Test3::[]}(#t83){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t85 = this.{self::Test3::[]=}(#t83, #t84){(core::String*, core::double*) →* void} in #t84;
-    core::int* v10 = let final core::String* #t86 = "x" in let final core::int* #t87 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:119:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
-                                                 ^" in this.{self::Test3::[]}(#t86){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t88 = this.{self::Test3::[]=}(#t86, #t87){(core::String*, core::double*) →* void} in #t87;
-    core::int* v11 = let final core::String* #t89 = "x" in let final core::int* #t90 = this.{self::Test3::[]}(#t89){(core::String*) →* core::int*} in let final void #t91 = this.{self::Test3::[]=}(#t89, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:124:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    core::int* v10 = let final core::String* #t86 = "x" in let final core::int* #t87 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:121:48: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++this
+                                               ^" in this.{self::Test3::[]}(#t86){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t88 = this.{self::Test3::[]=}(#t86, #t87){(core::String*, core::double*) →* void} in #t87;
+    core::int* v11 = let final core::String* #t89 = "x" in let final core::int* #t90 = this.{self::Test3::[]}(#t89){(core::String*) →* core::int*} in let final void #t91 = this.{self::Test3::[]=}(#t89, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
         /*@target=num.+*/ ++;
                           ^" in #t90.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t90;
   }
@@ -220,16 +220,16 @@
     core::num* v2 = let final core::String* #t186 = "x" in let final core::num* #t187 = self::getNum() as{TypeError} core::int* in let final void #t188 = this.{self::Test7::[]=}(#t186, #t187){(core::String*, core::int*) →* void} in #t187;
     core::num* v4 = let final core::String* #t189 = "x" in let final core::double* #t190 = this.{self::Test7::[]}(#t189){(core::String*) →* core::double*} in #t190 == null ?{core::num*} let final core::int* #t191 = self::getInt() in let final void #t192 = this.{self::Test7::[]=}(#t189, #t191){(core::String*, core::int*) →* void} in #t191 : #t190;
     core::num* v5 = let final core::String* #t193 = "x" in let final core::double* #t194 = this.{self::Test7::[]}(#t193){(core::String*) →* core::double*} in #t194 == null ?{core::num*} let final core::num* #t195 = self::getNum() as{TypeError} core::int* in let final void #t196 = this.{self::Test7::[]=}(#t193, #t195){(core::String*, core::int*) →* void} in #t195 : #t194;
-    core::double* v7 = let final core::String* #t197 = "x" in let final core::double* #t198 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:264:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::double* v7 = let final core::String* #t197 = "x" in let final core::double* #t198 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:266:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         /*@target=double.+*/ += getInt();
                              ^" in this.{self::Test7::[]}(#t197){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t199 = this.{self::Test7::[]=}(#t197, #t198){(core::String*, core::int*) →* void} in #t198;
-    core::double* v8 = let final core::String* #t200 = "x" in let final core::double* #t201 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:268:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::double* v8 = let final core::String* #t200 = "x" in let final core::double* #t201 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         /*@target=double.+*/ += getNum();
                              ^" in this.{self::Test7::[]}(#t200){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t202 = this.{self::Test7::[]=}(#t200, #t201){(core::String*, core::int*) →* void} in #t201;
-    core::double* v10 = let final core::String* #t203 = "x" in let final core::double* #t204 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
-                                                       ^" in this.{self::Test7::[]}(#t203){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t205 = this.{self::Test7::[]=}(#t203, #t204){(core::String*, core::int*) →* void} in #t204;
-    core::double* v11 = let final core::String* #t206 = "x" in let final core::double* #t207 = this.{self::Test7::[]}(#t206){(core::String*) →* core::double*} in let final void #t208 = this.{self::Test7::[]=}(#t206, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:275:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    core::double* v10 = let final core::String* #t203 = "x" in let final core::double* #t204 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:272:54: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    var /*@type=double**/ v10 = /*@target=double.+*/ ++this
+                                                     ^" in this.{self::Test7::[]}(#t203){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t205 = this.{self::Test7::[]=}(#t203, #t204){(core::String*, core::int*) →* void} in #t204;
+    core::double* v11 = let final core::String* #t206 = "x" in let final core::double* #t207 = this.{self::Test7::[]}(#t206){(core::String*) →* core::double*} in let final void #t208 = this.{self::Test7::[]=}(#t206, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:277:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         /*@target=double.+*/ ++;
                              ^" in #t207.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t207;
   }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart
new file mode 100644
index 0000000..4e1244c
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart
@@ -0,0 +1,312 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+abstract class Test1a {
+  int operator [](String s);
+  void operator []=(String s, int v);
+
+  void test() {
+    var /*@type=int*/ v1 = this /*@target=Test1a.[]=*/ ['x'] = getInt();
+
+    var /*@type=int*/ v7 = this /*@target=Test1a.[]*/ /*@target=Test1a.[]=*/ [
+        'x'] /*@target=num.+*/ += getInt();
+
+    var /*@type=int*/ v10 = /*@target=num.+*/ ++this /*@target=Test1a.[]*/ /*@target=Test1a.[]=*/ [
+        'x'];
+
+    var /*@type=int*/ v11 = this /*@target=Test1a.[]*/ /*@target=Test1a.[]=*/ [
+        'x'] /*@target=num.+*/ ++;
+  }
+}
+
+abstract class Test1b {
+  int? operator [](String s);
+  void operator []=(String s, int? v);
+
+  void test() {
+    var /*@type=int*/ v4 =
+        this /*@target=Test1b.[]*/ /*@target=Test1b.[]=*/ ['x'] ??= getInt();
+  }
+}
+
+abstract class Test2a {
+  int operator [](String s);
+  void operator []=(String s, num v);
+
+  void test() {
+    var /*@type=int*/ v1 = this /*@target=Test2a.[]=*/ ['x'] = getInt();
+
+    var /*@type=num*/ v2 = this /*@target=Test2a.[]=*/ ['x'] = getNum();
+
+    var /*@type=double*/ v3 = this /*@target=Test2a.[]=*/ ['x'] = getDouble();
+
+    var /*@type=int*/ v7 = this /*@target=Test2a.[]*/ /*@target=Test2a.[]=*/ [
+        'x'] /*@target=num.+*/ += getInt();
+
+    var /*@type=num*/ v8 = this /*@target=Test2a.[]*/ /*@target=Test2a.[]=*/ [
+        'x'] /*@target=num.+*/ += getNum();
+
+    var /*@type=double*/ v9 =
+        this /*@target=Test2a.[]*/ /*@target=Test2a.[]=*/ [
+            'x'] /*@target=num.+*/ += getDouble();
+
+    var /*@type=int*/ v10 = /*@target=num.+*/ ++this /*@target=Test2a.[]*/ /*@target=Test2a.[]=*/ [
+        'x'];
+
+    var /*@type=int*/ v11 = this /*@target=Test2a.[]*/ /*@target=Test2a.[]=*/ [
+        'x'] /*@target=num.+*/ ++;
+  }
+}
+
+abstract class Test2b {
+  int? operator [](String s);
+  void operator []=(String s, num? v);
+
+  void test() {
+    var /*@type=int*/ v4 =
+        this /*@target=Test2b.[]*/ /*@target=Test2b.[]=*/ ['x'] ??= getInt();
+
+    var /*@type=num*/ v5 =
+        this /*@target=Test2b.[]*/ /*@target=Test2b.[]=*/ ['x'] ??= getNum();
+
+    var /*@type=num*/ v6 =
+        this /*@target=Test2b.[]*/ /*@target=Test2b.[]=*/ ['x'] ??= getDouble();
+  }
+}
+
+abstract class Test3a {
+  int operator [](String s);
+  void operator []=(String s, double v);
+
+  void test() {
+    var /*@type=double*/ v3 = this /*@target=Test3a.[]=*/ ['x'] = getDouble();
+
+    var /*@type=double*/ v9 =
+        this /*@target=Test3a.[]*/ /*@target=Test3a.[]=*/ [
+            'x'] /*@target=num.+*/ += getDouble();
+
+    var /*@type=double*/ v10 = /*@target=num.+*/ ++this /*@target=Test3a.[]*/ /*@target=Test3a.[]=*/ [
+        'x'];
+
+    var /*@type=int*/ v11 = this /*@target=Test3a.[]*/ /*@target=Test3a.[]=*/ [
+        'x'] /*@target=num.+*/ ++;
+  }
+}
+
+abstract class Test3b {
+  int? operator [](String s);
+  void operator []=(String s, double? v);
+
+  void test() {
+    var /*@type=num*/ v6 =
+        this /*@target=Test3b.[]*/ /*@target=Test3b.[]=*/ ['x'] ??= getDouble();
+  }
+}
+
+abstract class Test4a {
+  num operator [](String s);
+  void operator []=(String s, int v);
+
+  void test() {
+    var /*@type=int*/ v1 = this /*@target=Test4a.[]=*/ ['x'] = getInt();
+  }
+}
+
+abstract class Test4b {
+  num? operator [](String s);
+  void operator []=(String s, int? v);
+
+  void test() {
+    var /*@type=num*/ v4 =
+        this /*@target=Test4b.[]*/ /*@target=Test4b.[]=*/ ['x'] ??= getInt();
+  }
+}
+
+abstract class Test5a {
+  num operator [](String s);
+  void operator []=(String s, num v);
+
+  void test() {
+    var /*@type=int*/ v1 = this /*@target=Test5a.[]=*/ ['x'] = getInt();
+
+    var /*@type=num*/ v2 = this /*@target=Test5a.[]=*/ ['x'] = getNum();
+
+    var /*@type=double*/ v3 = this /*@target=Test5a.[]=*/ ['x'] = getDouble();
+
+    var /*@type=num*/ v7 = this /*@target=Test5a.[]*/ /*@target=Test5a.[]=*/ [
+        'x'] /*@target=num.+*/ += getInt();
+
+    var /*@type=num*/ v8 = this /*@target=Test5a.[]*/ /*@target=Test5a.[]=*/ [
+        'x'] /*@target=num.+*/ += getNum();
+
+    var /*@type=double*/ v9 =
+        this /*@target=Test5a.[]*/ /*@target=Test5a.[]=*/ [
+            'x'] /*@target=num.+*/ += getDouble();
+
+    var /*@type=num*/ v10 = /*@target=num.+*/ ++this /*@target=Test5a.[]*/ /*@target=Test5a.[]=*/ [
+        'x'];
+
+    var /*@type=num*/ v11 = this /*@target=Test5a.[]*/ /*@target=Test5a.[]=*/ [
+        'x'] /*@target=num.+*/ ++;
+  }
+}
+
+abstract class Test5b {
+  num? operator [](String s);
+  void operator []=(String s, num? v);
+
+  void test() {
+    var /*@type=num*/ v4 =
+        this /*@target=Test5b.[]*/ /*@target=Test5b.[]=*/ ['x'] ??= getInt();
+
+    var /*@type=num*/ v5 =
+        this /*@target=Test5b.[]*/ /*@target=Test5b.[]=*/ ['x'] ??= getNum();
+
+    var /*@type=num*/ v6 =
+        this /*@target=Test5b.[]*/ /*@target=Test5b.[]=*/ ['x'] ??= getDouble();
+  }
+}
+
+abstract class Test6a {
+  num operator [](String s);
+  void operator []=(String s, double v);
+
+  void test() {
+    var /*@type=double*/ v3 = this /*@target=Test6a.[]=*/ ['x'] = getDouble();
+
+    var /*@type=double*/ v9 =
+        this /*@target=Test6a.[]*/ /*@target=Test6a.[]=*/ [
+            'x'] /*@target=num.+*/ += getDouble();
+
+    var /*@type=double*/ v10 = /*@target=num.+*/ ++this /*@target=Test6a.[]*/ /*@target=Test6a.[]=*/ [
+        'x'];
+
+    var /*@type=num*/ v11 = this /*@target=Test6a.[]*/ /*@target=Test6a.[]=*/ [
+        'x'] /*@target=num.+*/ ++;
+  }
+}
+
+abstract class Test6b {
+  num? operator [](String s);
+  void operator []=(String s, double? v);
+
+  void test() {
+    var /*@type=num*/ v6 =
+        this /*@target=Test6b.[]*/ /*@target=Test6b.[]=*/ ['x'] ??= getDouble();
+  }
+}
+
+abstract class Test7a {
+  double operator [](String s);
+  void operator []=(String s, int v);
+
+  void test() {
+    var /*@type=int*/ v1 = this /*@target=Test7a.[]=*/ ['x'] = getInt();
+  }
+}
+
+abstract class Test7b {
+  double? operator [](String s);
+  void operator []=(String s, int? v);
+
+  void test() {
+    var /*@type=num*/ v4 =
+        this /*@target=Test7b.[]*/ /*@target=Test7b.[]=*/ ['x'] ??= getInt();
+  }
+}
+
+abstract class Test8a {
+  double operator [](String s);
+  void operator []=(String s, num v);
+
+  void test() {
+    var /*@type=int*/ v1 = this /*@target=Test8a.[]=*/ ['x'] = getInt();
+
+    var /*@type=num*/ v2 = this /*@target=Test8a.[]=*/ ['x'] = getNum();
+
+    var /*@type=double*/ v3 = this /*@target=Test8a.[]=*/ ['x'] = getDouble();
+
+    var /*@type=double*/ v7 =
+        this /*@target=Test8a.[]*/ /*@target=Test8a.[]=*/ [
+            'x'] /*@target=double.+*/ += getInt();
+
+    var /*@type=double*/ v8 =
+        this /*@target=Test8a.[]*/ /*@target=Test8a.[]=*/ [
+            'x'] /*@target=double.+*/ += getNum();
+
+    var /*@type=double*/ v9 =
+        this /*@target=Test8a.[]*/ /*@target=Test8a.[]=*/ [
+            'x'] /*@target=double.+*/ += getDouble();
+
+    var /*@type=double*/ v10 = /*@target=double.+*/ ++this /*@target=Test8a.[]*/ /*@target=Test8a.[]=*/ [
+        'x'];
+
+    var /*@type=double*/ v11 =
+        this /*@target=Test8a.[]*/ /*@target=Test8a.[]=*/ [
+            'x'] /*@target=double.+*/ ++;
+  }
+}
+
+abstract class Test8b {
+  double? operator [](String s);
+  void operator []=(String s, num? v);
+
+  void test() {
+    var /*@type=num*/ v4 =
+        this /*@target=Test8b.[]*/ /*@target=Test8b.[]=*/ ['x'] ??= getInt();
+
+    var /*@type=num*/ v5 =
+        this /*@target=Test8b.[]*/ /*@target=Test8b.[]=*/ ['x'] ??= getNum();
+
+    var /*@type=double*/ v6 =
+        this /*@target=Test8b.[]*/ /*@target=Test8b.[]=*/ ['x'] ??= getDouble();
+  }
+}
+
+abstract class Test9a {
+  double operator [](String s);
+  void operator []=(String s, double v);
+
+  void test() {
+    var /*@type=double*/ v3 = this /*@target=Test9a.[]=*/ ['x'] = getDouble();
+
+    var /*@type=double*/ v7 =
+        this /*@target=Test9a.[]*/ /*@target=Test9a.[]=*/ [
+            'x'] /*@target=double.+*/ += getInt();
+
+    var /*@type=double*/ v8 =
+        this /*@target=Test9a.[]*/ /*@target=Test9a.[]=*/ [
+            'x'] /*@target=double.+*/ += getNum();
+
+    var /*@type=double*/ v9 =
+        this /*@target=Test9a.[]*/ /*@target=Test9a.[]=*/ [
+            'x'] /*@target=double.+*/ += getDouble();
+
+    var /*@type=double*/ v10 = /*@target=double.+*/ ++this /*@target=Test9a.[]*/ /*@target=Test9a.[]=*/ [
+        'x'];
+
+    var /*@type=double*/ v11 =
+        this /*@target=Test9a.[]*/ /*@target=Test9a.[]=*/ [
+            'x'] /*@target=double.+*/ ++;
+  }
+}
+
+abstract class Test9b {
+  double? operator [](String s);
+  void operator []=(String s, double? v);
+
+  void test() {
+    var /*@type=double*/ v6 =
+        this /*@target=Test9b.[]*/ /*@target=Test9b.[]=*/ ['x'] ??= getDouble();
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.textual_outline.expect
new file mode 100644
index 0000000..d10dc87
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.textual_outline.expect
@@ -0,0 +1,115 @@
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+abstract class Test1a {
+  int operator [](String s);
+  void operator []=(String s, int v);
+  void test() {}
+}
+
+abstract class Test1b {
+  int? operator [](String s);
+  void operator []=(String s, int? v);
+  void test() {}
+}
+
+abstract class Test2a {
+  int operator [](String s);
+  void operator []=(String s, num v);
+  void test() {}
+}
+
+abstract class Test2b {
+  int? operator [](String s);
+  void operator []=(String s, num? v);
+  void test() {}
+}
+
+abstract class Test3a {
+  int operator [](String s);
+  void operator []=(String s, double v);
+  void test() {}
+}
+
+abstract class Test3b {
+  int? operator [](String s);
+  void operator []=(String s, double? v);
+  void test() {}
+}
+
+abstract class Test4a {
+  num operator [](String s);
+  void operator []=(String s, int v);
+  void test() {}
+}
+
+abstract class Test4b {
+  num? operator [](String s);
+  void operator []=(String s, int? v);
+  void test() {}
+}
+
+abstract class Test5a {
+  num operator [](String s);
+  void operator []=(String s, num v);
+  void test() {}
+}
+
+abstract class Test5b {
+  num? operator [](String s);
+  void operator []=(String s, num? v);
+  void test() {}
+}
+
+abstract class Test6a {
+  num operator [](String s);
+  void operator []=(String s, double v);
+  void test() {}
+}
+
+abstract class Test6b {
+  num? operator [](String s);
+  void operator []=(String s, double? v);
+  void test() {}
+}
+
+abstract class Test7a {
+  double operator [](String s);
+  void operator []=(String s, int v);
+  void test() {}
+}
+
+abstract class Test7b {
+  double? operator [](String s);
+  void operator []=(String s, int? v);
+  void test() {}
+}
+
+abstract class Test8a {
+  double operator [](String s);
+  void operator []=(String s, num v);
+  void test() {}
+}
+
+abstract class Test8b {
+  double? operator [](String s);
+  void operator []=(String s, num? v);
+  void test() {}
+}
+
+abstract class Test9a {
+  double operator [](String s);
+  void operator []=(String s, double v);
+  void test() {}
+}
+
+abstract class Test9b {
+  double? operator [](String s);
+  void operator []=(String s, double? v);
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..7d8b7c8
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.textual_outline_modelled.expect
@@ -0,0 +1,114 @@
+library test;
+
+abstract class Test1a {
+  int operator [](String s);
+  void operator []=(String s, int v);
+  void test() {}
+}
+
+abstract class Test1b {
+  int? operator [](String s);
+  void operator []=(String s, int? v);
+  void test() {}
+}
+
+abstract class Test2a {
+  int operator [](String s);
+  void operator []=(String s, num v);
+  void test() {}
+}
+
+abstract class Test2b {
+  int? operator [](String s);
+  void operator []=(String s, num? v);
+  void test() {}
+}
+
+abstract class Test3a {
+  int operator [](String s);
+  void operator []=(String s, double v);
+  void test() {}
+}
+
+abstract class Test3b {
+  int? operator [](String s);
+  void operator []=(String s, double? v);
+  void test() {}
+}
+
+abstract class Test4a {
+  num operator [](String s);
+  void operator []=(String s, int v);
+  void test() {}
+}
+
+abstract class Test4b {
+  num? operator [](String s);
+  void operator []=(String s, int? v);
+  void test() {}
+}
+
+abstract class Test5a {
+  num operator [](String s);
+  void operator []=(String s, num v);
+  void test() {}
+}
+
+abstract class Test5b {
+  num? operator [](String s);
+  void operator []=(String s, num? v);
+  void test() {}
+}
+
+abstract class Test6a {
+  num operator [](String s);
+  void operator []=(String s, double v);
+  void test() {}
+}
+
+abstract class Test6b {
+  num? operator [](String s);
+  void operator []=(String s, double? v);
+  void test() {}
+}
+
+abstract class Test7a {
+  double operator [](String s);
+  void operator []=(String s, int v);
+  void test() {}
+}
+
+abstract class Test7b {
+  double? operator [](String s);
+  void operator []=(String s, int? v);
+  void test() {}
+}
+
+abstract class Test8a {
+  double operator [](String s);
+  void operator []=(String s, num v);
+  void test() {}
+}
+
+abstract class Test8b {
+  double? operator [](String s);
+  void operator []=(String s, num? v);
+  void test() {}
+}
+
+abstract class Test9a {
+  double operator [](String s);
+  void operator []=(String s, double v);
+  void test() {}
+}
+
+abstract class Test9b {
+  double? operator [](String s);
+  void operator []=(String s, double? v);
+  void test() {}
+}
+
+double getDouble() => 0.0;
+int getInt() => 0;
+main() {}
+num getNum() => 0;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.weak.expect
new file mode 100644
index 0000000..92dd762
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.weak.expect
@@ -0,0 +1,232 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Test1a extends core::Object {
+  synthetic constructor •() → self::Test1a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int;
+  abstract operator []=(core::String s, core::int v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t1 = "x" in let final core::int #t2 = self::getInt() in let final void #t3 = this.{self::Test1a::[]=}(#t1, #t2){(core::String, core::int) → void} in #t2;
+    core::int v7 = let final core::String #t4 = "x" in let final core::int #t5 = this.{self::Test1a::[]}(#t4){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = this.{self::Test1a::[]=}(#t4, #t5){(core::String, core::int) → void} in #t5;
+    core::int v10 = let final core::String #t7 = "x" in let final core::int #t8 = this.{self::Test1a::[]}(#t7){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t9 = this.{self::Test1a::[]=}(#t7, #t8){(core::String, core::int) → void} in #t8;
+    core::int v11 = let final core::String #t10 = "x" in let final core::int #t11 = this.{self::Test1a::[]}(#t10){(core::String) → core::int} in let final void #t12 = this.{self::Test1a::[]=}(#t10, #t11.{core::num::+}(1){(core::num) → core::int}){(core::String, core::int) → void} in #t11;
+  }
+}
+abstract class Test1b extends core::Object {
+  synthetic constructor •() → self::Test1b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int?;
+  abstract operator []=(core::String s, core::int? v) → void;
+  method test() → void {
+    core::int v4 = let final core::String #t13 = "x" in let final core::int? #t14 = this.{self::Test1b::[]}(#t13){(core::String) → core::int?} in #t14 == null ?{core::int} let final core::int #t15 = self::getInt() in let final void #t16 = this.{self::Test1b::[]=}(#t13, #t15){(core::String, core::int?) → void} in #t15 : #t14{core::int};
+  }
+}
+abstract class Test2a extends core::Object {
+  synthetic constructor •() → self::Test2a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int;
+  abstract operator []=(core::String s, core::num v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t17 = "x" in let final core::int #t18 = self::getInt() in let final void #t19 = this.{self::Test2a::[]=}(#t17, #t18){(core::String, core::num) → void} in #t18;
+    core::num v2 = let final core::String #t20 = "x" in let final core::num #t21 = self::getNum() in let final void #t22 = this.{self::Test2a::[]=}(#t20, #t21){(core::String, core::num) → void} in #t21;
+    core::double v3 = let final core::String #t23 = "x" in let final core::double #t24 = self::getDouble() in let final void #t25 = this.{self::Test2a::[]=}(#t23, #t24){(core::String, core::num) → void} in #t24;
+    core::int v7 = let final core::String #t26 = "x" in let final core::int #t27 = this.{self::Test2a::[]}(#t26){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t28 = this.{self::Test2a::[]=}(#t26, #t27){(core::String, core::num) → void} in #t27;
+    core::num v8 = let final core::String #t29 = "x" in let final core::num #t30 = this.{self::Test2a::[]}(#t29){(core::String) → core::int}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t31 = this.{self::Test2a::[]=}(#t29, #t30){(core::String, core::num) → void} in #t30;
+    core::double v9 = let final core::String #t32 = "x" in let final core::double #t33 = this.{self::Test2a::[]}(#t32){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t34 = this.{self::Test2a::[]=}(#t32, #t33){(core::String, core::num) → void} in #t33;
+    core::int v10 = let final core::String #t35 = "x" in let final core::int #t36 = this.{self::Test2a::[]}(#t35){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t37 = this.{self::Test2a::[]=}(#t35, #t36){(core::String, core::num) → void} in #t36;
+    core::int v11 = let final core::String #t38 = "x" in let final core::int #t39 = this.{self::Test2a::[]}(#t38){(core::String) → core::int} in let final void #t40 = this.{self::Test2a::[]=}(#t38, #t39.{core::num::+}(1){(core::num) → core::int}){(core::String, core::num) → void} in #t39;
+  }
+}
+abstract class Test2b extends core::Object {
+  synthetic constructor •() → self::Test2b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int?;
+  abstract operator []=(core::String s, core::num? v) → void;
+  method test() → void {
+    core::int v4 = let final core::String #t41 = "x" in let final core::int? #t42 = this.{self::Test2b::[]}(#t41){(core::String) → core::int?} in #t42 == null ?{core::int} let final core::int #t43 = self::getInt() in let final void #t44 = this.{self::Test2b::[]=}(#t41, #t43){(core::String, core::num?) → void} in #t43 : #t42{core::int};
+    core::num v5 = let final core::String #t45 = "x" in let final core::int? #t46 = this.{self::Test2b::[]}(#t45){(core::String) → core::int?} in #t46 == null ?{core::num} let final core::num #t47 = self::getNum() in let final void #t48 = this.{self::Test2b::[]=}(#t45, #t47){(core::String, core::num?) → void} in #t47 : #t46{core::int};
+    core::num v6 = let final core::String #t49 = "x" in let final core::int? #t50 = this.{self::Test2b::[]}(#t49){(core::String) → core::int?} in #t50 == null ?{core::num} let final core::double #t51 = self::getDouble() in let final void #t52 = this.{self::Test2b::[]=}(#t49, #t51){(core::String, core::num?) → void} in #t51 : #t50{core::int};
+  }
+}
+abstract class Test3a extends core::Object {
+  synthetic constructor •() → self::Test3a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int;
+  abstract operator []=(core::String s, core::double v) → void;
+  method test() → void {
+    core::double v3 = let final core::String #t53 = "x" in let final core::double #t54 = self::getDouble() in let final void #t55 = this.{self::Test3a::[]=}(#t53, #t54){(core::String, core::double) → void} in #t54;
+    core::double v9 = let final core::String #t56 = "x" in let final core::double #t57 = this.{self::Test3a::[]}(#t56){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t58 = this.{self::Test3a::[]=}(#t56, #t57){(core::String, core::double) → void} in #t57;
+    core::double v10 = let final core::String #t59 = "x" in let final core::double #t60 = this.{self::Test3a::[]}(#t59){(core::String) → core::int}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t61 = this.{self::Test3a::[]=}(#t59, #t60){(core::String, core::double) → void} in #t60;
+    core::int v11 = let final core::String #t62 = "x" in let final core::int #t63 = this.{self::Test3a::[]}(#t62){(core::String) → core::int} in let final void #t64 = this.{self::Test3a::[]=}(#t62, #t63.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t63;
+  }
+}
+abstract class Test3b extends core::Object {
+  synthetic constructor •() → self::Test3b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int?;
+  abstract operator []=(core::String s, core::double? v) → void;
+  method test() → void {
+    core::num v6 = let final core::String #t65 = "x" in let final core::int? #t66 = this.{self::Test3b::[]}(#t65){(core::String) → core::int?} in #t66 == null ?{core::num} let final core::double #t67 = self::getDouble() in let final void #t68 = this.{self::Test3b::[]=}(#t65, #t67){(core::String, core::double?) → void} in #t67 : #t66{core::int};
+  }
+}
+abstract class Test4a extends core::Object {
+  synthetic constructor •() → self::Test4a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num;
+  abstract operator []=(core::String s, core::int v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t69 = "x" in let final core::int #t70 = self::getInt() in let final void #t71 = this.{self::Test4a::[]=}(#t69, #t70){(core::String, core::int) → void} in #t70;
+  }
+}
+abstract class Test4b extends core::Object {
+  synthetic constructor •() → self::Test4b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num?;
+  abstract operator []=(core::String s, core::int? v) → void;
+  method test() → void {
+    core::num v4 = let final core::String #t72 = "x" in let final core::num? #t73 = this.{self::Test4b::[]}(#t72){(core::String) → core::num?} in #t73 == null ?{core::num} let final core::int #t74 = self::getInt() in let final void #t75 = this.{self::Test4b::[]=}(#t72, #t74){(core::String, core::int?) → void} in #t74 : #t73{core::num};
+  }
+}
+abstract class Test5a extends core::Object {
+  synthetic constructor •() → self::Test5a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num;
+  abstract operator []=(core::String s, core::num v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t76 = "x" in let final core::int #t77 = self::getInt() in let final void #t78 = this.{self::Test5a::[]=}(#t76, #t77){(core::String, core::num) → void} in #t77;
+    core::num v2 = let final core::String #t79 = "x" in let final core::num #t80 = self::getNum() in let final void #t81 = this.{self::Test5a::[]=}(#t79, #t80){(core::String, core::num) → void} in #t80;
+    core::double v3 = let final core::String #t82 = "x" in let final core::double #t83 = self::getDouble() in let final void #t84 = this.{self::Test5a::[]=}(#t82, #t83){(core::String, core::num) → void} in #t83;
+    core::num v7 = let final core::String #t85 = "x" in let final core::num #t86 = this.{self::Test5a::[]}(#t85){(core::String) → core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t87 = this.{self::Test5a::[]=}(#t85, #t86){(core::String, core::num) → void} in #t86;
+    core::num v8 = let final core::String #t88 = "x" in let final core::num #t89 = this.{self::Test5a::[]}(#t88){(core::String) → core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t90 = this.{self::Test5a::[]=}(#t88, #t89){(core::String, core::num) → void} in #t89;
+    core::double v9 = let final core::String #t91 = "x" in let final core::double #t92 = this.{self::Test5a::[]}(#t91){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t93 = this.{self::Test5a::[]=}(#t91, #t92){(core::String, core::num) → void} in #t92;
+    core::num v10 = let final core::String #t94 = "x" in let final core::num #t95 = this.{self::Test5a::[]}(#t94){(core::String) → core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t96 = this.{self::Test5a::[]=}(#t94, #t95){(core::String, core::num) → void} in #t95;
+    core::num v11 = let final core::String #t97 = "x" in let final core::num #t98 = this.{self::Test5a::[]}(#t97){(core::String) → core::num} in let final void #t99 = this.{self::Test5a::[]=}(#t97, #t98.{core::num::+}(1){(core::num) → core::num}){(core::String, core::num) → void} in #t98;
+  }
+}
+abstract class Test5b extends core::Object {
+  synthetic constructor •() → self::Test5b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num?;
+  abstract operator []=(core::String s, core::num? v) → void;
+  method test() → void {
+    core::num v4 = let final core::String #t100 = "x" in let final core::num? #t101 = this.{self::Test5b::[]}(#t100){(core::String) → core::num?} in #t101 == null ?{core::num} let final core::int #t102 = self::getInt() in let final void #t103 = this.{self::Test5b::[]=}(#t100, #t102){(core::String, core::num?) → void} in #t102 : #t101{core::num};
+    core::num v5 = let final core::String #t104 = "x" in let final core::num? #t105 = this.{self::Test5b::[]}(#t104){(core::String) → core::num?} in #t105 == null ?{core::num} let final core::num #t106 = self::getNum() in let final void #t107 = this.{self::Test5b::[]=}(#t104, #t106){(core::String, core::num?) → void} in #t106 : #t105{core::num};
+    core::num v6 = let final core::String #t108 = "x" in let final core::num? #t109 = this.{self::Test5b::[]}(#t108){(core::String) → core::num?} in #t109 == null ?{core::num} let final core::double #t110 = self::getDouble() in let final void #t111 = this.{self::Test5b::[]=}(#t108, #t110){(core::String, core::num?) → void} in #t110 : #t109{core::num};
+  }
+}
+abstract class Test6a extends core::Object {
+  synthetic constructor •() → self::Test6a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num;
+  abstract operator []=(core::String s, core::double v) → void;
+  method test() → void {
+    core::double v3 = let final core::String #t112 = "x" in let final core::double #t113 = self::getDouble() in let final void #t114 = this.{self::Test6a::[]=}(#t112, #t113){(core::String, core::double) → void} in #t113;
+    core::double v9 = let final core::String #t115 = "x" in let final core::double #t116 = this.{self::Test6a::[]}(#t115){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t117 = this.{self::Test6a::[]=}(#t115, #t116){(core::String, core::double) → void} in #t116;
+    core::double v10 = let final core::String #t118 = "x" in let final core::double #t119 = this.{self::Test6a::[]}(#t118){(core::String) → core::num}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t120 = this.{self::Test6a::[]=}(#t118, #t119){(core::String, core::double) → void} in #t119;
+    core::num v11 = let final core::String #t121 = "x" in let final core::num #t122 = this.{self::Test6a::[]}(#t121){(core::String) → core::num} in let final void #t123 = this.{self::Test6a::[]=}(#t121, #t122.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t122;
+  }
+}
+abstract class Test6b extends core::Object {
+  synthetic constructor •() → self::Test6b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num?;
+  abstract operator []=(core::String s, core::double? v) → void;
+  method test() → void {
+    core::num v6 = let final core::String #t124 = "x" in let final core::num? #t125 = this.{self::Test6b::[]}(#t124){(core::String) → core::num?} in #t125 == null ?{core::num} let final core::double #t126 = self::getDouble() in let final void #t127 = this.{self::Test6b::[]=}(#t124, #t126){(core::String, core::double?) → void} in #t126 : #t125{core::num};
+  }
+}
+abstract class Test7a extends core::Object {
+  synthetic constructor •() → self::Test7a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double;
+  abstract operator []=(core::String s, core::int v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t128 = "x" in let final core::int #t129 = self::getInt() in let final void #t130 = this.{self::Test7a::[]=}(#t128, #t129){(core::String, core::int) → void} in #t129;
+  }
+}
+abstract class Test7b extends core::Object {
+  synthetic constructor •() → self::Test7b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double?;
+  abstract operator []=(core::String s, core::int? v) → void;
+  method test() → void {
+    core::num v4 = let final core::String #t131 = "x" in let final core::double? #t132 = this.{self::Test7b::[]}(#t131){(core::String) → core::double?} in #t132 == null ?{core::num} let final core::int #t133 = self::getInt() in let final void #t134 = this.{self::Test7b::[]=}(#t131, #t133){(core::String, core::int?) → void} in #t133 : #t132{core::double};
+  }
+}
+abstract class Test8a extends core::Object {
+  synthetic constructor •() → self::Test8a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double;
+  abstract operator []=(core::String s, core::num v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t135 = "x" in let final core::int #t136 = self::getInt() in let final void #t137 = this.{self::Test8a::[]=}(#t135, #t136){(core::String, core::num) → void} in #t136;
+    core::num v2 = let final core::String #t138 = "x" in let final core::num #t139 = self::getNum() in let final void #t140 = this.{self::Test8a::[]=}(#t138, #t139){(core::String, core::num) → void} in #t139;
+    core::double v3 = let final core::String #t141 = "x" in let final core::double #t142 = self::getDouble() in let final void #t143 = this.{self::Test8a::[]=}(#t141, #t142){(core::String, core::num) → void} in #t142;
+    core::double v7 = let final core::String #t144 = "x" in let final core::double #t145 = this.{self::Test8a::[]}(#t144){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t146 = this.{self::Test8a::[]=}(#t144, #t145){(core::String, core::num) → void} in #t145;
+    core::double v8 = let final core::String #t147 = "x" in let final core::double #t148 = this.{self::Test8a::[]}(#t147){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t149 = this.{self::Test8a::[]=}(#t147, #t148){(core::String, core::num) → void} in #t148;
+    core::double v9 = let final core::String #t150 = "x" in let final core::double #t151 = this.{self::Test8a::[]}(#t150){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t152 = this.{self::Test8a::[]=}(#t150, #t151){(core::String, core::num) → void} in #t151;
+    core::double v10 = let final core::String #t153 = "x" in let final core::double #t154 = this.{self::Test8a::[]}(#t153){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t155 = this.{self::Test8a::[]=}(#t153, #t154){(core::String, core::num) → void} in #t154;
+    core::double v11 = let final core::String #t156 = "x" in let final core::double #t157 = this.{self::Test8a::[]}(#t156){(core::String) → core::double} in let final void #t158 = this.{self::Test8a::[]=}(#t156, #t157.{core::double::+}(1){(core::num) → core::double}){(core::String, core::num) → void} in #t157;
+  }
+}
+abstract class Test8b extends core::Object {
+  synthetic constructor •() → self::Test8b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double?;
+  abstract operator []=(core::String s, core::num? v) → void;
+  method test() → void {
+    core::num v4 = let final core::String #t159 = "x" in let final core::double? #t160 = this.{self::Test8b::[]}(#t159){(core::String) → core::double?} in #t160 == null ?{core::num} let final core::int #t161 = self::getInt() in let final void #t162 = this.{self::Test8b::[]=}(#t159, #t161){(core::String, core::num?) → void} in #t161 : #t160{core::double};
+    core::num v5 = let final core::String #t163 = "x" in let final core::double? #t164 = this.{self::Test8b::[]}(#t163){(core::String) → core::double?} in #t164 == null ?{core::num} let final core::num #t165 = self::getNum() in let final void #t166 = this.{self::Test8b::[]=}(#t163, #t165){(core::String, core::num?) → void} in #t165 : #t164{core::double};
+    core::double v6 = let final core::String #t167 = "x" in let final core::double? #t168 = this.{self::Test8b::[]}(#t167){(core::String) → core::double?} in #t168 == null ?{core::double} let final core::double #t169 = self::getDouble() in let final void #t170 = this.{self::Test8b::[]=}(#t167, #t169){(core::String, core::num?) → void} in #t169 : #t168{core::double};
+  }
+}
+abstract class Test9a extends core::Object {
+  synthetic constructor •() → self::Test9a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double;
+  abstract operator []=(core::String s, core::double v) → void;
+  method test() → void {
+    core::double v3 = let final core::String #t171 = "x" in let final core::double #t172 = self::getDouble() in let final void #t173 = this.{self::Test9a::[]=}(#t171, #t172){(core::String, core::double) → void} in #t172;
+    core::double v7 = let final core::String #t174 = "x" in let final core::double #t175 = this.{self::Test9a::[]}(#t174){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t176 = this.{self::Test9a::[]=}(#t174, #t175){(core::String, core::double) → void} in #t175;
+    core::double v8 = let final core::String #t177 = "x" in let final core::double #t178 = this.{self::Test9a::[]}(#t177){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t179 = this.{self::Test9a::[]=}(#t177, #t178){(core::String, core::double) → void} in #t178;
+    core::double v9 = let final core::String #t180 = "x" in let final core::double #t181 = this.{self::Test9a::[]}(#t180){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t182 = this.{self::Test9a::[]=}(#t180, #t181){(core::String, core::double) → void} in #t181;
+    core::double v10 = let final core::String #t183 = "x" in let final core::double #t184 = this.{self::Test9a::[]}(#t183){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t185 = this.{self::Test9a::[]=}(#t183, #t184){(core::String, core::double) → void} in #t184;
+    core::double v11 = let final core::String #t186 = "x" in let final core::double #t187 = this.{self::Test9a::[]}(#t186){(core::String) → core::double} in let final void #t188 = this.{self::Test9a::[]=}(#t186, #t187.{core::double::+}(1){(core::num) → core::double}){(core::String, core::double) → void} in #t187;
+  }
+}
+abstract class Test9b extends core::Object {
+  synthetic constructor •() → self::Test9b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double?;
+  abstract operator []=(core::String s, core::double? v) → void;
+  method test() → void {
+    core::double v6 = let final core::String #t189 = "x" in let final core::double? #t190 = this.{self::Test9b::[]}(#t189){(core::String) → core::double?} in #t190 == null ?{core::double} let final core::double #t191 = self::getDouble() in let final void #t192 = this.{self::Test9b::[]=}(#t189, #t191){(core::String, core::double?) → void} in #t191 : #t190{core::double};
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.weak.modular.expect
new file mode 100644
index 0000000..92dd762
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.weak.modular.expect
@@ -0,0 +1,232 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Test1a extends core::Object {
+  synthetic constructor •() → self::Test1a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int;
+  abstract operator []=(core::String s, core::int v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t1 = "x" in let final core::int #t2 = self::getInt() in let final void #t3 = this.{self::Test1a::[]=}(#t1, #t2){(core::String, core::int) → void} in #t2;
+    core::int v7 = let final core::String #t4 = "x" in let final core::int #t5 = this.{self::Test1a::[]}(#t4){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = this.{self::Test1a::[]=}(#t4, #t5){(core::String, core::int) → void} in #t5;
+    core::int v10 = let final core::String #t7 = "x" in let final core::int #t8 = this.{self::Test1a::[]}(#t7){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t9 = this.{self::Test1a::[]=}(#t7, #t8){(core::String, core::int) → void} in #t8;
+    core::int v11 = let final core::String #t10 = "x" in let final core::int #t11 = this.{self::Test1a::[]}(#t10){(core::String) → core::int} in let final void #t12 = this.{self::Test1a::[]=}(#t10, #t11.{core::num::+}(1){(core::num) → core::int}){(core::String, core::int) → void} in #t11;
+  }
+}
+abstract class Test1b extends core::Object {
+  synthetic constructor •() → self::Test1b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int?;
+  abstract operator []=(core::String s, core::int? v) → void;
+  method test() → void {
+    core::int v4 = let final core::String #t13 = "x" in let final core::int? #t14 = this.{self::Test1b::[]}(#t13){(core::String) → core::int?} in #t14 == null ?{core::int} let final core::int #t15 = self::getInt() in let final void #t16 = this.{self::Test1b::[]=}(#t13, #t15){(core::String, core::int?) → void} in #t15 : #t14{core::int};
+  }
+}
+abstract class Test2a extends core::Object {
+  synthetic constructor •() → self::Test2a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int;
+  abstract operator []=(core::String s, core::num v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t17 = "x" in let final core::int #t18 = self::getInt() in let final void #t19 = this.{self::Test2a::[]=}(#t17, #t18){(core::String, core::num) → void} in #t18;
+    core::num v2 = let final core::String #t20 = "x" in let final core::num #t21 = self::getNum() in let final void #t22 = this.{self::Test2a::[]=}(#t20, #t21){(core::String, core::num) → void} in #t21;
+    core::double v3 = let final core::String #t23 = "x" in let final core::double #t24 = self::getDouble() in let final void #t25 = this.{self::Test2a::[]=}(#t23, #t24){(core::String, core::num) → void} in #t24;
+    core::int v7 = let final core::String #t26 = "x" in let final core::int #t27 = this.{self::Test2a::[]}(#t26){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t28 = this.{self::Test2a::[]=}(#t26, #t27){(core::String, core::num) → void} in #t27;
+    core::num v8 = let final core::String #t29 = "x" in let final core::num #t30 = this.{self::Test2a::[]}(#t29){(core::String) → core::int}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t31 = this.{self::Test2a::[]=}(#t29, #t30){(core::String, core::num) → void} in #t30;
+    core::double v9 = let final core::String #t32 = "x" in let final core::double #t33 = this.{self::Test2a::[]}(#t32){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t34 = this.{self::Test2a::[]=}(#t32, #t33){(core::String, core::num) → void} in #t33;
+    core::int v10 = let final core::String #t35 = "x" in let final core::int #t36 = this.{self::Test2a::[]}(#t35){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t37 = this.{self::Test2a::[]=}(#t35, #t36){(core::String, core::num) → void} in #t36;
+    core::int v11 = let final core::String #t38 = "x" in let final core::int #t39 = this.{self::Test2a::[]}(#t38){(core::String) → core::int} in let final void #t40 = this.{self::Test2a::[]=}(#t38, #t39.{core::num::+}(1){(core::num) → core::int}){(core::String, core::num) → void} in #t39;
+  }
+}
+abstract class Test2b extends core::Object {
+  synthetic constructor •() → self::Test2b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int?;
+  abstract operator []=(core::String s, core::num? v) → void;
+  method test() → void {
+    core::int v4 = let final core::String #t41 = "x" in let final core::int? #t42 = this.{self::Test2b::[]}(#t41){(core::String) → core::int?} in #t42 == null ?{core::int} let final core::int #t43 = self::getInt() in let final void #t44 = this.{self::Test2b::[]=}(#t41, #t43){(core::String, core::num?) → void} in #t43 : #t42{core::int};
+    core::num v5 = let final core::String #t45 = "x" in let final core::int? #t46 = this.{self::Test2b::[]}(#t45){(core::String) → core::int?} in #t46 == null ?{core::num} let final core::num #t47 = self::getNum() in let final void #t48 = this.{self::Test2b::[]=}(#t45, #t47){(core::String, core::num?) → void} in #t47 : #t46{core::int};
+    core::num v6 = let final core::String #t49 = "x" in let final core::int? #t50 = this.{self::Test2b::[]}(#t49){(core::String) → core::int?} in #t50 == null ?{core::num} let final core::double #t51 = self::getDouble() in let final void #t52 = this.{self::Test2b::[]=}(#t49, #t51){(core::String, core::num?) → void} in #t51 : #t50{core::int};
+  }
+}
+abstract class Test3a extends core::Object {
+  synthetic constructor •() → self::Test3a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int;
+  abstract operator []=(core::String s, core::double v) → void;
+  method test() → void {
+    core::double v3 = let final core::String #t53 = "x" in let final core::double #t54 = self::getDouble() in let final void #t55 = this.{self::Test3a::[]=}(#t53, #t54){(core::String, core::double) → void} in #t54;
+    core::double v9 = let final core::String #t56 = "x" in let final core::double #t57 = this.{self::Test3a::[]}(#t56){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t58 = this.{self::Test3a::[]=}(#t56, #t57){(core::String, core::double) → void} in #t57;
+    core::double v10 = let final core::String #t59 = "x" in let final core::double #t60 = this.{self::Test3a::[]}(#t59){(core::String) → core::int}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t61 = this.{self::Test3a::[]=}(#t59, #t60){(core::String, core::double) → void} in #t60;
+    core::int v11 = let final core::String #t62 = "x" in let final core::int #t63 = this.{self::Test3a::[]}(#t62){(core::String) → core::int} in let final void #t64 = this.{self::Test3a::[]=}(#t62, #t63.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t63;
+  }
+}
+abstract class Test3b extends core::Object {
+  synthetic constructor •() → self::Test3b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int?;
+  abstract operator []=(core::String s, core::double? v) → void;
+  method test() → void {
+    core::num v6 = let final core::String #t65 = "x" in let final core::int? #t66 = this.{self::Test3b::[]}(#t65){(core::String) → core::int?} in #t66 == null ?{core::num} let final core::double #t67 = self::getDouble() in let final void #t68 = this.{self::Test3b::[]=}(#t65, #t67){(core::String, core::double?) → void} in #t67 : #t66{core::int};
+  }
+}
+abstract class Test4a extends core::Object {
+  synthetic constructor •() → self::Test4a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num;
+  abstract operator []=(core::String s, core::int v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t69 = "x" in let final core::int #t70 = self::getInt() in let final void #t71 = this.{self::Test4a::[]=}(#t69, #t70){(core::String, core::int) → void} in #t70;
+  }
+}
+abstract class Test4b extends core::Object {
+  synthetic constructor •() → self::Test4b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num?;
+  abstract operator []=(core::String s, core::int? v) → void;
+  method test() → void {
+    core::num v4 = let final core::String #t72 = "x" in let final core::num? #t73 = this.{self::Test4b::[]}(#t72){(core::String) → core::num?} in #t73 == null ?{core::num} let final core::int #t74 = self::getInt() in let final void #t75 = this.{self::Test4b::[]=}(#t72, #t74){(core::String, core::int?) → void} in #t74 : #t73{core::num};
+  }
+}
+abstract class Test5a extends core::Object {
+  synthetic constructor •() → self::Test5a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num;
+  abstract operator []=(core::String s, core::num v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t76 = "x" in let final core::int #t77 = self::getInt() in let final void #t78 = this.{self::Test5a::[]=}(#t76, #t77){(core::String, core::num) → void} in #t77;
+    core::num v2 = let final core::String #t79 = "x" in let final core::num #t80 = self::getNum() in let final void #t81 = this.{self::Test5a::[]=}(#t79, #t80){(core::String, core::num) → void} in #t80;
+    core::double v3 = let final core::String #t82 = "x" in let final core::double #t83 = self::getDouble() in let final void #t84 = this.{self::Test5a::[]=}(#t82, #t83){(core::String, core::num) → void} in #t83;
+    core::num v7 = let final core::String #t85 = "x" in let final core::num #t86 = this.{self::Test5a::[]}(#t85){(core::String) → core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t87 = this.{self::Test5a::[]=}(#t85, #t86){(core::String, core::num) → void} in #t86;
+    core::num v8 = let final core::String #t88 = "x" in let final core::num #t89 = this.{self::Test5a::[]}(#t88){(core::String) → core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t90 = this.{self::Test5a::[]=}(#t88, #t89){(core::String, core::num) → void} in #t89;
+    core::double v9 = let final core::String #t91 = "x" in let final core::double #t92 = this.{self::Test5a::[]}(#t91){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t93 = this.{self::Test5a::[]=}(#t91, #t92){(core::String, core::num) → void} in #t92;
+    core::num v10 = let final core::String #t94 = "x" in let final core::num #t95 = this.{self::Test5a::[]}(#t94){(core::String) → core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t96 = this.{self::Test5a::[]=}(#t94, #t95){(core::String, core::num) → void} in #t95;
+    core::num v11 = let final core::String #t97 = "x" in let final core::num #t98 = this.{self::Test5a::[]}(#t97){(core::String) → core::num} in let final void #t99 = this.{self::Test5a::[]=}(#t97, #t98.{core::num::+}(1){(core::num) → core::num}){(core::String, core::num) → void} in #t98;
+  }
+}
+abstract class Test5b extends core::Object {
+  synthetic constructor •() → self::Test5b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num?;
+  abstract operator []=(core::String s, core::num? v) → void;
+  method test() → void {
+    core::num v4 = let final core::String #t100 = "x" in let final core::num? #t101 = this.{self::Test5b::[]}(#t100){(core::String) → core::num?} in #t101 == null ?{core::num} let final core::int #t102 = self::getInt() in let final void #t103 = this.{self::Test5b::[]=}(#t100, #t102){(core::String, core::num?) → void} in #t102 : #t101{core::num};
+    core::num v5 = let final core::String #t104 = "x" in let final core::num? #t105 = this.{self::Test5b::[]}(#t104){(core::String) → core::num?} in #t105 == null ?{core::num} let final core::num #t106 = self::getNum() in let final void #t107 = this.{self::Test5b::[]=}(#t104, #t106){(core::String, core::num?) → void} in #t106 : #t105{core::num};
+    core::num v6 = let final core::String #t108 = "x" in let final core::num? #t109 = this.{self::Test5b::[]}(#t108){(core::String) → core::num?} in #t109 == null ?{core::num} let final core::double #t110 = self::getDouble() in let final void #t111 = this.{self::Test5b::[]=}(#t108, #t110){(core::String, core::num?) → void} in #t110 : #t109{core::num};
+  }
+}
+abstract class Test6a extends core::Object {
+  synthetic constructor •() → self::Test6a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num;
+  abstract operator []=(core::String s, core::double v) → void;
+  method test() → void {
+    core::double v3 = let final core::String #t112 = "x" in let final core::double #t113 = self::getDouble() in let final void #t114 = this.{self::Test6a::[]=}(#t112, #t113){(core::String, core::double) → void} in #t113;
+    core::double v9 = let final core::String #t115 = "x" in let final core::double #t116 = this.{self::Test6a::[]}(#t115){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t117 = this.{self::Test6a::[]=}(#t115, #t116){(core::String, core::double) → void} in #t116;
+    core::double v10 = let final core::String #t118 = "x" in let final core::double #t119 = this.{self::Test6a::[]}(#t118){(core::String) → core::num}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t120 = this.{self::Test6a::[]=}(#t118, #t119){(core::String, core::double) → void} in #t119;
+    core::num v11 = let final core::String #t121 = "x" in let final core::num #t122 = this.{self::Test6a::[]}(#t121){(core::String) → core::num} in let final void #t123 = this.{self::Test6a::[]=}(#t121, #t122.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t122;
+  }
+}
+abstract class Test6b extends core::Object {
+  synthetic constructor •() → self::Test6b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num?;
+  abstract operator []=(core::String s, core::double? v) → void;
+  method test() → void {
+    core::num v6 = let final core::String #t124 = "x" in let final core::num? #t125 = this.{self::Test6b::[]}(#t124){(core::String) → core::num?} in #t125 == null ?{core::num} let final core::double #t126 = self::getDouble() in let final void #t127 = this.{self::Test6b::[]=}(#t124, #t126){(core::String, core::double?) → void} in #t126 : #t125{core::num};
+  }
+}
+abstract class Test7a extends core::Object {
+  synthetic constructor •() → self::Test7a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double;
+  abstract operator []=(core::String s, core::int v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t128 = "x" in let final core::int #t129 = self::getInt() in let final void #t130 = this.{self::Test7a::[]=}(#t128, #t129){(core::String, core::int) → void} in #t129;
+  }
+}
+abstract class Test7b extends core::Object {
+  synthetic constructor •() → self::Test7b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double?;
+  abstract operator []=(core::String s, core::int? v) → void;
+  method test() → void {
+    core::num v4 = let final core::String #t131 = "x" in let final core::double? #t132 = this.{self::Test7b::[]}(#t131){(core::String) → core::double?} in #t132 == null ?{core::num} let final core::int #t133 = self::getInt() in let final void #t134 = this.{self::Test7b::[]=}(#t131, #t133){(core::String, core::int?) → void} in #t133 : #t132{core::double};
+  }
+}
+abstract class Test8a extends core::Object {
+  synthetic constructor •() → self::Test8a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double;
+  abstract operator []=(core::String s, core::num v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t135 = "x" in let final core::int #t136 = self::getInt() in let final void #t137 = this.{self::Test8a::[]=}(#t135, #t136){(core::String, core::num) → void} in #t136;
+    core::num v2 = let final core::String #t138 = "x" in let final core::num #t139 = self::getNum() in let final void #t140 = this.{self::Test8a::[]=}(#t138, #t139){(core::String, core::num) → void} in #t139;
+    core::double v3 = let final core::String #t141 = "x" in let final core::double #t142 = self::getDouble() in let final void #t143 = this.{self::Test8a::[]=}(#t141, #t142){(core::String, core::num) → void} in #t142;
+    core::double v7 = let final core::String #t144 = "x" in let final core::double #t145 = this.{self::Test8a::[]}(#t144){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t146 = this.{self::Test8a::[]=}(#t144, #t145){(core::String, core::num) → void} in #t145;
+    core::double v8 = let final core::String #t147 = "x" in let final core::double #t148 = this.{self::Test8a::[]}(#t147){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t149 = this.{self::Test8a::[]=}(#t147, #t148){(core::String, core::num) → void} in #t148;
+    core::double v9 = let final core::String #t150 = "x" in let final core::double #t151 = this.{self::Test8a::[]}(#t150){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t152 = this.{self::Test8a::[]=}(#t150, #t151){(core::String, core::num) → void} in #t151;
+    core::double v10 = let final core::String #t153 = "x" in let final core::double #t154 = this.{self::Test8a::[]}(#t153){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t155 = this.{self::Test8a::[]=}(#t153, #t154){(core::String, core::num) → void} in #t154;
+    core::double v11 = let final core::String #t156 = "x" in let final core::double #t157 = this.{self::Test8a::[]}(#t156){(core::String) → core::double} in let final void #t158 = this.{self::Test8a::[]=}(#t156, #t157.{core::double::+}(1){(core::num) → core::double}){(core::String, core::num) → void} in #t157;
+  }
+}
+abstract class Test8b extends core::Object {
+  synthetic constructor •() → self::Test8b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double?;
+  abstract operator []=(core::String s, core::num? v) → void;
+  method test() → void {
+    core::num v4 = let final core::String #t159 = "x" in let final core::double? #t160 = this.{self::Test8b::[]}(#t159){(core::String) → core::double?} in #t160 == null ?{core::num} let final core::int #t161 = self::getInt() in let final void #t162 = this.{self::Test8b::[]=}(#t159, #t161){(core::String, core::num?) → void} in #t161 : #t160{core::double};
+    core::num v5 = let final core::String #t163 = "x" in let final core::double? #t164 = this.{self::Test8b::[]}(#t163){(core::String) → core::double?} in #t164 == null ?{core::num} let final core::num #t165 = self::getNum() in let final void #t166 = this.{self::Test8b::[]=}(#t163, #t165){(core::String, core::num?) → void} in #t165 : #t164{core::double};
+    core::double v6 = let final core::String #t167 = "x" in let final core::double? #t168 = this.{self::Test8b::[]}(#t167){(core::String) → core::double?} in #t168 == null ?{core::double} let final core::double #t169 = self::getDouble() in let final void #t170 = this.{self::Test8b::[]=}(#t167, #t169){(core::String, core::num?) → void} in #t169 : #t168{core::double};
+  }
+}
+abstract class Test9a extends core::Object {
+  synthetic constructor •() → self::Test9a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double;
+  abstract operator []=(core::String s, core::double v) → void;
+  method test() → void {
+    core::double v3 = let final core::String #t171 = "x" in let final core::double #t172 = self::getDouble() in let final void #t173 = this.{self::Test9a::[]=}(#t171, #t172){(core::String, core::double) → void} in #t172;
+    core::double v7 = let final core::String #t174 = "x" in let final core::double #t175 = this.{self::Test9a::[]}(#t174){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t176 = this.{self::Test9a::[]=}(#t174, #t175){(core::String, core::double) → void} in #t175;
+    core::double v8 = let final core::String #t177 = "x" in let final core::double #t178 = this.{self::Test9a::[]}(#t177){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t179 = this.{self::Test9a::[]=}(#t177, #t178){(core::String, core::double) → void} in #t178;
+    core::double v9 = let final core::String #t180 = "x" in let final core::double #t181 = this.{self::Test9a::[]}(#t180){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t182 = this.{self::Test9a::[]=}(#t180, #t181){(core::String, core::double) → void} in #t181;
+    core::double v10 = let final core::String #t183 = "x" in let final core::double #t184 = this.{self::Test9a::[]}(#t183){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t185 = this.{self::Test9a::[]=}(#t183, #t184){(core::String, core::double) → void} in #t184;
+    core::double v11 = let final core::String #t186 = "x" in let final core::double #t187 = this.{self::Test9a::[]}(#t186){(core::String) → core::double} in let final void #t188 = this.{self::Test9a::[]=}(#t186, #t187.{core::double::+}(1){(core::num) → core::double}){(core::String, core::double) → void} in #t187;
+  }
+}
+abstract class Test9b extends core::Object {
+  synthetic constructor •() → self::Test9b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double?;
+  abstract operator []=(core::String s, core::double? v) → void;
+  method test() → void {
+    core::double v6 = let final core::String #t189 = "x" in let final core::double? #t190 = this.{self::Test9b::[]}(#t189){(core::String) → core::double?} in #t190 == null ?{core::double} let final core::double #t191 = self::getDouble() in let final void #t192 = this.{self::Test9b::[]=}(#t189, #t191){(core::String, core::double?) → void} in #t191 : #t190{core::double};
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.weak.outline.expect
new file mode 100644
index 0000000..f1fc4fc
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.weak.outline.expect
@@ -0,0 +1,156 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Test1a extends core::Object {
+  synthetic constructor •() → self::Test1a
+    ;
+  abstract operator [](core::String s) → core::int;
+  abstract operator []=(core::String s, core::int v) → void;
+  method test() → void
+    ;
+}
+abstract class Test1b extends core::Object {
+  synthetic constructor •() → self::Test1b
+    ;
+  abstract operator [](core::String s) → core::int?;
+  abstract operator []=(core::String s, core::int? v) → void;
+  method test() → void
+    ;
+}
+abstract class Test2a extends core::Object {
+  synthetic constructor •() → self::Test2a
+    ;
+  abstract operator [](core::String s) → core::int;
+  abstract operator []=(core::String s, core::num v) → void;
+  method test() → void
+    ;
+}
+abstract class Test2b extends core::Object {
+  synthetic constructor •() → self::Test2b
+    ;
+  abstract operator [](core::String s) → core::int?;
+  abstract operator []=(core::String s, core::num? v) → void;
+  method test() → void
+    ;
+}
+abstract class Test3a extends core::Object {
+  synthetic constructor •() → self::Test3a
+    ;
+  abstract operator [](core::String s) → core::int;
+  abstract operator []=(core::String s, core::double v) → void;
+  method test() → void
+    ;
+}
+abstract class Test3b extends core::Object {
+  synthetic constructor •() → self::Test3b
+    ;
+  abstract operator [](core::String s) → core::int?;
+  abstract operator []=(core::String s, core::double? v) → void;
+  method test() → void
+    ;
+}
+abstract class Test4a extends core::Object {
+  synthetic constructor •() → self::Test4a
+    ;
+  abstract operator [](core::String s) → core::num;
+  abstract operator []=(core::String s, core::int v) → void;
+  method test() → void
+    ;
+}
+abstract class Test4b extends core::Object {
+  synthetic constructor •() → self::Test4b
+    ;
+  abstract operator [](core::String s) → core::num?;
+  abstract operator []=(core::String s, core::int? v) → void;
+  method test() → void
+    ;
+}
+abstract class Test5a extends core::Object {
+  synthetic constructor •() → self::Test5a
+    ;
+  abstract operator [](core::String s) → core::num;
+  abstract operator []=(core::String s, core::num v) → void;
+  method test() → void
+    ;
+}
+abstract class Test5b extends core::Object {
+  synthetic constructor •() → self::Test5b
+    ;
+  abstract operator [](core::String s) → core::num?;
+  abstract operator []=(core::String s, core::num? v) → void;
+  method test() → void
+    ;
+}
+abstract class Test6a extends core::Object {
+  synthetic constructor •() → self::Test6a
+    ;
+  abstract operator [](core::String s) → core::num;
+  abstract operator []=(core::String s, core::double v) → void;
+  method test() → void
+    ;
+}
+abstract class Test6b extends core::Object {
+  synthetic constructor •() → self::Test6b
+    ;
+  abstract operator [](core::String s) → core::num?;
+  abstract operator []=(core::String s, core::double? v) → void;
+  method test() → void
+    ;
+}
+abstract class Test7a extends core::Object {
+  synthetic constructor •() → self::Test7a
+    ;
+  abstract operator [](core::String s) → core::double;
+  abstract operator []=(core::String s, core::int v) → void;
+  method test() → void
+    ;
+}
+abstract class Test7b extends core::Object {
+  synthetic constructor •() → self::Test7b
+    ;
+  abstract operator [](core::String s) → core::double?;
+  abstract operator []=(core::String s, core::int? v) → void;
+  method test() → void
+    ;
+}
+abstract class Test8a extends core::Object {
+  synthetic constructor •() → self::Test8a
+    ;
+  abstract operator [](core::String s) → core::double;
+  abstract operator []=(core::String s, core::num v) → void;
+  method test() → void
+    ;
+}
+abstract class Test8b extends core::Object {
+  synthetic constructor •() → self::Test8b
+    ;
+  abstract operator [](core::String s) → core::double?;
+  abstract operator []=(core::String s, core::num? v) → void;
+  method test() → void
+    ;
+}
+abstract class Test9a extends core::Object {
+  synthetic constructor •() → self::Test9a
+    ;
+  abstract operator [](core::String s) → core::double;
+  abstract operator []=(core::String s, core::double v) → void;
+  method test() → void
+    ;
+}
+abstract class Test9b extends core::Object {
+  synthetic constructor •() → self::Test9b
+    ;
+  abstract operator [](core::String s) → core::double?;
+  abstract operator []=(core::String s, core::double? v) → void;
+  method test() → void
+    ;
+}
+static method getInt() → core::int
+  ;
+static method getNum() → core::num
+  ;
+static method getDouble() → core::double
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.weak.transformed.expect
new file mode 100644
index 0000000..ec83945
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards2.dart.weak.transformed.expect
@@ -0,0 +1,339 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Test1a extends core::Object {
+  synthetic constructor •() → self::Test1a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int;
+  abstract operator []=(core::String s, core::int v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t1 = "x" in let final core::int #t2 = self::getInt() in let final void #t3 = this.{self::Test1a::[]=}(#t1, #t2){(core::String, core::int) → void} in #t2;
+    core::int v7 = let final core::String #t4 = "x" in let final core::int #t5 = this.{self::Test1a::[]}(#t4){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = this.{self::Test1a::[]=}(#t4, #t5){(core::String, core::int) → void} in #t5;
+    core::int v10 = let final core::String #t7 = "x" in let final core::int #t8 = this.{self::Test1a::[]}(#t7){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t9 = this.{self::Test1a::[]=}(#t7, #t8){(core::String, core::int) → void} in #t8;
+    core::int v11 = let final core::String #t10 = "x" in let final core::int #t11 = this.{self::Test1a::[]}(#t10){(core::String) → core::int} in let final void #t12 = this.{self::Test1a::[]=}(#t10, #t11.{core::num::+}(1){(core::num) → core::int}){(core::String, core::int) → void} in #t11;
+  }
+}
+abstract class Test1b extends core::Object {
+  synthetic constructor •() → self::Test1b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int?;
+  abstract operator []=(core::String s, core::int? v) → void;
+  method test() → void {
+    core::int v4 = let final core::String #t13 = "x" in let final core::int? #t14 = this.{self::Test1b::[]}(#t13){(core::String) → core::int?} in #t14 == null ?{core::int} let final core::int #t15 = self::getInt() in let final void #t16 = this.{self::Test1b::[]=}(#t13, #t15){(core::String, core::int?) → void} in #t15 : #t14{core::int};
+  }
+}
+abstract class Test2a extends core::Object {
+  synthetic constructor •() → self::Test2a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int;
+  abstract operator []=(core::String s, core::num v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t17 = "x" in let final core::int #t18 = self::getInt() in let final void #t19 = this.{self::Test2a::[]=}(#t17, #t18){(core::String, core::num) → void} in #t18;
+    core::num v2 = let final core::String #t20 = "x" in let final core::num #t21 = self::getNum() in let final void #t22 = this.{self::Test2a::[]=}(#t20, #t21){(core::String, core::num) → void} in #t21;
+    core::double v3 = let final core::String #t23 = "x" in let final core::double #t24 = self::getDouble() in let final void #t25 = this.{self::Test2a::[]=}(#t23, #t24){(core::String, core::num) → void} in #t24;
+    core::int v7 = let final core::String #t26 = "x" in let final core::int #t27 = this.{self::Test2a::[]}(#t26){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t28 = this.{self::Test2a::[]=}(#t26, #t27){(core::String, core::num) → void} in #t27;
+    core::num v8 = let final core::String #t29 = "x" in let final core::num #t30 = this.{self::Test2a::[]}(#t29){(core::String) → core::int}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t31 = this.{self::Test2a::[]=}(#t29, #t30){(core::String, core::num) → void} in #t30;
+    core::double v9 = let final core::String #t32 = "x" in let final core::double #t33 = this.{self::Test2a::[]}(#t32){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t34 = this.{self::Test2a::[]=}(#t32, #t33){(core::String, core::num) → void} in #t33;
+    core::int v10 = let final core::String #t35 = "x" in let final core::int #t36 = this.{self::Test2a::[]}(#t35){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t37 = this.{self::Test2a::[]=}(#t35, #t36){(core::String, core::num) → void} in #t36;
+    core::int v11 = let final core::String #t38 = "x" in let final core::int #t39 = this.{self::Test2a::[]}(#t38){(core::String) → core::int} in let final void #t40 = this.{self::Test2a::[]=}(#t38, #t39.{core::num::+}(1){(core::num) → core::int}){(core::String, core::num) → void} in #t39;
+  }
+}
+abstract class Test2b extends core::Object {
+  synthetic constructor •() → self::Test2b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int?;
+  abstract operator []=(core::String s, core::num? v) → void;
+  method test() → void {
+    core::int v4 = let final core::String #t41 = "x" in let final core::int? #t42 = this.{self::Test2b::[]}(#t41){(core::String) → core::int?} in #t42 == null ?{core::int} let final core::int #t43 = self::getInt() in let final void #t44 = this.{self::Test2b::[]=}(#t41, #t43){(core::String, core::num?) → void} in #t43 : #t42{core::int};
+    core::num v5 = let final core::String #t45 = "x" in let final core::int? #t46 = this.{self::Test2b::[]}(#t45){(core::String) → core::int?} in #t46 == null ?{core::num} let final core::num #t47 = self::getNum() in let final void #t48 = this.{self::Test2b::[]=}(#t45, #t47){(core::String, core::num?) → void} in #t47 : #t46{core::int};
+    core::num v6 = let final core::String #t49 = "x" in let final core::int? #t50 = this.{self::Test2b::[]}(#t49){(core::String) → core::int?} in #t50 == null ?{core::num} let final core::double #t51 = self::getDouble() in let final void #t52 = this.{self::Test2b::[]=}(#t49, #t51){(core::String, core::num?) → void} in #t51 : #t50{core::int};
+  }
+}
+abstract class Test3a extends core::Object {
+  synthetic constructor •() → self::Test3a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int;
+  abstract operator []=(core::String s, core::double v) → void;
+  method test() → void {
+    core::double v3 = let final core::String #t53 = "x" in let final core::double #t54 = self::getDouble() in let final void #t55 = this.{self::Test3a::[]=}(#t53, #t54){(core::String, core::double) → void} in #t54;
+    core::double v9 = let final core::String #t56 = "x" in let final core::double #t57 = this.{self::Test3a::[]}(#t56){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t58 = this.{self::Test3a::[]=}(#t56, #t57){(core::String, core::double) → void} in #t57;
+    core::double v10 = let final core::String #t59 = "x" in let final core::double #t60 = this.{self::Test3a::[]}(#t59){(core::String) → core::int}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t61 = this.{self::Test3a::[]=}(#t59, #t60){(core::String, core::double) → void} in #t60;
+    core::int v11 = let final core::String #t62 = "x" in let final core::int #t63 = this.{self::Test3a::[]}(#t62){(core::String) → core::int} in let final void #t64 = this.{self::Test3a::[]=}(#t62, #t63.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t63;
+  }
+}
+abstract class Test3b extends core::Object {
+  synthetic constructor •() → self::Test3b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::int?;
+  abstract operator []=(core::String s, core::double? v) → void;
+  method test() → void {
+    core::num v6 = let final core::String #t65 = "x" in let final core::int? #t66 = this.{self::Test3b::[]}(#t65){(core::String) → core::int?} in #t66 == null ?{core::num} let final core::double #t67 = self::getDouble() in let final void #t68 = this.{self::Test3b::[]=}(#t65, #t67){(core::String, core::double?) → void} in #t67 : #t66{core::int};
+  }
+}
+abstract class Test4a extends core::Object {
+  synthetic constructor •() → self::Test4a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num;
+  abstract operator []=(core::String s, core::int v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t69 = "x" in let final core::int #t70 = self::getInt() in let final void #t71 = this.{self::Test4a::[]=}(#t69, #t70){(core::String, core::int) → void} in #t70;
+  }
+}
+abstract class Test4b extends core::Object {
+  synthetic constructor •() → self::Test4b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num?;
+  abstract operator []=(core::String s, core::int? v) → void;
+  method test() → void {
+    core::num v4 = let final core::String #t72 = "x" in let final core::num? #t73 = this.{self::Test4b::[]}(#t72){(core::String) → core::num?} in #t73 == null ?{core::num} let final core::int #t74 = self::getInt() in let final void #t75 = this.{self::Test4b::[]=}(#t72, #t74){(core::String, core::int?) → void} in #t74 : #t73{core::num};
+  }
+}
+abstract class Test5a extends core::Object {
+  synthetic constructor •() → self::Test5a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num;
+  abstract operator []=(core::String s, core::num v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t76 = "x" in let final core::int #t77 = self::getInt() in let final void #t78 = this.{self::Test5a::[]=}(#t76, #t77){(core::String, core::num) → void} in #t77;
+    core::num v2 = let final core::String #t79 = "x" in let final core::num #t80 = self::getNum() in let final void #t81 = this.{self::Test5a::[]=}(#t79, #t80){(core::String, core::num) → void} in #t80;
+    core::double v3 = let final core::String #t82 = "x" in let final core::double #t83 = self::getDouble() in let final void #t84 = this.{self::Test5a::[]=}(#t82, #t83){(core::String, core::num) → void} in #t83;
+    core::num v7 = let final core::String #t85 = "x" in let final core::num #t86 = this.{self::Test5a::[]}(#t85){(core::String) → core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t87 = this.{self::Test5a::[]=}(#t85, #t86){(core::String, core::num) → void} in #t86;
+    core::num v8 = let final core::String #t88 = "x" in let final core::num #t89 = this.{self::Test5a::[]}(#t88){(core::String) → core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t90 = this.{self::Test5a::[]=}(#t88, #t89){(core::String, core::num) → void} in #t89;
+    core::double v9 = let final core::String #t91 = "x" in let final core::double #t92 = this.{self::Test5a::[]}(#t91){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t93 = this.{self::Test5a::[]=}(#t91, #t92){(core::String, core::num) → void} in #t92;
+    core::num v10 = let final core::String #t94 = "x" in let final core::num #t95 = this.{self::Test5a::[]}(#t94){(core::String) → core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t96 = this.{self::Test5a::[]=}(#t94, #t95){(core::String, core::num) → void} in #t95;
+    core::num v11 = let final core::String #t97 = "x" in let final core::num #t98 = this.{self::Test5a::[]}(#t97){(core::String) → core::num} in let final void #t99 = this.{self::Test5a::[]=}(#t97, #t98.{core::num::+}(1){(core::num) → core::num}){(core::String, core::num) → void} in #t98;
+  }
+}
+abstract class Test5b extends core::Object {
+  synthetic constructor •() → self::Test5b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num?;
+  abstract operator []=(core::String s, core::num? v) → void;
+  method test() → void {
+    core::num v4 = let final core::String #t100 = "x" in let final core::num? #t101 = this.{self::Test5b::[]}(#t100){(core::String) → core::num?} in #t101 == null ?{core::num} let final core::int #t102 = self::getInt() in let final void #t103 = this.{self::Test5b::[]=}(#t100, #t102){(core::String, core::num?) → void} in #t102 : #t101{core::num};
+    core::num v5 = let final core::String #t104 = "x" in let final core::num? #t105 = this.{self::Test5b::[]}(#t104){(core::String) → core::num?} in #t105 == null ?{core::num} let final core::num #t106 = self::getNum() in let final void #t107 = this.{self::Test5b::[]=}(#t104, #t106){(core::String, core::num?) → void} in #t106 : #t105{core::num};
+    core::num v6 = let final core::String #t108 = "x" in let final core::num? #t109 = this.{self::Test5b::[]}(#t108){(core::String) → core::num?} in #t109 == null ?{core::num} let final core::double #t110 = self::getDouble() in let final void #t111 = this.{self::Test5b::[]=}(#t108, #t110){(core::String, core::num?) → void} in #t110 : #t109{core::num};
+  }
+}
+abstract class Test6a extends core::Object {
+  synthetic constructor •() → self::Test6a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num;
+  abstract operator []=(core::String s, core::double v) → void;
+  method test() → void {
+    core::double v3 = let final core::String #t112 = "x" in let final core::double #t113 = self::getDouble() in let final void #t114 = this.{self::Test6a::[]=}(#t112, #t113){(core::String, core::double) → void} in #t113;
+    core::double v9 = let final core::String #t115 = "x" in let final core::double #t116 = this.{self::Test6a::[]}(#t115){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t117 = this.{self::Test6a::[]=}(#t115, #t116){(core::String, core::double) → void} in #t116;
+    core::double v10 = let final core::String #t118 = "x" in let final core::double #t119 = this.{self::Test6a::[]}(#t118){(core::String) → core::num}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t120 = this.{self::Test6a::[]=}(#t118, #t119){(core::String, core::double) → void} in #t119;
+    core::num v11 = let final core::String #t121 = "x" in let final core::num #t122 = this.{self::Test6a::[]}(#t121){(core::String) → core::num} in let final void #t123 = this.{self::Test6a::[]=}(#t121, #t122.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t122;
+  }
+}
+abstract class Test6b extends core::Object {
+  synthetic constructor •() → self::Test6b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::num?;
+  abstract operator []=(core::String s, core::double? v) → void;
+  method test() → void {
+    core::num v6 = let final core::String #t124 = "x" in let final core::num? #t125 = this.{self::Test6b::[]}(#t124){(core::String) → core::num?} in #t125 == null ?{core::num} let final core::double #t126 = self::getDouble() in let final void #t127 = this.{self::Test6b::[]=}(#t124, #t126){(core::String, core::double?) → void} in #t126 : #t125{core::num};
+  }
+}
+abstract class Test7a extends core::Object {
+  synthetic constructor •() → self::Test7a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double;
+  abstract operator []=(core::String s, core::int v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t128 = "x" in let final core::int #t129 = self::getInt() in let final void #t130 = this.{self::Test7a::[]=}(#t128, #t129){(core::String, core::int) → void} in #t129;
+  }
+}
+abstract class Test7b extends core::Object {
+  synthetic constructor •() → self::Test7b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double?;
+  abstract operator []=(core::String s, core::int? v) → void;
+  method test() → void {
+    core::num v4 = let final core::String #t131 = "x" in let final core::double? #t132 = this.{self::Test7b::[]}(#t131){(core::String) → core::double?} in #t132 == null ?{core::num} let final core::int #t133 = self::getInt() in let final void #t134 = this.{self::Test7b::[]=}(#t131, #t133){(core::String, core::int?) → void} in #t133 : #t132{core::double};
+  }
+}
+abstract class Test8a extends core::Object {
+  synthetic constructor •() → self::Test8a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double;
+  abstract operator []=(core::String s, core::num v) → void;
+  method test() → void {
+    core::int v1 = let final core::String #t135 = "x" in let final core::int #t136 = self::getInt() in let final void #t137 = this.{self::Test8a::[]=}(#t135, #t136){(core::String, core::num) → void} in #t136;
+    core::num v2 = let final core::String #t138 = "x" in let final core::num #t139 = self::getNum() in let final void #t140 = this.{self::Test8a::[]=}(#t138, #t139){(core::String, core::num) → void} in #t139;
+    core::double v3 = let final core::String #t141 = "x" in let final core::double #t142 = self::getDouble() in let final void #t143 = this.{self::Test8a::[]=}(#t141, #t142){(core::String, core::num) → void} in #t142;
+    core::double v7 = let final core::String #t144 = "x" in let final core::double #t145 = this.{self::Test8a::[]}(#t144){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t146 = this.{self::Test8a::[]=}(#t144, #t145){(core::String, core::num) → void} in #t145;
+    core::double v8 = let final core::String #t147 = "x" in let final core::double #t148 = this.{self::Test8a::[]}(#t147){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t149 = this.{self::Test8a::[]=}(#t147, #t148){(core::String, core::num) → void} in #t148;
+    core::double v9 = let final core::String #t150 = "x" in let final core::double #t151 = this.{self::Test8a::[]}(#t150){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t152 = this.{self::Test8a::[]=}(#t150, #t151){(core::String, core::num) → void} in #t151;
+    core::double v10 = let final core::String #t153 = "x" in let final core::double #t154 = this.{self::Test8a::[]}(#t153){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t155 = this.{self::Test8a::[]=}(#t153, #t154){(core::String, core::num) → void} in #t154;
+    core::double v11 = let final core::String #t156 = "x" in let final core::double #t157 = this.{self::Test8a::[]}(#t156){(core::String) → core::double} in let final void #t158 = this.{self::Test8a::[]=}(#t156, #t157.{core::double::+}(1){(core::num) → core::double}){(core::String, core::num) → void} in #t157;
+  }
+}
+abstract class Test8b extends core::Object {
+  synthetic constructor •() → self::Test8b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double?;
+  abstract operator []=(core::String s, core::num? v) → void;
+  method test() → void {
+    core::num v4 = let final core::String #t159 = "x" in let final core::double? #t160 = this.{self::Test8b::[]}(#t159){(core::String) → core::double?} in #t160 == null ?{core::num} let final core::int #t161 = self::getInt() in let final void #t162 = this.{self::Test8b::[]=}(#t159, #t161){(core::String, core::num?) → void} in #t161 : #t160{core::double};
+    core::num v5 = let final core::String #t163 = "x" in let final core::double? #t164 = this.{self::Test8b::[]}(#t163){(core::String) → core::double?} in #t164 == null ?{core::num} let final core::num #t165 = self::getNum() in let final void #t166 = this.{self::Test8b::[]=}(#t163, #t165){(core::String, core::num?) → void} in #t165 : #t164{core::double};
+    core::double v6 = let final core::String #t167 = "x" in let final core::double? #t168 = this.{self::Test8b::[]}(#t167){(core::String) → core::double?} in #t168 == null ?{core::double} let final core::double #t169 = self::getDouble() in let final void #t170 = this.{self::Test8b::[]=}(#t167, #t169){(core::String, core::num?) → void} in #t169 : #t168{core::double};
+  }
+}
+abstract class Test9a extends core::Object {
+  synthetic constructor •() → self::Test9a
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double;
+  abstract operator []=(core::String s, core::double v) → void;
+  method test() → void {
+    core::double v3 = let final core::String #t171 = "x" in let final core::double #t172 = self::getDouble() in let final void #t173 = this.{self::Test9a::[]=}(#t171, #t172){(core::String, core::double) → void} in #t172;
+    core::double v7 = let final core::String #t174 = "x" in let final core::double #t175 = this.{self::Test9a::[]}(#t174){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t176 = this.{self::Test9a::[]=}(#t174, #t175){(core::String, core::double) → void} in #t175;
+    core::double v8 = let final core::String #t177 = "x" in let final core::double #t178 = this.{self::Test9a::[]}(#t177){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t179 = this.{self::Test9a::[]=}(#t177, #t178){(core::String, core::double) → void} in #t178;
+    core::double v9 = let final core::String #t180 = "x" in let final core::double #t181 = this.{self::Test9a::[]}(#t180){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t182 = this.{self::Test9a::[]=}(#t180, #t181){(core::String, core::double) → void} in #t181;
+    core::double v10 = let final core::String #t183 = "x" in let final core::double #t184 = this.{self::Test9a::[]}(#t183){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t185 = this.{self::Test9a::[]=}(#t183, #t184){(core::String, core::double) → void} in #t184;
+    core::double v11 = let final core::String #t186 = "x" in let final core::double #t187 = this.{self::Test9a::[]}(#t186){(core::String) → core::double} in let final void #t188 = this.{self::Test9a::[]=}(#t186, #t187.{core::double::+}(1){(core::num) → core::double}){(core::String, core::double) → void} in #t187;
+  }
+}
+abstract class Test9b extends core::Object {
+  synthetic constructor •() → self::Test9b
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → core::double?;
+  abstract operator []=(core::String s, core::double? v) → void;
+  method test() → void {
+    core::double v6 = let final core::String #t189 = "x" in let final core::double? #t190 = this.{self::Test9b::[]}(#t189){(core::String) → core::double?} in #t190 == null ?{core::double} let final core::double #t191 = self::getDouble() in let final void #t192 = this.{self::Test9b::[]=}(#t189, #t191){(core::String, core::double?) → void} in #t191 : #t190{core::double};
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:17:57 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:20:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:20:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:23:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:23:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:26:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:26:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:36:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:36:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:45:57 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:47:57 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:49:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:52:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:52:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:55:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:55:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:59:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:59:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:62:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:62:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:65:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:65:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:75:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:75:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:78:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:78:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:81:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:81:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:90:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:94:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:94:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:97:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:97:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:100:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:100:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:110:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:110:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:119:57 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:129:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:129:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:138:57 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:140:57 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:142:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:145:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:145:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:148:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:148:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:152:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:152:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:155:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:155:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:158:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:158:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:168:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:168:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:171:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:171:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:174:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:174:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:183:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:187:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:187:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:190:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:190:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:193:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:193:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:203:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:203:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:212:57 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:222:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:222:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:231:57 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:233:57 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:235:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:239:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:239:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:243:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:243:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:247:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:247:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:250:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:250:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:254:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:254:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:264:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:264:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:267:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:267:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:270:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:270:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:279:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:283:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:283:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:287:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:287:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:291:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:291:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:294:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:294:9 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:298:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:298:13 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:308:60 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_this_upwards2.dart:308:60 -> StringConstant("x")
+Extra constant evaluation: evaluated: 753, effectively constant: 103
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart
index 7980f3f..73267db 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -15,278 +17,278 @@
 }
 
 void test1(Test<int, int> t) {
-  var /*@ type=int* */ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
+  var /*@type=int**/ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
 
-  var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
+  var /*@type=num**/ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
 
-  var /*@ type=int* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=int**/ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getInt();
 
-  var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getNum();
 
-  var /*@ type=int* */ v7 =
+  var /*@type=int**/ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getInt();
 
-  var /*@ type=num* */ v8 =
+  var /*@type=num**/ v8 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getNum();
 
-  var /*@ type=int* */ v10 =
+  var /*@type=int**/ v10 =
       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
 
-  var /*@ type=int* */ v11 =
+  var /*@type=int**/ v11 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
 }
 
 void test2(Test<int, num> t) {
-  var /*@ type=int* */ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
+  var /*@type=int**/ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
 
-  var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
+  var /*@type=num**/ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
 
-  var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
+  var /*@type=double**/ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
 
-  var /*@ type=int* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=int**/ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getInt();
 
-  var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getNum();
 
-  var /*@ type=num* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getDouble();
 
-  var /*@ type=int* */ v7 =
+  var /*@type=int**/ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getInt();
 
-  var /*@ type=num* */ v8 =
+  var /*@type=num**/ v8 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getNum();
 
-  var /*@ type=double* */ v9 =
+  var /*@type=double**/ v9 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getDouble();
 
-  var /*@ type=int* */ v10 =
+  var /*@type=int**/ v10 =
       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
 
-  var /*@ type=int* */ v11 =
+  var /*@type=int**/ v11 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
 }
 
 void test3(Test<int, double> t) {
-  var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
+  var /*@type=num**/ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
 
-  var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
+  var /*@type=double**/ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
 
-  var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getNum();
 
-  var /*@ type=num* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getDouble();
 
-  var /*@ type=int* */ v7 =
+  var /*@type=int**/ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getInt();
 
-  var /*@ type=num* */ v8 =
+  var /*@type=num**/ v8 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getNum();
 
-  var /*@ type=double* */ v9 =
+  var /*@type=double**/ v9 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getDouble();
 
-  var /*@ type=int* */ v10 =
+  var /*@type=int**/ v10 =
       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
 
-  var /*@ type=int* */ v11 =
+  var /*@type=int**/ v11 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
 }
 
 void test4(Test<num, int> t) {
-  var /*@ type=int* */ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
+  var /*@type=int**/ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
 
-  var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
+  var /*@type=num**/ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
 
-  var /*@ type=num* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getInt();
 
-  var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getNum();
 
-  var /*@ type=num* */ v7 =
+  var /*@type=num**/ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getInt();
 
-  var /*@ type=num* */ v8 =
+  var /*@type=num**/ v8 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getNum();
 
-  var /*@ type=num* */ v10 =
+  var /*@type=num**/ v10 =
       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
 
-  var /*@ type=num* */ v11 =
+  var /*@type=num**/ v11 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
 }
 
 void test5(Test<num, num> t) {
-  var /*@ type=int* */ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
+  var /*@type=int**/ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
 
-  var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
+  var /*@type=num**/ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
 
-  var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
+  var /*@type=double**/ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
 
-  var /*@ type=num* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getInt();
 
-  var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getNum();
 
-  var /*@ type=num* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getDouble();
 
-  var /*@ type=num* */ v7 =
+  var /*@type=num**/ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getInt();
 
-  var /*@ type=num* */ v8 =
+  var /*@type=num**/ v8 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getNum();
 
-  var /*@ type=num* */ v9 =
+  var /*@type=num**/ v9 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getDouble();
 
-  var /*@ type=num* */ v10 =
+  var /*@type=num**/ v10 =
       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
 
-  var /*@ type=num* */ v11 =
+  var /*@type=num**/ v11 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
 }
 
 void test6(Test<num, double> t) {
-  var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
+  var /*@type=num**/ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
 
-  var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
+  var /*@type=double**/ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
 
-  var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getNum();
 
-  var /*@ type=num* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getDouble();
 
-  var /*@ type=num* */ v7 =
+  var /*@type=num**/ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getInt();
 
-  var /*@ type=num* */ v8 =
+  var /*@type=num**/ v8 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getNum();
 
-  var /*@ type=num* */ v9 =
+  var /*@type=num**/ v9 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
           getDouble();
 
-  var /*@ type=num* */ v10 =
+  var /*@type=num**/ v10 =
       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
 
-  var /*@ type=num* */ v11 =
+  var /*@type=num**/ v11 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
 }
 
 void test7(Test<double, int> t) {
-  var /*@ type=int* */ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
+  var /*@type=int**/ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
 
-  var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
+  var /*@type=num**/ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
 
-  var /*@ type=num* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getInt();
 
-  var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getNum();
 
-  var /*@ type=double* */ v7 =
+  var /*@type=double**/ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
           getInt();
 
-  var /*@ type=double* */ v8 =
+  var /*@type=double**/ v8 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
           getNum();
 
-  var /*@ type=double* */ v10 =
+  var /*@type=double**/ v10 =
       /*@target=double.+*/ ++t
           /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
 
-  var /*@ type=double* */ v11 =
+  var /*@type=double**/ v11 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
 }
 
 void test8(Test<double, num> t) {
-  var /*@ type=int* */ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
+  var /*@type=int**/ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
 
-  var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
+  var /*@type=num**/ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
 
-  var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
+  var /*@type=double**/ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
 
-  var /*@ type=num* */ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v4 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getInt();
 
-  var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getNum();
 
-  var /*@ type=double* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=double**/ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getDouble();
 
-  var /*@ type=double* */ v7 =
+  var /*@type=double**/ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
           getInt();
 
-  var /*@ type=double* */ v8 =
+  var /*@type=double**/ v8 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
           getNum();
 
-  var /*@ type=double* */ v9 =
+  var /*@type=double**/ v9 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
           getDouble();
 
-  var /*@ type=double* */ v10 =
+  var /*@type=double**/ v10 =
       /*@target=double.+*/ ++t
           /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
 
-  var /*@ type=double* */ v11 =
+  var /*@type=double**/ v11 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
 }
 
 void test9(Test<double, double> t) {
-  var /*@ type=num* */ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
+  var /*@type=num**/ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
 
-  var /*@ type=double* */ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
+  var /*@type=double**/ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
 
-  var /*@ type=num* */ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=num**/ v5 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getNum();
 
-  var /*@ type=double* */ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
+  var /*@type=double**/ v6 = t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x']
        ??= getDouble();
 
-  var /*@ type=double* */ v7 =
+  var /*@type=double**/ v7 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
           getInt();
 
-  var /*@ type=double* */ v8 =
+  var /*@type=double**/ v8 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
           getNum();
 
-  var /*@ type=double* */ v9 =
+  var /*@type=double**/ v9 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
           getDouble();
 
-  var /*@ type=double* */ v10 =
+  var /*@type=double**/ v10 =
       /*@target=double.+*/ ++t
           /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
 
-  var /*@ type=double* */ v11 =
+  var /*@type=double**/ v11 =
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect
index 895c644..4bb592eb 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect
@@ -2,31 +2,31 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:90:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:92:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
 //                                                                          ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:102:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:104:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
 //                         ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:105:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:107:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
 //                                                                          ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:211:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:213:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
 //                                                                             ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:215:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:217:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
 //                                                                             ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:219:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:221:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //       /*@target=double.+*/ ++t
 //                            ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:223:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:225:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
 //                                                                             ^
 //
@@ -84,15 +84,15 @@
   core::double* v3 = let final self::Test<core::int*, core::double*>* #t86 = t in let final core::String* #t87 = "x" in let final core::double* #t88 = self::getDouble() in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88){(core::String*, core::double*) →* void} in #t88;
   core::num* v5 = let final self::Test<core::int*, core::double*>* #t90 = t in let final core::String* #t91 = "x" in let final core::int* #t92 = #t90.{self::Test::[]}(#t91){(core::String*) →* core::int*} in #t92 == null ?{core::num*} let final core::num* #t93 = self::getNum() as{TypeError} core::double* in let final void #t94 = #t90.{self::Test::[]=}(#t91, #t93){(core::String*, core::double*) →* void} in #t93 : #t92;
   core::num* v6 = let final self::Test<core::int*, core::double*>* #t95 = t in let final core::String* #t96 = "x" in let final core::int* #t97 = #t95.{self::Test::[]}(#t96){(core::String*) →* core::int*} in #t97 == null ?{core::num*} let final core::double* #t98 = self::getDouble() in let final void #t99 = #t95.{self::Test::[]=}(#t96, #t98){(core::String*, core::double*) →* void} in #t98 : #t97;
-  core::int* v7 = let final self::Test<core::int*, core::double*>* #t100 = t in let final core::String* #t101 = "x" in let final core::int* #t102 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:90:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  core::int* v7 = let final self::Test<core::int*, core::double*>* #t100 = t in let final core::String* #t101 = "x" in let final core::int* #t102 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:92:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
                                                                          ^" in #t100.{self::Test::[]}(#t101){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t103 = #t100.{self::Test::[]=}(#t101, #t102){(core::String*, core::double*) →* void} in #t102;
   core::num* v8 = let final self::Test<core::int*, core::double*>* #t104 = t in let final core::String* #t105 = "x" in let final core::num* #t106 = #t104.{self::Test::[]}(#t105){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t107 = #t104.{self::Test::[]=}(#t105, #t106){(core::String*, core::double*) →* void} in #t106;
   core::double* v9 = let final self::Test<core::int*, core::double*>* #t108 = t in let final core::String* #t109 = "x" in let final core::double* #t110 = #t108.{self::Test::[]}(#t109){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t111 = #t108.{self::Test::[]=}(#t109, #t110){(core::String*, core::double*) →* void} in #t110;
-  core::int* v10 = let final self::Test<core::int*, core::double*>* #t112 = t in let final core::String* #t113 = "x" in let final core::int* #t114 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:102:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  core::int* v10 = let final self::Test<core::int*, core::double*>* #t112 = t in let final core::String* #t113 = "x" in let final core::int* #t114 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:104:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
                         ^" in #t112.{self::Test::[]}(#t113){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t115 = #t112.{self::Test::[]=}(#t113, #t114){(core::String*, core::double*) →* void} in #t114;
-  core::int* v11 = let final self::Test<core::int*, core::double*>* #t116 = t in let final core::String* #t117 = "x" in let final core::int* #t118 = #t116.{self::Test::[]}(#t117){(core::String*) →* core::int*} in let final void #t119 = #t116.{self::Test::[]=}(#t117, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:105:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  core::int* v11 = let final self::Test<core::int*, core::double*>* #t116 = t in let final core::String* #t117 = "x" in let final core::int* #t118 = #t116.{self::Test::[]}(#t117){(core::String*) →* core::int*} in let final void #t119 = #t116.{self::Test::[]=}(#t117, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:107:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
                                                                          ^" in #t118.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t118;
 }
@@ -135,16 +135,16 @@
   core::num* v2 = let final self::Test<core::double*, core::int*>* #t243 = t in let final core::String* #t244 = "x" in let final core::num* #t245 = self::getNum() as{TypeError} core::int* in let final void #t246 = #t243.{self::Test::[]=}(#t244, #t245){(core::String*, core::int*) →* void} in #t245;
   core::num* v4 = let final self::Test<core::double*, core::int*>* #t247 = t in let final core::String* #t248 = "x" in let final core::double* #t249 = #t247.{self::Test::[]}(#t248){(core::String*) →* core::double*} in #t249 == null ?{core::num*} let final core::int* #t250 = self::getInt() in let final void #t251 = #t247.{self::Test::[]=}(#t248, #t250){(core::String*, core::int*) →* void} in #t250 : #t249;
   core::num* v5 = let final self::Test<core::double*, core::int*>* #t252 = t in let final core::String* #t253 = "x" in let final core::double* #t254 = #t252.{self::Test::[]}(#t253){(core::String*) →* core::double*} in #t254 == null ?{core::num*} let final core::num* #t255 = self::getNum() as{TypeError} core::int* in let final void #t256 = #t252.{self::Test::[]=}(#t253, #t255){(core::String*, core::int*) →* void} in #t255 : #t254;
-  core::double* v7 = let final self::Test<core::double*, core::int*>* #t257 = t in let final core::String* #t258 = "x" in let final core::double* #t259 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:211:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::double* v7 = let final self::Test<core::double*, core::int*>* #t257 = t in let final core::String* #t258 = "x" in let final core::double* #t259 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:213:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
                                                                             ^" in #t257.{self::Test::[]}(#t258){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t260 = #t257.{self::Test::[]=}(#t258, #t259){(core::String*, core::int*) →* void} in #t259;
-  core::double* v8 = let final self::Test<core::double*, core::int*>* #t261 = t in let final core::String* #t262 = "x" in let final core::double* #t263 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:215:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::double* v8 = let final self::Test<core::double*, core::int*>* #t261 = t in let final core::String* #t262 = "x" in let final core::double* #t263 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:217:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
                                                                             ^" in #t261.{self::Test::[]}(#t262){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t264 = #t261.{self::Test::[]=}(#t262, #t263){(core::String*, core::int*) →* void} in #t263;
-  core::double* v10 = let final self::Test<core::double*, core::int*>* #t265 = t in let final core::String* #t266 = "x" in let final core::double* #t267 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:219:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::double* v10 = let final self::Test<core::double*, core::int*>* #t265 = t in let final core::String* #t266 = "x" in let final core::double* #t267 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:221:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       /*@target=double.+*/ ++t
                            ^" in #t265.{self::Test::[]}(#t266){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t268 = #t265.{self::Test::[]=}(#t266, #t267){(core::String*, core::int*) →* void} in #t267;
-  core::double* v11 = let final self::Test<core::double*, core::int*>* #t269 = t in let final core::String* #t270 = "x" in let final core::double* #t271 = #t269.{self::Test::[]}(#t270){(core::String*) →* core::double*} in let final void #t272 = #t269.{self::Test::[]=}(#t270, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:223:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::double* v11 = let final self::Test<core::double*, core::int*>* #t269 = t in let final core::String* #t270 = "x" in let final core::double* #t271 = #t269.{self::Test::[]}(#t270){(core::String*) →* core::double*} in let final void #t272 = #t269.{self::Test::[]=}(#t270, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:225:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
                                                                             ^" in #t271.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t271;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.modular.expect
index 895c644..4bb592eb 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.modular.expect
@@ -2,31 +2,31 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:90:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:92:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
 //                                                                          ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:102:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:104:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
 //                         ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:105:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:107:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
 //                                                                          ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:211:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:213:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
 //                                                                             ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:215:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:217:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
 //                                                                             ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:219:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:221:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //       /*@target=double.+*/ ++t
 //                            ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:223:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:225:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
 //                                                                             ^
 //
@@ -84,15 +84,15 @@
   core::double* v3 = let final self::Test<core::int*, core::double*>* #t86 = t in let final core::String* #t87 = "x" in let final core::double* #t88 = self::getDouble() in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88){(core::String*, core::double*) →* void} in #t88;
   core::num* v5 = let final self::Test<core::int*, core::double*>* #t90 = t in let final core::String* #t91 = "x" in let final core::int* #t92 = #t90.{self::Test::[]}(#t91){(core::String*) →* core::int*} in #t92 == null ?{core::num*} let final core::num* #t93 = self::getNum() as{TypeError} core::double* in let final void #t94 = #t90.{self::Test::[]=}(#t91, #t93){(core::String*, core::double*) →* void} in #t93 : #t92;
   core::num* v6 = let final self::Test<core::int*, core::double*>* #t95 = t in let final core::String* #t96 = "x" in let final core::int* #t97 = #t95.{self::Test::[]}(#t96){(core::String*) →* core::int*} in #t97 == null ?{core::num*} let final core::double* #t98 = self::getDouble() in let final void #t99 = #t95.{self::Test::[]=}(#t96, #t98){(core::String*, core::double*) →* void} in #t98 : #t97;
-  core::int* v7 = let final self::Test<core::int*, core::double*>* #t100 = t in let final core::String* #t101 = "x" in let final core::int* #t102 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:90:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  core::int* v7 = let final self::Test<core::int*, core::double*>* #t100 = t in let final core::String* #t101 = "x" in let final core::int* #t102 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:92:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
                                                                          ^" in #t100.{self::Test::[]}(#t101){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t103 = #t100.{self::Test::[]=}(#t101, #t102){(core::String*, core::double*) →* void} in #t102;
   core::num* v8 = let final self::Test<core::int*, core::double*>* #t104 = t in let final core::String* #t105 = "x" in let final core::num* #t106 = #t104.{self::Test::[]}(#t105){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t107 = #t104.{self::Test::[]=}(#t105, #t106){(core::String*, core::double*) →* void} in #t106;
   core::double* v9 = let final self::Test<core::int*, core::double*>* #t108 = t in let final core::String* #t109 = "x" in let final core::double* #t110 = #t108.{self::Test::[]}(#t109){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t111 = #t108.{self::Test::[]=}(#t109, #t110){(core::String*, core::double*) →* void} in #t110;
-  core::int* v10 = let final self::Test<core::int*, core::double*>* #t112 = t in let final core::String* #t113 = "x" in let final core::int* #t114 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:102:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  core::int* v10 = let final self::Test<core::int*, core::double*>* #t112 = t in let final core::String* #t113 = "x" in let final core::int* #t114 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:104:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
                         ^" in #t112.{self::Test::[]}(#t113){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t115 = #t112.{self::Test::[]=}(#t113, #t114){(core::String*, core::double*) →* void} in #t114;
-  core::int* v11 = let final self::Test<core::int*, core::double*>* #t116 = t in let final core::String* #t117 = "x" in let final core::int* #t118 = #t116.{self::Test::[]}(#t117){(core::String*) →* core::int*} in let final void #t119 = #t116.{self::Test::[]=}(#t117, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:105:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  core::int* v11 = let final self::Test<core::int*, core::double*>* #t116 = t in let final core::String* #t117 = "x" in let final core::int* #t118 = #t116.{self::Test::[]}(#t117){(core::String*) →* core::int*} in let final void #t119 = #t116.{self::Test::[]=}(#t117, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:107:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
                                                                          ^" in #t118.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t118;
 }
@@ -135,16 +135,16 @@
   core::num* v2 = let final self::Test<core::double*, core::int*>* #t243 = t in let final core::String* #t244 = "x" in let final core::num* #t245 = self::getNum() as{TypeError} core::int* in let final void #t246 = #t243.{self::Test::[]=}(#t244, #t245){(core::String*, core::int*) →* void} in #t245;
   core::num* v4 = let final self::Test<core::double*, core::int*>* #t247 = t in let final core::String* #t248 = "x" in let final core::double* #t249 = #t247.{self::Test::[]}(#t248){(core::String*) →* core::double*} in #t249 == null ?{core::num*} let final core::int* #t250 = self::getInt() in let final void #t251 = #t247.{self::Test::[]=}(#t248, #t250){(core::String*, core::int*) →* void} in #t250 : #t249;
   core::num* v5 = let final self::Test<core::double*, core::int*>* #t252 = t in let final core::String* #t253 = "x" in let final core::double* #t254 = #t252.{self::Test::[]}(#t253){(core::String*) →* core::double*} in #t254 == null ?{core::num*} let final core::num* #t255 = self::getNum() as{TypeError} core::int* in let final void #t256 = #t252.{self::Test::[]=}(#t253, #t255){(core::String*, core::int*) →* void} in #t255 : #t254;
-  core::double* v7 = let final self::Test<core::double*, core::int*>* #t257 = t in let final core::String* #t258 = "x" in let final core::double* #t259 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:211:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::double* v7 = let final self::Test<core::double*, core::int*>* #t257 = t in let final core::String* #t258 = "x" in let final core::double* #t259 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:213:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
                                                                             ^" in #t257.{self::Test::[]}(#t258){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t260 = #t257.{self::Test::[]=}(#t258, #t259){(core::String*, core::int*) →* void} in #t259;
-  core::double* v8 = let final self::Test<core::double*, core::int*>* #t261 = t in let final core::String* #t262 = "x" in let final core::double* #t263 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:215:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::double* v8 = let final self::Test<core::double*, core::int*>* #t261 = t in let final core::String* #t262 = "x" in let final core::double* #t263 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:217:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
                                                                             ^" in #t261.{self::Test::[]}(#t262){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t264 = #t261.{self::Test::[]=}(#t262, #t263){(core::String*, core::int*) →* void} in #t263;
-  core::double* v10 = let final self::Test<core::double*, core::int*>* #t265 = t in let final core::String* #t266 = "x" in let final core::double* #t267 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:219:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::double* v10 = let final self::Test<core::double*, core::int*>* #t265 = t in let final core::String* #t266 = "x" in let final core::double* #t267 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:221:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       /*@target=double.+*/ ++t
                            ^" in #t265.{self::Test::[]}(#t266){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t268 = #t265.{self::Test::[]=}(#t266, #t267){(core::String*, core::int*) →* void} in #t267;
-  core::double* v11 = let final self::Test<core::double*, core::int*>* #t269 = t in let final core::String* #t270 = "x" in let final core::double* #t271 = #t269.{self::Test::[]}(#t270){(core::String*) →* core::double*} in let final void #t272 = #t269.{self::Test::[]=}(#t270, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:223:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  core::double* v11 = let final self::Test<core::double*, core::int*>* #t269 = t in let final core::String* #t270 = "x" in let final core::double* #t271 = #t269.{self::Test::[]}(#t270){(core::String*) →* core::double*} in let final void #t272 = #t269.{self::Test::[]=}(#t270, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:225:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
                                                                             ^" in #t271.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t271;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart
new file mode 100644
index 0000000..763f124
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart
@@ -0,0 +1,217 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+abstract class Test<T, U> {
+  T operator [](String s);
+  void operator []=(String s, U v);
+}
+
+abstract class Test2<T, U> {
+  T? operator [](String s);
+  void operator []=(String s, U? v);
+}
+
+void test1(Test<int, int> t, Test2<int, int> t2) {
+  var /*@type=int*/ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
+
+  var /*@type=int*/ v4 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getInt();
+
+  var /*@type=int*/ v7 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
+          getInt();
+
+  var /*@type=int*/ v10 =
+      /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
+
+  var /*@type=int*/ v11 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
+}
+
+void test2(Test<int, num> t, Test2<int, num> t2) {
+  var /*@type=int*/ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
+
+  var /*@type=num*/ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
+
+  var /*@type=double*/ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
+
+  var /*@type=int*/ v4 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getInt();
+
+  var /*@type=num*/ v5 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getNum();
+
+  var /*@type=num*/ v6 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getDouble();
+
+  var /*@type=int*/ v7 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
+          getInt();
+
+  var /*@type=num*/ v8 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
+          getNum();
+
+  var /*@type=double*/ v9 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
+          getDouble();
+
+  var /*@type=int*/ v10 =
+      /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
+
+  var /*@type=int*/ v11 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
+}
+
+void test3(Test<int, double> t, Test2<int, double> t2) {
+  var /*@type=double*/ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
+
+  var /*@type=num*/ v6 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getDouble();
+
+  var /*@type=double*/ v9 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
+          getDouble();
+
+  var /*@type=double*/ v10 =
+      /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
+
+  var /*@type=int*/ v11 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
+}
+
+void test4(Test<num, int> t, Test2<num, int> t2) {
+  var /*@type=int*/ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
+
+  var /*@type=num*/ v4 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getInt();
+}
+
+void test5(Test<num, num> t, Test2<num, num> t2) {
+  var /*@type=int*/ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
+
+  var /*@type=num*/ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
+
+  var /*@type=double*/ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
+
+  var /*@type=num*/ v4 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getInt();
+
+  var /*@type=num*/ v5 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getNum();
+
+  var /*@type=num*/ v6 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getDouble();
+
+  var /*@type=num*/ v7 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
+          getInt();
+
+  var /*@type=num*/ v8 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
+          getNum();
+
+  var /*@type=double*/ v9 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
+          getDouble();
+
+  var /*@type=num*/ v10 =
+      /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
+
+  var /*@type=num*/ v11 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
+}
+
+void test6(Test<num, double> t, Test2<num, double> t2) {
+  var /*@type=double*/ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
+
+  var /*@type=num*/ v6 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getDouble();
+
+  var /*@type=double*/ v9 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
+          getDouble();
+
+  var /*@type=double*/ v10 =
+      /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
+
+  var /*@type=num*/ v11 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
+}
+
+void test7(Test<double, int> t, Test2<double, int> t2) {
+  var /*@type=int*/ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
+
+ st  var /*@type=num*/ v4 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getInt();
+}
+
+void test8(Test<double, num> t, Test2<double, num> t2) {
+  var /*@type=int*/ v1 = t /*@target=Test.[]=*/ ['x'] = getInt();
+
+  var /*@type=num*/ v2 = t /*@target=Test.[]=*/ ['x'] = getNum();
+
+  var /*@type=double*/ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
+
+  var /*@type=num*/ v4 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getInt();
+
+  var /*@type=num*/ v5 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getNum();
+
+  var /*@type=double*/ v6 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getDouble();
+
+  var /*@type=double*/ v7 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
+          getInt();
+
+  var /*@type=double*/ v8 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
+          getNum();
+
+  var /*@type=double*/ v9 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
+          getDouble();
+
+  var /*@type=double*/ v10 =
+      /*@target=double.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
+
+  var /*@type=double*/ v11 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
+}
+
+void test9(Test<double, double> t, Test2<double, double> t2) {
+  var /*@type=double*/ v3 = t /*@target=Test.[]=*/ ['x'] = getDouble();
+
+  var /*@type=double*/ v6 =
+      t2 /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'] ??= getDouble();
+
+  var /*@type=double*/ v7 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
+          getInt();
+
+  var /*@type=double*/ v8 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
+          getNum();
+
+  var /*@type=double*/ v9 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
+          getDouble();
+
+  var /*@type=double*/ v10 =
+      /*@target=double.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
+
+  var /*@type=double*/ v11 =
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.textual_outline.expect
new file mode 100644
index 0000000..84519d5
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.textual_outline.expect
@@ -0,0 +1,26 @@
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+abstract class Test<T, U> {
+  T operator [](String s);
+  void operator []=(String s, U v);
+}
+
+abstract class Test2<T, U> {
+  T? operator [](String s);
+  void operator []=(String s, U? v);
+}
+
+void test1(Test<int, int> t, Test2<int, int> t2) {}
+void test2(Test<int, num> t, Test2<int, num> t2) {}
+void test3(Test<int, double> t, Test2<int, double> t2) {}
+void test4(Test<num, int> t, Test2<num, int> t2) {}
+void test5(Test<num, num> t, Test2<num, num> t2) {}
+void test6(Test<num, double> t, Test2<num, double> t2) {}
+void test7(Test<double, int> t, Test2<double, int> t2) {}
+void test8(Test<double, num> t, Test2<double, num> t2) {}
+void test9(Test<double, double> t, Test2<double, double> t2) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..14dc23c
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.textual_outline_modelled.expect
@@ -0,0 +1,25 @@
+library test;
+
+abstract class Test<T, U> {
+  T operator [](String s);
+  void operator []=(String s, U v);
+}
+
+abstract class Test2<T, U> {
+  T? operator [](String s);
+  void operator []=(String s, U? v);
+}
+
+double getDouble() => 0.0;
+int getInt() => 0;
+main() {}
+num getNum() => 0;
+void test1(Test<int, int> t, Test2<int, int> t2) {}
+void test2(Test<int, num> t, Test2<int, num> t2) {}
+void test3(Test<int, double> t, Test2<int, double> t2) {}
+void test4(Test<num, int> t, Test2<num, int> t2) {}
+void test5(Test<num, num> t, Test2<num, num> t2) {}
+void test6(Test<num, double> t, Test2<num, double> t2) {}
+void test7(Test<double, int> t, Test2<double, int> t2) {}
+void test8(Test<double, num> t, Test2<double, num> t2) {}
+void test9(Test<double, double> t, Test2<double, double> t2) {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.weak.expect
new file mode 100644
index 0000000..8489231
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.weak.expect
@@ -0,0 +1,116 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart:153:2: Error: Expected ';' after this.
+//  st  var /*@type=num*/ v4 =
+//  ^^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart:153:2: Error: Undefined name 'st'.
+//  st  var /*@type=num*/ v4 =
+//  ^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Test<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Test<self::Test::T%, self::Test::U%>
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → self::Test::T%;
+  abstract operator []=(core::String s, covariant-by-class self::Test::U% v) → void;
+}
+abstract class Test2<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Test2<self::Test2::T%, self::Test2::U%>
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → self::Test2::T?;
+  abstract operator []=(core::String s, covariant-by-class self::Test2::U? v) → void;
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method test1(self::Test<core::int, core::int> t, self::Test2<core::int, core::int> t2) → void {
+  core::int v1 = let final self::Test<core::int, core::int> #t1 = t in let final core::String #t2 = "x" in let final core::int #t3 = self::getInt() in let final void #t4 = #t1.{self::Test::[]=}(#t2, #t3){(core::String, core::int) → void} in #t3;
+  core::int v4 = let final self::Test2<core::int, core::int> #t5 = t2 in let final core::String #t6 = "x" in let final core::int? #t7 = #t5.{self::Test2::[]}(#t6){(core::String) → core::int?} in #t7 == null ?{core::int} let final core::int #t8 = self::getInt() in let final void #t9 = #t5.{self::Test2::[]=}(#t6, #t8){(core::String, core::int?) → void} in #t8 : #t7{core::int};
+  core::int v7 = let final self::Test<core::int, core::int> #t10 = t in let final core::String #t11 = "x" in let final core::int #t12 = #t10.{self::Test::[]}(#t11){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t13 = #t10.{self::Test::[]=}(#t11, #t12){(core::String, core::int) → void} in #t12;
+  core::int v10 = let final self::Test<core::int, core::int> #t14 = t in let final core::String #t15 = "x" in let final core::int #t16 = #t14.{self::Test::[]}(#t15){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t17 = #t14.{self::Test::[]=}(#t15, #t16){(core::String, core::int) → void} in #t16;
+  core::int v11 = let final self::Test<core::int, core::int> #t18 = t in let final core::String #t19 = "x" in let final core::int #t20 = #t18.{self::Test::[]}(#t19){(core::String) → core::int} in let final void #t21 = #t18.{self::Test::[]=}(#t19, #t20.{core::num::+}(1){(core::num) → core::int}){(core::String, core::int) → void} in #t20;
+}
+static method test2(self::Test<core::int, core::num> t, self::Test2<core::int, core::num> t2) → void {
+  core::int v1 = let final self::Test<core::int, core::num> #t22 = t in let final core::String #t23 = "x" in let final core::int #t24 = self::getInt() in let final void #t25 = #t22.{self::Test::[]=}(#t23, #t24){(core::String, core::num) → void} in #t24;
+  core::num v2 = let final self::Test<core::int, core::num> #t26 = t in let final core::String #t27 = "x" in let final core::num #t28 = self::getNum() in let final void #t29 = #t26.{self::Test::[]=}(#t27, #t28){(core::String, core::num) → void} in #t28;
+  core::double v3 = let final self::Test<core::int, core::num> #t30 = t in let final core::String #t31 = "x" in let final core::double #t32 = self::getDouble() in let final void #t33 = #t30.{self::Test::[]=}(#t31, #t32){(core::String, core::num) → void} in #t32;
+  core::int v4 = let final self::Test2<core::int, core::num> #t34 = t2 in let final core::String #t35 = "x" in let final core::int? #t36 = #t34.{self::Test2::[]}(#t35){(core::String) → core::int?} in #t36 == null ?{core::int} let final core::int #t37 = self::getInt() in let final void #t38 = #t34.{self::Test2::[]=}(#t35, #t37){(core::String, core::num?) → void} in #t37 : #t36{core::int};
+  core::num v5 = let final self::Test2<core::int, core::num> #t39 = t2 in let final core::String #t40 = "x" in let final core::int? #t41 = #t39.{self::Test2::[]}(#t40){(core::String) → core::int?} in #t41 == null ?{core::num} let final core::num #t42 = self::getNum() in let final void #t43 = #t39.{self::Test2::[]=}(#t40, #t42){(core::String, core::num?) → void} in #t42 : #t41{core::int};
+  core::num v6 = let final self::Test2<core::int, core::num> #t44 = t2 in let final core::String #t45 = "x" in let final core::int? #t46 = #t44.{self::Test2::[]}(#t45){(core::String) → core::int?} in #t46 == null ?{core::num} let final core::double #t47 = self::getDouble() in let final void #t48 = #t44.{self::Test2::[]=}(#t45, #t47){(core::String, core::num?) → void} in #t47 : #t46{core::int};
+  core::int v7 = let final self::Test<core::int, core::num> #t49 = t in let final core::String #t50 = "x" in let final core::int #t51 = #t49.{self::Test::[]}(#t50){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t52 = #t49.{self::Test::[]=}(#t50, #t51){(core::String, core::num) → void} in #t51;
+  core::num v8 = let final self::Test<core::int, core::num> #t53 = t in let final core::String #t54 = "x" in let final core::num #t55 = #t53.{self::Test::[]}(#t54){(core::String) → core::int}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t56 = #t53.{self::Test::[]=}(#t54, #t55){(core::String, core::num) → void} in #t55;
+  core::double v9 = let final self::Test<core::int, core::num> #t57 = t in let final core::String #t58 = "x" in let final core::double #t59 = #t57.{self::Test::[]}(#t58){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t60 = #t57.{self::Test::[]=}(#t58, #t59){(core::String, core::num) → void} in #t59;
+  core::int v10 = let final self::Test<core::int, core::num> #t61 = t in let final core::String #t62 = "x" in let final core::int #t63 = #t61.{self::Test::[]}(#t62){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t64 = #t61.{self::Test::[]=}(#t62, #t63){(core::String, core::num) → void} in #t63;
+  core::int v11 = let final self::Test<core::int, core::num> #t65 = t in let final core::String #t66 = "x" in let final core::int #t67 = #t65.{self::Test::[]}(#t66){(core::String) → core::int} in let final void #t68 = #t65.{self::Test::[]=}(#t66, #t67.{core::num::+}(1){(core::num) → core::int}){(core::String, core::num) → void} in #t67;
+}
+static method test3(self::Test<core::int, core::double> t, self::Test2<core::int, core::double> t2) → void {
+  core::double v3 = let final self::Test<core::int, core::double> #t69 = t in let final core::String #t70 = "x" in let final core::double #t71 = self::getDouble() in let final void #t72 = #t69.{self::Test::[]=}(#t70, #t71){(core::String, core::double) → void} in #t71;
+  core::num v6 = let final self::Test2<core::int, core::double> #t73 = t2 in let final core::String #t74 = "x" in let final core::int? #t75 = #t73.{self::Test2::[]}(#t74){(core::String) → core::int?} in #t75 == null ?{core::num} let final core::double #t76 = self::getDouble() in let final void #t77 = #t73.{self::Test2::[]=}(#t74, #t76){(core::String, core::double?) → void} in #t76 : #t75{core::int};
+  core::double v9 = let final self::Test<core::int, core::double> #t78 = t in let final core::String #t79 = "x" in let final core::double #t80 = #t78.{self::Test::[]}(#t79){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t81 = #t78.{self::Test::[]=}(#t79, #t80){(core::String, core::double) → void} in #t80;
+  core::double v10 = let final self::Test<core::int, core::double> #t82 = t in let final core::String #t83 = "x" in let final core::double #t84 = #t82.{self::Test::[]}(#t83){(core::String) → core::int}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t85 = #t82.{self::Test::[]=}(#t83, #t84){(core::String, core::double) → void} in #t84;
+  core::int v11 = let final self::Test<core::int, core::double> #t86 = t in let final core::String #t87 = "x" in let final core::int #t88 = #t86.{self::Test::[]}(#t87){(core::String) → core::int} in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t88;
+}
+static method test4(self::Test<core::num, core::int> t, self::Test2<core::num, core::int> t2) → void {
+  core::int v1 = let final self::Test<core::num, core::int> #t90 = t in let final core::String #t91 = "x" in let final core::int #t92 = self::getInt() in let final void #t93 = #t90.{self::Test::[]=}(#t91, #t92){(core::String, core::int) → void} in #t92;
+  core::num v4 = let final self::Test2<core::num, core::int> #t94 = t2 in let final core::String #t95 = "x" in let final core::num? #t96 = #t94.{self::Test2::[]}(#t95){(core::String) → core::num?} in #t96 == null ?{core::num} let final core::int #t97 = self::getInt() in let final void #t98 = #t94.{self::Test2::[]=}(#t95, #t97){(core::String, core::int?) → void} in #t97 : #t96{core::num};
+}
+static method test5(self::Test<core::num, core::num> t, self::Test2<core::num, core::num> t2) → void {
+  core::int v1 = let final self::Test<core::num, core::num> #t99 = t in let final core::String #t100 = "x" in let final core::int #t101 = self::getInt() in let final void #t102 = #t99.{self::Test::[]=}(#t100, #t101){(core::String, core::num) → void} in #t101;
+  core::num v2 = let final self::Test<core::num, core::num> #t103 = t in let final core::String #t104 = "x" in let final core::num #t105 = self::getNum() in let final void #t106 = #t103.{self::Test::[]=}(#t104, #t105){(core::String, core::num) → void} in #t105;
+  core::double v3 = let final self::Test<core::num, core::num> #t107 = t in let final core::String #t108 = "x" in let final core::double #t109 = self::getDouble() in let final void #t110 = #t107.{self::Test::[]=}(#t108, #t109){(core::String, core::num) → void} in #t109;
+  core::num v4 = let final self::Test2<core::num, core::num> #t111 = t2 in let final core::String #t112 = "x" in let final core::num? #t113 = #t111.{self::Test2::[]}(#t112){(core::String) → core::num?} in #t113 == null ?{core::num} let final core::int #t114 = self::getInt() in let final void #t115 = #t111.{self::Test2::[]=}(#t112, #t114){(core::String, core::num?) → void} in #t114 : #t113{core::num};
+  core::num v5 = let final self::Test2<core::num, core::num> #t116 = t2 in let final core::String #t117 = "x" in let final core::num? #t118 = #t116.{self::Test2::[]}(#t117){(core::String) → core::num?} in #t118 == null ?{core::num} let final core::num #t119 = self::getNum() in let final void #t120 = #t116.{self::Test2::[]=}(#t117, #t119){(core::String, core::num?) → void} in #t119 : #t118{core::num};
+  core::num v6 = let final self::Test2<core::num, core::num> #t121 = t2 in let final core::String #t122 = "x" in let final core::num? #t123 = #t121.{self::Test2::[]}(#t122){(core::String) → core::num?} in #t123 == null ?{core::num} let final core::double #t124 = self::getDouble() in let final void #t125 = #t121.{self::Test2::[]=}(#t122, #t124){(core::String, core::num?) → void} in #t124 : #t123{core::num};
+  core::num v7 = let final self::Test<core::num, core::num> #t126 = t in let final core::String #t127 = "x" in let final core::num #t128 = #t126.{self::Test::[]}(#t127){(core::String) → core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t129 = #t126.{self::Test::[]=}(#t127, #t128){(core::String, core::num) → void} in #t128;
+  core::num v8 = let final self::Test<core::num, core::num> #t130 = t in let final core::String #t131 = "x" in let final core::num #t132 = #t130.{self::Test::[]}(#t131){(core::String) → core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t133 = #t130.{self::Test::[]=}(#t131, #t132){(core::String, core::num) → void} in #t132;
+  core::double v9 = let final self::Test<core::num, core::num> #t134 = t in let final core::String #t135 = "x" in let final core::double #t136 = #t134.{self::Test::[]}(#t135){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t137 = #t134.{self::Test::[]=}(#t135, #t136){(core::String, core::num) → void} in #t136;
+  core::num v10 = let final self::Test<core::num, core::num> #t138 = t in let final core::String #t139 = "x" in let final core::num #t140 = #t138.{self::Test::[]}(#t139){(core::String) → core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t141 = #t138.{self::Test::[]=}(#t139, #t140){(core::String, core::num) → void} in #t140;
+  core::num v11 = let final self::Test<core::num, core::num> #t142 = t in let final core::String #t143 = "x" in let final core::num #t144 = #t142.{self::Test::[]}(#t143){(core::String) → core::num} in let final void #t145 = #t142.{self::Test::[]=}(#t143, #t144.{core::num::+}(1){(core::num) → core::num}){(core::String, core::num) → void} in #t144;
+}
+static method test6(self::Test<core::num, core::double> t, self::Test2<core::num, core::double> t2) → void {
+  core::double v3 = let final self::Test<core::num, core::double> #t146 = t in let final core::String #t147 = "x" in let final core::double #t148 = self::getDouble() in let final void #t149 = #t146.{self::Test::[]=}(#t147, #t148){(core::String, core::double) → void} in #t148;
+  core::num v6 = let final self::Test2<core::num, core::double> #t150 = t2 in let final core::String #t151 = "x" in let final core::num? #t152 = #t150.{self::Test2::[]}(#t151){(core::String) → core::num?} in #t152 == null ?{core::num} let final core::double #t153 = self::getDouble() in let final void #t154 = #t150.{self::Test2::[]=}(#t151, #t153){(core::String, core::double?) → void} in #t153 : #t152{core::num};
+  core::double v9 = let final self::Test<core::num, core::double> #t155 = t in let final core::String #t156 = "x" in let final core::double #t157 = #t155.{self::Test::[]}(#t156){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t158 = #t155.{self::Test::[]=}(#t156, #t157){(core::String, core::double) → void} in #t157;
+  core::double v10 = let final self::Test<core::num, core::double> #t159 = t in let final core::String #t160 = "x" in let final core::double #t161 = #t159.{self::Test::[]}(#t160){(core::String) → core::num}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t162 = #t159.{self::Test::[]=}(#t160, #t161){(core::String, core::double) → void} in #t161;
+  core::num v11 = let final self::Test<core::num, core::double> #t163 = t in let final core::String #t164 = "x" in let final core::num #t165 = #t163.{self::Test::[]}(#t164){(core::String) → core::num} in let final void #t166 = #t163.{self::Test::[]=}(#t164, #t165.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t165;
+}
+static method test7(self::Test<core::double, core::int> t, self::Test2<core::double, core::int> t2) → void {
+  core::int v1 = let final self::Test<core::double, core::int> #t167 = t in let final core::String #t168 = "x" in let final core::int #t169 = self::getInt() in let final void #t170 = #t167.{self::Test::[]=}(#t168, #t169){(core::String, core::int) → void} in #t169;
+  invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart:153:2: Error: Undefined name 'st'.
+ st  var /*@type=num*/ v4 =
+ ^^";
+  core::num v4 = let final self::Test2<core::double, core::int> #t171 = t2 in let final core::String #t172 = "x" in let final core::double? #t173 = #t171.{self::Test2::[]}(#t172){(core::String) → core::double?} in #t173 == null ?{core::num} let final core::int #t174 = self::getInt() in let final void #t175 = #t171.{self::Test2::[]=}(#t172, #t174){(core::String, core::int?) → void} in #t174 : #t173{core::double};
+}
+static method test8(self::Test<core::double, core::num> t, self::Test2<core::double, core::num> t2) → void {
+  core::int v1 = let final self::Test<core::double, core::num> #t176 = t in let final core::String #t177 = "x" in let final core::int #t178 = self::getInt() in let final void #t179 = #t176.{self::Test::[]=}(#t177, #t178){(core::String, core::num) → void} in #t178;
+  core::num v2 = let final self::Test<core::double, core::num> #t180 = t in let final core::String #t181 = "x" in let final core::num #t182 = self::getNum() in let final void #t183 = #t180.{self::Test::[]=}(#t181, #t182){(core::String, core::num) → void} in #t182;
+  core::double v3 = let final self::Test<core::double, core::num> #t184 = t in let final core::String #t185 = "x" in let final core::double #t186 = self::getDouble() in let final void #t187 = #t184.{self::Test::[]=}(#t185, #t186){(core::String, core::num) → void} in #t186;
+  core::num v4 = let final self::Test2<core::double, core::num> #t188 = t2 in let final core::String #t189 = "x" in let final core::double? #t190 = #t188.{self::Test2::[]}(#t189){(core::String) → core::double?} in #t190 == null ?{core::num} let final core::int #t191 = self::getInt() in let final void #t192 = #t188.{self::Test2::[]=}(#t189, #t191){(core::String, core::num?) → void} in #t191 : #t190{core::double};
+  core::num v5 = let final self::Test2<core::double, core::num> #t193 = t2 in let final core::String #t194 = "x" in let final core::double? #t195 = #t193.{self::Test2::[]}(#t194){(core::String) → core::double?} in #t195 == null ?{core::num} let final core::num #t196 = self::getNum() in let final void #t197 = #t193.{self::Test2::[]=}(#t194, #t196){(core::String, core::num?) → void} in #t196 : #t195{core::double};
+  core::double v6 = let final self::Test2<core::double, core::num> #t198 = t2 in let final core::String #t199 = "x" in let final core::double? #t200 = #t198.{self::Test2::[]}(#t199){(core::String) → core::double?} in #t200 == null ?{core::double} let final core::double #t201 = self::getDouble() in let final void #t202 = #t198.{self::Test2::[]=}(#t199, #t201){(core::String, core::num?) → void} in #t201 : #t200{core::double};
+  core::double v7 = let final self::Test<core::double, core::num> #t203 = t in let final core::String #t204 = "x" in let final core::double #t205 = #t203.{self::Test::[]}(#t204){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t206 = #t203.{self::Test::[]=}(#t204, #t205){(core::String, core::num) → void} in #t205;
+  core::double v8 = let final self::Test<core::double, core::num> #t207 = t in let final core::String #t208 = "x" in let final core::double #t209 = #t207.{self::Test::[]}(#t208){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t210 = #t207.{self::Test::[]=}(#t208, #t209){(core::String, core::num) → void} in #t209;
+  core::double v9 = let final self::Test<core::double, core::num> #t211 = t in let final core::String #t212 = "x" in let final core::double #t213 = #t211.{self::Test::[]}(#t212){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t214 = #t211.{self::Test::[]=}(#t212, #t213){(core::String, core::num) → void} in #t213;
+  core::double v10 = let final self::Test<core::double, core::num> #t215 = t in let final core::String #t216 = "x" in let final core::double #t217 = #t215.{self::Test::[]}(#t216){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t218 = #t215.{self::Test::[]=}(#t216, #t217){(core::String, core::num) → void} in #t217;
+  core::double v11 = let final self::Test<core::double, core::num> #t219 = t in let final core::String #t220 = "x" in let final core::double #t221 = #t219.{self::Test::[]}(#t220){(core::String) → core::double} in let final void #t222 = #t219.{self::Test::[]=}(#t220, #t221.{core::double::+}(1){(core::num) → core::double}){(core::String, core::num) → void} in #t221;
+}
+static method test9(self::Test<core::double, core::double> t, self::Test2<core::double, core::double> t2) → void {
+  core::double v3 = let final self::Test<core::double, core::double> #t223 = t in let final core::String #t224 = "x" in let final core::double #t225 = self::getDouble() in let final void #t226 = #t223.{self::Test::[]=}(#t224, #t225){(core::String, core::double) → void} in #t225;
+  core::double v6 = let final self::Test2<core::double, core::double> #t227 = t2 in let final core::String #t228 = "x" in let final core::double? #t229 = #t227.{self::Test2::[]}(#t228){(core::String) → core::double?} in #t229 == null ?{core::double} let final core::double #t230 = self::getDouble() in let final void #t231 = #t227.{self::Test2::[]=}(#t228, #t230){(core::String, core::double?) → void} in #t230 : #t229{core::double};
+  core::double v7 = let final self::Test<core::double, core::double> #t232 = t in let final core::String #t233 = "x" in let final core::double #t234 = #t232.{self::Test::[]}(#t233){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t235 = #t232.{self::Test::[]=}(#t233, #t234){(core::String, core::double) → void} in #t234;
+  core::double v8 = let final self::Test<core::double, core::double> #t236 = t in let final core::String #t237 = "x" in let final core::double #t238 = #t236.{self::Test::[]}(#t237){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t239 = #t236.{self::Test::[]=}(#t237, #t238){(core::String, core::double) → void} in #t238;
+  core::double v9 = let final self::Test<core::double, core::double> #t240 = t in let final core::String #t241 = "x" in let final core::double #t242 = #t240.{self::Test::[]}(#t241){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t243 = #t240.{self::Test::[]=}(#t241, #t242){(core::String, core::double) → void} in #t242;
+  core::double v10 = let final self::Test<core::double, core::double> #t244 = t in let final core::String #t245 = "x" in let final core::double #t246 = #t244.{self::Test::[]}(#t245){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t247 = #t244.{self::Test::[]=}(#t245, #t246){(core::String, core::double) → void} in #t246;
+  core::double v11 = let final self::Test<core::double, core::double> #t248 = t in let final core::String #t249 = "x" in let final core::double #t250 = #t248.{self::Test::[]}(#t249){(core::String) → core::double} in let final void #t251 = #t248.{self::Test::[]=}(#t249, #t250.{core::double::+}(1){(core::num) → core::double}){(core::String, core::double) → void} in #t250;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.weak.modular.expect
new file mode 100644
index 0000000..8489231
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.weak.modular.expect
@@ -0,0 +1,116 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart:153:2: Error: Expected ';' after this.
+//  st  var /*@type=num*/ v4 =
+//  ^^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart:153:2: Error: Undefined name 'st'.
+//  st  var /*@type=num*/ v4 =
+//  ^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Test<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Test<self::Test::T%, self::Test::U%>
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → self::Test::T%;
+  abstract operator []=(core::String s, covariant-by-class self::Test::U% v) → void;
+}
+abstract class Test2<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Test2<self::Test2::T%, self::Test2::U%>
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → self::Test2::T?;
+  abstract operator []=(core::String s, covariant-by-class self::Test2::U? v) → void;
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method test1(self::Test<core::int, core::int> t, self::Test2<core::int, core::int> t2) → void {
+  core::int v1 = let final self::Test<core::int, core::int> #t1 = t in let final core::String #t2 = "x" in let final core::int #t3 = self::getInt() in let final void #t4 = #t1.{self::Test::[]=}(#t2, #t3){(core::String, core::int) → void} in #t3;
+  core::int v4 = let final self::Test2<core::int, core::int> #t5 = t2 in let final core::String #t6 = "x" in let final core::int? #t7 = #t5.{self::Test2::[]}(#t6){(core::String) → core::int?} in #t7 == null ?{core::int} let final core::int #t8 = self::getInt() in let final void #t9 = #t5.{self::Test2::[]=}(#t6, #t8){(core::String, core::int?) → void} in #t8 : #t7{core::int};
+  core::int v7 = let final self::Test<core::int, core::int> #t10 = t in let final core::String #t11 = "x" in let final core::int #t12 = #t10.{self::Test::[]}(#t11){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t13 = #t10.{self::Test::[]=}(#t11, #t12){(core::String, core::int) → void} in #t12;
+  core::int v10 = let final self::Test<core::int, core::int> #t14 = t in let final core::String #t15 = "x" in let final core::int #t16 = #t14.{self::Test::[]}(#t15){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t17 = #t14.{self::Test::[]=}(#t15, #t16){(core::String, core::int) → void} in #t16;
+  core::int v11 = let final self::Test<core::int, core::int> #t18 = t in let final core::String #t19 = "x" in let final core::int #t20 = #t18.{self::Test::[]}(#t19){(core::String) → core::int} in let final void #t21 = #t18.{self::Test::[]=}(#t19, #t20.{core::num::+}(1){(core::num) → core::int}){(core::String, core::int) → void} in #t20;
+}
+static method test2(self::Test<core::int, core::num> t, self::Test2<core::int, core::num> t2) → void {
+  core::int v1 = let final self::Test<core::int, core::num> #t22 = t in let final core::String #t23 = "x" in let final core::int #t24 = self::getInt() in let final void #t25 = #t22.{self::Test::[]=}(#t23, #t24){(core::String, core::num) → void} in #t24;
+  core::num v2 = let final self::Test<core::int, core::num> #t26 = t in let final core::String #t27 = "x" in let final core::num #t28 = self::getNum() in let final void #t29 = #t26.{self::Test::[]=}(#t27, #t28){(core::String, core::num) → void} in #t28;
+  core::double v3 = let final self::Test<core::int, core::num> #t30 = t in let final core::String #t31 = "x" in let final core::double #t32 = self::getDouble() in let final void #t33 = #t30.{self::Test::[]=}(#t31, #t32){(core::String, core::num) → void} in #t32;
+  core::int v4 = let final self::Test2<core::int, core::num> #t34 = t2 in let final core::String #t35 = "x" in let final core::int? #t36 = #t34.{self::Test2::[]}(#t35){(core::String) → core::int?} in #t36 == null ?{core::int} let final core::int #t37 = self::getInt() in let final void #t38 = #t34.{self::Test2::[]=}(#t35, #t37){(core::String, core::num?) → void} in #t37 : #t36{core::int};
+  core::num v5 = let final self::Test2<core::int, core::num> #t39 = t2 in let final core::String #t40 = "x" in let final core::int? #t41 = #t39.{self::Test2::[]}(#t40){(core::String) → core::int?} in #t41 == null ?{core::num} let final core::num #t42 = self::getNum() in let final void #t43 = #t39.{self::Test2::[]=}(#t40, #t42){(core::String, core::num?) → void} in #t42 : #t41{core::int};
+  core::num v6 = let final self::Test2<core::int, core::num> #t44 = t2 in let final core::String #t45 = "x" in let final core::int? #t46 = #t44.{self::Test2::[]}(#t45){(core::String) → core::int?} in #t46 == null ?{core::num} let final core::double #t47 = self::getDouble() in let final void #t48 = #t44.{self::Test2::[]=}(#t45, #t47){(core::String, core::num?) → void} in #t47 : #t46{core::int};
+  core::int v7 = let final self::Test<core::int, core::num> #t49 = t in let final core::String #t50 = "x" in let final core::int #t51 = #t49.{self::Test::[]}(#t50){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t52 = #t49.{self::Test::[]=}(#t50, #t51){(core::String, core::num) → void} in #t51;
+  core::num v8 = let final self::Test<core::int, core::num> #t53 = t in let final core::String #t54 = "x" in let final core::num #t55 = #t53.{self::Test::[]}(#t54){(core::String) → core::int}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t56 = #t53.{self::Test::[]=}(#t54, #t55){(core::String, core::num) → void} in #t55;
+  core::double v9 = let final self::Test<core::int, core::num> #t57 = t in let final core::String #t58 = "x" in let final core::double #t59 = #t57.{self::Test::[]}(#t58){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t60 = #t57.{self::Test::[]=}(#t58, #t59){(core::String, core::num) → void} in #t59;
+  core::int v10 = let final self::Test<core::int, core::num> #t61 = t in let final core::String #t62 = "x" in let final core::int #t63 = #t61.{self::Test::[]}(#t62){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t64 = #t61.{self::Test::[]=}(#t62, #t63){(core::String, core::num) → void} in #t63;
+  core::int v11 = let final self::Test<core::int, core::num> #t65 = t in let final core::String #t66 = "x" in let final core::int #t67 = #t65.{self::Test::[]}(#t66){(core::String) → core::int} in let final void #t68 = #t65.{self::Test::[]=}(#t66, #t67.{core::num::+}(1){(core::num) → core::int}){(core::String, core::num) → void} in #t67;
+}
+static method test3(self::Test<core::int, core::double> t, self::Test2<core::int, core::double> t2) → void {
+  core::double v3 = let final self::Test<core::int, core::double> #t69 = t in let final core::String #t70 = "x" in let final core::double #t71 = self::getDouble() in let final void #t72 = #t69.{self::Test::[]=}(#t70, #t71){(core::String, core::double) → void} in #t71;
+  core::num v6 = let final self::Test2<core::int, core::double> #t73 = t2 in let final core::String #t74 = "x" in let final core::int? #t75 = #t73.{self::Test2::[]}(#t74){(core::String) → core::int?} in #t75 == null ?{core::num} let final core::double #t76 = self::getDouble() in let final void #t77 = #t73.{self::Test2::[]=}(#t74, #t76){(core::String, core::double?) → void} in #t76 : #t75{core::int};
+  core::double v9 = let final self::Test<core::int, core::double> #t78 = t in let final core::String #t79 = "x" in let final core::double #t80 = #t78.{self::Test::[]}(#t79){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t81 = #t78.{self::Test::[]=}(#t79, #t80){(core::String, core::double) → void} in #t80;
+  core::double v10 = let final self::Test<core::int, core::double> #t82 = t in let final core::String #t83 = "x" in let final core::double #t84 = #t82.{self::Test::[]}(#t83){(core::String) → core::int}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t85 = #t82.{self::Test::[]=}(#t83, #t84){(core::String, core::double) → void} in #t84;
+  core::int v11 = let final self::Test<core::int, core::double> #t86 = t in let final core::String #t87 = "x" in let final core::int #t88 = #t86.{self::Test::[]}(#t87){(core::String) → core::int} in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t88;
+}
+static method test4(self::Test<core::num, core::int> t, self::Test2<core::num, core::int> t2) → void {
+  core::int v1 = let final self::Test<core::num, core::int> #t90 = t in let final core::String #t91 = "x" in let final core::int #t92 = self::getInt() in let final void #t93 = #t90.{self::Test::[]=}(#t91, #t92){(core::String, core::int) → void} in #t92;
+  core::num v4 = let final self::Test2<core::num, core::int> #t94 = t2 in let final core::String #t95 = "x" in let final core::num? #t96 = #t94.{self::Test2::[]}(#t95){(core::String) → core::num?} in #t96 == null ?{core::num} let final core::int #t97 = self::getInt() in let final void #t98 = #t94.{self::Test2::[]=}(#t95, #t97){(core::String, core::int?) → void} in #t97 : #t96{core::num};
+}
+static method test5(self::Test<core::num, core::num> t, self::Test2<core::num, core::num> t2) → void {
+  core::int v1 = let final self::Test<core::num, core::num> #t99 = t in let final core::String #t100 = "x" in let final core::int #t101 = self::getInt() in let final void #t102 = #t99.{self::Test::[]=}(#t100, #t101){(core::String, core::num) → void} in #t101;
+  core::num v2 = let final self::Test<core::num, core::num> #t103 = t in let final core::String #t104 = "x" in let final core::num #t105 = self::getNum() in let final void #t106 = #t103.{self::Test::[]=}(#t104, #t105){(core::String, core::num) → void} in #t105;
+  core::double v3 = let final self::Test<core::num, core::num> #t107 = t in let final core::String #t108 = "x" in let final core::double #t109 = self::getDouble() in let final void #t110 = #t107.{self::Test::[]=}(#t108, #t109){(core::String, core::num) → void} in #t109;
+  core::num v4 = let final self::Test2<core::num, core::num> #t111 = t2 in let final core::String #t112 = "x" in let final core::num? #t113 = #t111.{self::Test2::[]}(#t112){(core::String) → core::num?} in #t113 == null ?{core::num} let final core::int #t114 = self::getInt() in let final void #t115 = #t111.{self::Test2::[]=}(#t112, #t114){(core::String, core::num?) → void} in #t114 : #t113{core::num};
+  core::num v5 = let final self::Test2<core::num, core::num> #t116 = t2 in let final core::String #t117 = "x" in let final core::num? #t118 = #t116.{self::Test2::[]}(#t117){(core::String) → core::num?} in #t118 == null ?{core::num} let final core::num #t119 = self::getNum() in let final void #t120 = #t116.{self::Test2::[]=}(#t117, #t119){(core::String, core::num?) → void} in #t119 : #t118{core::num};
+  core::num v6 = let final self::Test2<core::num, core::num> #t121 = t2 in let final core::String #t122 = "x" in let final core::num? #t123 = #t121.{self::Test2::[]}(#t122){(core::String) → core::num?} in #t123 == null ?{core::num} let final core::double #t124 = self::getDouble() in let final void #t125 = #t121.{self::Test2::[]=}(#t122, #t124){(core::String, core::num?) → void} in #t124 : #t123{core::num};
+  core::num v7 = let final self::Test<core::num, core::num> #t126 = t in let final core::String #t127 = "x" in let final core::num #t128 = #t126.{self::Test::[]}(#t127){(core::String) → core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t129 = #t126.{self::Test::[]=}(#t127, #t128){(core::String, core::num) → void} in #t128;
+  core::num v8 = let final self::Test<core::num, core::num> #t130 = t in let final core::String #t131 = "x" in let final core::num #t132 = #t130.{self::Test::[]}(#t131){(core::String) → core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t133 = #t130.{self::Test::[]=}(#t131, #t132){(core::String, core::num) → void} in #t132;
+  core::double v9 = let final self::Test<core::num, core::num> #t134 = t in let final core::String #t135 = "x" in let final core::double #t136 = #t134.{self::Test::[]}(#t135){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t137 = #t134.{self::Test::[]=}(#t135, #t136){(core::String, core::num) → void} in #t136;
+  core::num v10 = let final self::Test<core::num, core::num> #t138 = t in let final core::String #t139 = "x" in let final core::num #t140 = #t138.{self::Test::[]}(#t139){(core::String) → core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t141 = #t138.{self::Test::[]=}(#t139, #t140){(core::String, core::num) → void} in #t140;
+  core::num v11 = let final self::Test<core::num, core::num> #t142 = t in let final core::String #t143 = "x" in let final core::num #t144 = #t142.{self::Test::[]}(#t143){(core::String) → core::num} in let final void #t145 = #t142.{self::Test::[]=}(#t143, #t144.{core::num::+}(1){(core::num) → core::num}){(core::String, core::num) → void} in #t144;
+}
+static method test6(self::Test<core::num, core::double> t, self::Test2<core::num, core::double> t2) → void {
+  core::double v3 = let final self::Test<core::num, core::double> #t146 = t in let final core::String #t147 = "x" in let final core::double #t148 = self::getDouble() in let final void #t149 = #t146.{self::Test::[]=}(#t147, #t148){(core::String, core::double) → void} in #t148;
+  core::num v6 = let final self::Test2<core::num, core::double> #t150 = t2 in let final core::String #t151 = "x" in let final core::num? #t152 = #t150.{self::Test2::[]}(#t151){(core::String) → core::num?} in #t152 == null ?{core::num} let final core::double #t153 = self::getDouble() in let final void #t154 = #t150.{self::Test2::[]=}(#t151, #t153){(core::String, core::double?) → void} in #t153 : #t152{core::num};
+  core::double v9 = let final self::Test<core::num, core::double> #t155 = t in let final core::String #t156 = "x" in let final core::double #t157 = #t155.{self::Test::[]}(#t156){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t158 = #t155.{self::Test::[]=}(#t156, #t157){(core::String, core::double) → void} in #t157;
+  core::double v10 = let final self::Test<core::num, core::double> #t159 = t in let final core::String #t160 = "x" in let final core::double #t161 = #t159.{self::Test::[]}(#t160){(core::String) → core::num}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t162 = #t159.{self::Test::[]=}(#t160, #t161){(core::String, core::double) → void} in #t161;
+  core::num v11 = let final self::Test<core::num, core::double> #t163 = t in let final core::String #t164 = "x" in let final core::num #t165 = #t163.{self::Test::[]}(#t164){(core::String) → core::num} in let final void #t166 = #t163.{self::Test::[]=}(#t164, #t165.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t165;
+}
+static method test7(self::Test<core::double, core::int> t, self::Test2<core::double, core::int> t2) → void {
+  core::int v1 = let final self::Test<core::double, core::int> #t167 = t in let final core::String #t168 = "x" in let final core::int #t169 = self::getInt() in let final void #t170 = #t167.{self::Test::[]=}(#t168, #t169){(core::String, core::int) → void} in #t169;
+  invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart:153:2: Error: Undefined name 'st'.
+ st  var /*@type=num*/ v4 =
+ ^^";
+  core::num v4 = let final self::Test2<core::double, core::int> #t171 = t2 in let final core::String #t172 = "x" in let final core::double? #t173 = #t171.{self::Test2::[]}(#t172){(core::String) → core::double?} in #t173 == null ?{core::num} let final core::int #t174 = self::getInt() in let final void #t175 = #t171.{self::Test2::[]=}(#t172, #t174){(core::String, core::int?) → void} in #t174 : #t173{core::double};
+}
+static method test8(self::Test<core::double, core::num> t, self::Test2<core::double, core::num> t2) → void {
+  core::int v1 = let final self::Test<core::double, core::num> #t176 = t in let final core::String #t177 = "x" in let final core::int #t178 = self::getInt() in let final void #t179 = #t176.{self::Test::[]=}(#t177, #t178){(core::String, core::num) → void} in #t178;
+  core::num v2 = let final self::Test<core::double, core::num> #t180 = t in let final core::String #t181 = "x" in let final core::num #t182 = self::getNum() in let final void #t183 = #t180.{self::Test::[]=}(#t181, #t182){(core::String, core::num) → void} in #t182;
+  core::double v3 = let final self::Test<core::double, core::num> #t184 = t in let final core::String #t185 = "x" in let final core::double #t186 = self::getDouble() in let final void #t187 = #t184.{self::Test::[]=}(#t185, #t186){(core::String, core::num) → void} in #t186;
+  core::num v4 = let final self::Test2<core::double, core::num> #t188 = t2 in let final core::String #t189 = "x" in let final core::double? #t190 = #t188.{self::Test2::[]}(#t189){(core::String) → core::double?} in #t190 == null ?{core::num} let final core::int #t191 = self::getInt() in let final void #t192 = #t188.{self::Test2::[]=}(#t189, #t191){(core::String, core::num?) → void} in #t191 : #t190{core::double};
+  core::num v5 = let final self::Test2<core::double, core::num> #t193 = t2 in let final core::String #t194 = "x" in let final core::double? #t195 = #t193.{self::Test2::[]}(#t194){(core::String) → core::double?} in #t195 == null ?{core::num} let final core::num #t196 = self::getNum() in let final void #t197 = #t193.{self::Test2::[]=}(#t194, #t196){(core::String, core::num?) → void} in #t196 : #t195{core::double};
+  core::double v6 = let final self::Test2<core::double, core::num> #t198 = t2 in let final core::String #t199 = "x" in let final core::double? #t200 = #t198.{self::Test2::[]}(#t199){(core::String) → core::double?} in #t200 == null ?{core::double} let final core::double #t201 = self::getDouble() in let final void #t202 = #t198.{self::Test2::[]=}(#t199, #t201){(core::String, core::num?) → void} in #t201 : #t200{core::double};
+  core::double v7 = let final self::Test<core::double, core::num> #t203 = t in let final core::String #t204 = "x" in let final core::double #t205 = #t203.{self::Test::[]}(#t204){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t206 = #t203.{self::Test::[]=}(#t204, #t205){(core::String, core::num) → void} in #t205;
+  core::double v8 = let final self::Test<core::double, core::num> #t207 = t in let final core::String #t208 = "x" in let final core::double #t209 = #t207.{self::Test::[]}(#t208){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t210 = #t207.{self::Test::[]=}(#t208, #t209){(core::String, core::num) → void} in #t209;
+  core::double v9 = let final self::Test<core::double, core::num> #t211 = t in let final core::String #t212 = "x" in let final core::double #t213 = #t211.{self::Test::[]}(#t212){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t214 = #t211.{self::Test::[]=}(#t212, #t213){(core::String, core::num) → void} in #t213;
+  core::double v10 = let final self::Test<core::double, core::num> #t215 = t in let final core::String #t216 = "x" in let final core::double #t217 = #t215.{self::Test::[]}(#t216){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t218 = #t215.{self::Test::[]=}(#t216, #t217){(core::String, core::num) → void} in #t217;
+  core::double v11 = let final self::Test<core::double, core::num> #t219 = t in let final core::String #t220 = "x" in let final core::double #t221 = #t219.{self::Test::[]}(#t220){(core::String) → core::double} in let final void #t222 = #t219.{self::Test::[]=}(#t220, #t221.{core::double::+}(1){(core::num) → core::double}){(core::String, core::num) → void} in #t221;
+}
+static method test9(self::Test<core::double, core::double> t, self::Test2<core::double, core::double> t2) → void {
+  core::double v3 = let final self::Test<core::double, core::double> #t223 = t in let final core::String #t224 = "x" in let final core::double #t225 = self::getDouble() in let final void #t226 = #t223.{self::Test::[]=}(#t224, #t225){(core::String, core::double) → void} in #t225;
+  core::double v6 = let final self::Test2<core::double, core::double> #t227 = t2 in let final core::String #t228 = "x" in let final core::double? #t229 = #t227.{self::Test2::[]}(#t228){(core::String) → core::double?} in #t229 == null ?{core::double} let final core::double #t230 = self::getDouble() in let final void #t231 = #t227.{self::Test2::[]=}(#t228, #t230){(core::String, core::double?) → void} in #t230 : #t229{core::double};
+  core::double v7 = let final self::Test<core::double, core::double> #t232 = t in let final core::String #t233 = "x" in let final core::double #t234 = #t232.{self::Test::[]}(#t233){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t235 = #t232.{self::Test::[]=}(#t233, #t234){(core::String, core::double) → void} in #t234;
+  core::double v8 = let final self::Test<core::double, core::double> #t236 = t in let final core::String #t237 = "x" in let final core::double #t238 = #t236.{self::Test::[]}(#t237){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t239 = #t236.{self::Test::[]=}(#t237, #t238){(core::String, core::double) → void} in #t238;
+  core::double v9 = let final self::Test<core::double, core::double> #t240 = t in let final core::String #t241 = "x" in let final core::double #t242 = #t240.{self::Test::[]}(#t241){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t243 = #t240.{self::Test::[]=}(#t241, #t242){(core::String, core::double) → void} in #t242;
+  core::double v10 = let final self::Test<core::double, core::double> #t244 = t in let final core::String #t245 = "x" in let final core::double #t246 = #t244.{self::Test::[]}(#t245){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t247 = #t244.{self::Test::[]=}(#t245, #t246){(core::String, core::double) → void} in #t246;
+  core::double v11 = let final self::Test<core::double, core::double> #t248 = t in let final core::String #t249 = "x" in let final core::double #t250 = #t248.{self::Test::[]}(#t249){(core::String) → core::double} in let final void #t251 = #t248.{self::Test::[]=}(#t249, #t250.{core::double::+}(1){(core::num) → core::double}){(core::String, core::double) → void} in #t250;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.weak.outline.expect
new file mode 100644
index 0000000..9f5ada2
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.weak.outline.expect
@@ -0,0 +1,42 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Test<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Test<self::Test::T%, self::Test::U%>
+    ;
+  abstract operator [](core::String s) → self::Test::T%;
+  abstract operator []=(core::String s, covariant-by-class self::Test::U% v) → void;
+}
+abstract class Test2<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Test2<self::Test2::T%, self::Test2::U%>
+    ;
+  abstract operator [](core::String s) → self::Test2::T?;
+  abstract operator []=(core::String s, covariant-by-class self::Test2::U? v) → void;
+}
+static method getInt() → core::int
+  ;
+static method getNum() → core::num
+  ;
+static method getDouble() → core::double
+  ;
+static method test1(self::Test<core::int, core::int> t, self::Test2<core::int, core::int> t2) → void
+  ;
+static method test2(self::Test<core::int, core::num> t, self::Test2<core::int, core::num> t2) → void
+  ;
+static method test3(self::Test<core::int, core::double> t, self::Test2<core::int, core::double> t2) → void
+  ;
+static method test4(self::Test<core::num, core::int> t, self::Test2<core::num, core::int> t2) → void
+  ;
+static method test5(self::Test<core::num, core::num> t, self::Test2<core::num, core::num> t2) → void
+  ;
+static method test6(self::Test<core::num, core::double> t, self::Test2<core::num, core::double> t2) → void
+  ;
+static method test7(self::Test<core::double, core::int> t, self::Test2<core::double, core::int> t2) → void
+  ;
+static method test8(self::Test<core::double, core::num> t, self::Test2<core::double, core::num> t2) → void
+  ;
+static method test9(self::Test<core::double, core::double> t, self::Test2<core::double, core::double> t2) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.weak.transformed.expect
new file mode 100644
index 0000000..9ccb971
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart.weak.transformed.expect
@@ -0,0 +1,223 @@
+library test /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart:153:2: Error: Expected ';' after this.
+//  st  var /*@type=num*/ v4 =
+//  ^^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart:153:2: Error: Undefined name 'st'.
+//  st  var /*@type=num*/ v4 =
+//  ^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Test<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Test<self::Test::T%, self::Test::U%>
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → self::Test::T%;
+  abstract operator []=(core::String s, covariant-by-class self::Test::U% v) → void;
+}
+abstract class Test2<T extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Test2<self::Test2::T%, self::Test2::U%>
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String s) → self::Test2::T?;
+  abstract operator []=(core::String s, covariant-by-class self::Test2::U? v) → void;
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method test1(self::Test<core::int, core::int> t, self::Test2<core::int, core::int> t2) → void {
+  core::int v1 = let final self::Test<core::int, core::int> #t1 = t in let final core::String #t2 = "x" in let final core::int #t3 = self::getInt() in let final void #t4 = #t1.{self::Test::[]=}(#t2, #t3){(core::String, core::int) → void} in #t3;
+  core::int v4 = let final self::Test2<core::int, core::int> #t5 = t2 in let final core::String #t6 = "x" in let final core::int? #t7 = #t5.{self::Test2::[]}(#t6){(core::String) → core::int?} in #t7 == null ?{core::int} let final core::int #t8 = self::getInt() in let final void #t9 = #t5.{self::Test2::[]=}(#t6, #t8){(core::String, core::int?) → void} in #t8 : #t7{core::int};
+  core::int v7 = let final self::Test<core::int, core::int> #t10 = t in let final core::String #t11 = "x" in let final core::int #t12 = #t10.{self::Test::[]}(#t11){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t13 = #t10.{self::Test::[]=}(#t11, #t12){(core::String, core::int) → void} in #t12;
+  core::int v10 = let final self::Test<core::int, core::int> #t14 = t in let final core::String #t15 = "x" in let final core::int #t16 = #t14.{self::Test::[]}(#t15){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t17 = #t14.{self::Test::[]=}(#t15, #t16){(core::String, core::int) → void} in #t16;
+  core::int v11 = let final self::Test<core::int, core::int> #t18 = t in let final core::String #t19 = "x" in let final core::int #t20 = #t18.{self::Test::[]}(#t19){(core::String) → core::int} in let final void #t21 = #t18.{self::Test::[]=}(#t19, #t20.{core::num::+}(1){(core::num) → core::int}){(core::String, core::int) → void} in #t20;
+}
+static method test2(self::Test<core::int, core::num> t, self::Test2<core::int, core::num> t2) → void {
+  core::int v1 = let final self::Test<core::int, core::num> #t22 = t in let final core::String #t23 = "x" in let final core::int #t24 = self::getInt() in let final void #t25 = #t22.{self::Test::[]=}(#t23, #t24){(core::String, core::num) → void} in #t24;
+  core::num v2 = let final self::Test<core::int, core::num> #t26 = t in let final core::String #t27 = "x" in let final core::num #t28 = self::getNum() in let final void #t29 = #t26.{self::Test::[]=}(#t27, #t28){(core::String, core::num) → void} in #t28;
+  core::double v3 = let final self::Test<core::int, core::num> #t30 = t in let final core::String #t31 = "x" in let final core::double #t32 = self::getDouble() in let final void #t33 = #t30.{self::Test::[]=}(#t31, #t32){(core::String, core::num) → void} in #t32;
+  core::int v4 = let final self::Test2<core::int, core::num> #t34 = t2 in let final core::String #t35 = "x" in let final core::int? #t36 = #t34.{self::Test2::[]}(#t35){(core::String) → core::int?} in #t36 == null ?{core::int} let final core::int #t37 = self::getInt() in let final void #t38 = #t34.{self::Test2::[]=}(#t35, #t37){(core::String, core::num?) → void} in #t37 : #t36{core::int};
+  core::num v5 = let final self::Test2<core::int, core::num> #t39 = t2 in let final core::String #t40 = "x" in let final core::int? #t41 = #t39.{self::Test2::[]}(#t40){(core::String) → core::int?} in #t41 == null ?{core::num} let final core::num #t42 = self::getNum() in let final void #t43 = #t39.{self::Test2::[]=}(#t40, #t42){(core::String, core::num?) → void} in #t42 : #t41{core::int};
+  core::num v6 = let final self::Test2<core::int, core::num> #t44 = t2 in let final core::String #t45 = "x" in let final core::int? #t46 = #t44.{self::Test2::[]}(#t45){(core::String) → core::int?} in #t46 == null ?{core::num} let final core::double #t47 = self::getDouble() in let final void #t48 = #t44.{self::Test2::[]=}(#t45, #t47){(core::String, core::num?) → void} in #t47 : #t46{core::int};
+  core::int v7 = let final self::Test<core::int, core::num> #t49 = t in let final core::String #t50 = "x" in let final core::int #t51 = #t49.{self::Test::[]}(#t50){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t52 = #t49.{self::Test::[]=}(#t50, #t51){(core::String, core::num) → void} in #t51;
+  core::num v8 = let final self::Test<core::int, core::num> #t53 = t in let final core::String #t54 = "x" in let final core::num #t55 = #t53.{self::Test::[]}(#t54){(core::String) → core::int}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t56 = #t53.{self::Test::[]=}(#t54, #t55){(core::String, core::num) → void} in #t55;
+  core::double v9 = let final self::Test<core::int, core::num> #t57 = t in let final core::String #t58 = "x" in let final core::double #t59 = #t57.{self::Test::[]}(#t58){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t60 = #t57.{self::Test::[]=}(#t58, #t59){(core::String, core::num) → void} in #t59;
+  core::int v10 = let final self::Test<core::int, core::num> #t61 = t in let final core::String #t62 = "x" in let final core::int #t63 = #t61.{self::Test::[]}(#t62){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t64 = #t61.{self::Test::[]=}(#t62, #t63){(core::String, core::num) → void} in #t63;
+  core::int v11 = let final self::Test<core::int, core::num> #t65 = t in let final core::String #t66 = "x" in let final core::int #t67 = #t65.{self::Test::[]}(#t66){(core::String) → core::int} in let final void #t68 = #t65.{self::Test::[]=}(#t66, #t67.{core::num::+}(1){(core::num) → core::int}){(core::String, core::num) → void} in #t67;
+}
+static method test3(self::Test<core::int, core::double> t, self::Test2<core::int, core::double> t2) → void {
+  core::double v3 = let final self::Test<core::int, core::double> #t69 = t in let final core::String #t70 = "x" in let final core::double #t71 = self::getDouble() in let final void #t72 = #t69.{self::Test::[]=}(#t70, #t71){(core::String, core::double) → void} in #t71;
+  core::num v6 = let final self::Test2<core::int, core::double> #t73 = t2 in let final core::String #t74 = "x" in let final core::int? #t75 = #t73.{self::Test2::[]}(#t74){(core::String) → core::int?} in #t75 == null ?{core::num} let final core::double #t76 = self::getDouble() in let final void #t77 = #t73.{self::Test2::[]=}(#t74, #t76){(core::String, core::double?) → void} in #t76 : #t75{core::int};
+  core::double v9 = let final self::Test<core::int, core::double> #t78 = t in let final core::String #t79 = "x" in let final core::double #t80 = #t78.{self::Test::[]}(#t79){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t81 = #t78.{self::Test::[]=}(#t79, #t80){(core::String, core::double) → void} in #t80;
+  core::double v10 = let final self::Test<core::int, core::double> #t82 = t in let final core::String #t83 = "x" in let final core::double #t84 = #t82.{self::Test::[]}(#t83){(core::String) → core::int}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t85 = #t82.{self::Test::[]=}(#t83, #t84){(core::String, core::double) → void} in #t84;
+  core::int v11 = let final self::Test<core::int, core::double> #t86 = t in let final core::String #t87 = "x" in let final core::int #t88 = #t86.{self::Test::[]}(#t87){(core::String) → core::int} in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t88;
+}
+static method test4(self::Test<core::num, core::int> t, self::Test2<core::num, core::int> t2) → void {
+  core::int v1 = let final self::Test<core::num, core::int> #t90 = t in let final core::String #t91 = "x" in let final core::int #t92 = self::getInt() in let final void #t93 = #t90.{self::Test::[]=}(#t91, #t92){(core::String, core::int) → void} in #t92;
+  core::num v4 = let final self::Test2<core::num, core::int> #t94 = t2 in let final core::String #t95 = "x" in let final core::num? #t96 = #t94.{self::Test2::[]}(#t95){(core::String) → core::num?} in #t96 == null ?{core::num} let final core::int #t97 = self::getInt() in let final void #t98 = #t94.{self::Test2::[]=}(#t95, #t97){(core::String, core::int?) → void} in #t97 : #t96{core::num};
+}
+static method test5(self::Test<core::num, core::num> t, self::Test2<core::num, core::num> t2) → void {
+  core::int v1 = let final self::Test<core::num, core::num> #t99 = t in let final core::String #t100 = "x" in let final core::int #t101 = self::getInt() in let final void #t102 = #t99.{self::Test::[]=}(#t100, #t101){(core::String, core::num) → void} in #t101;
+  core::num v2 = let final self::Test<core::num, core::num> #t103 = t in let final core::String #t104 = "x" in let final core::num #t105 = self::getNum() in let final void #t106 = #t103.{self::Test::[]=}(#t104, #t105){(core::String, core::num) → void} in #t105;
+  core::double v3 = let final self::Test<core::num, core::num> #t107 = t in let final core::String #t108 = "x" in let final core::double #t109 = self::getDouble() in let final void #t110 = #t107.{self::Test::[]=}(#t108, #t109){(core::String, core::num) → void} in #t109;
+  core::num v4 = let final self::Test2<core::num, core::num> #t111 = t2 in let final core::String #t112 = "x" in let final core::num? #t113 = #t111.{self::Test2::[]}(#t112){(core::String) → core::num?} in #t113 == null ?{core::num} let final core::int #t114 = self::getInt() in let final void #t115 = #t111.{self::Test2::[]=}(#t112, #t114){(core::String, core::num?) → void} in #t114 : #t113{core::num};
+  core::num v5 = let final self::Test2<core::num, core::num> #t116 = t2 in let final core::String #t117 = "x" in let final core::num? #t118 = #t116.{self::Test2::[]}(#t117){(core::String) → core::num?} in #t118 == null ?{core::num} let final core::num #t119 = self::getNum() in let final void #t120 = #t116.{self::Test2::[]=}(#t117, #t119){(core::String, core::num?) → void} in #t119 : #t118{core::num};
+  core::num v6 = let final self::Test2<core::num, core::num> #t121 = t2 in let final core::String #t122 = "x" in let final core::num? #t123 = #t121.{self::Test2::[]}(#t122){(core::String) → core::num?} in #t123 == null ?{core::num} let final core::double #t124 = self::getDouble() in let final void #t125 = #t121.{self::Test2::[]=}(#t122, #t124){(core::String, core::num?) → void} in #t124 : #t123{core::num};
+  core::num v7 = let final self::Test<core::num, core::num> #t126 = t in let final core::String #t127 = "x" in let final core::num #t128 = #t126.{self::Test::[]}(#t127){(core::String) → core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t129 = #t126.{self::Test::[]=}(#t127, #t128){(core::String, core::num) → void} in #t128;
+  core::num v8 = let final self::Test<core::num, core::num> #t130 = t in let final core::String #t131 = "x" in let final core::num #t132 = #t130.{self::Test::[]}(#t131){(core::String) → core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t133 = #t130.{self::Test::[]=}(#t131, #t132){(core::String, core::num) → void} in #t132;
+  core::double v9 = let final self::Test<core::num, core::num> #t134 = t in let final core::String #t135 = "x" in let final core::double #t136 = #t134.{self::Test::[]}(#t135){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t137 = #t134.{self::Test::[]=}(#t135, #t136){(core::String, core::num) → void} in #t136;
+  core::num v10 = let final self::Test<core::num, core::num> #t138 = t in let final core::String #t139 = "x" in let final core::num #t140 = #t138.{self::Test::[]}(#t139){(core::String) → core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t141 = #t138.{self::Test::[]=}(#t139, #t140){(core::String, core::num) → void} in #t140;
+  core::num v11 = let final self::Test<core::num, core::num> #t142 = t in let final core::String #t143 = "x" in let final core::num #t144 = #t142.{self::Test::[]}(#t143){(core::String) → core::num} in let final void #t145 = #t142.{self::Test::[]=}(#t143, #t144.{core::num::+}(1){(core::num) → core::num}){(core::String, core::num) → void} in #t144;
+}
+static method test6(self::Test<core::num, core::double> t, self::Test2<core::num, core::double> t2) → void {
+  core::double v3 = let final self::Test<core::num, core::double> #t146 = t in let final core::String #t147 = "x" in let final core::double #t148 = self::getDouble() in let final void #t149 = #t146.{self::Test::[]=}(#t147, #t148){(core::String, core::double) → void} in #t148;
+  core::num v6 = let final self::Test2<core::num, core::double> #t150 = t2 in let final core::String #t151 = "x" in let final core::num? #t152 = #t150.{self::Test2::[]}(#t151){(core::String) → core::num?} in #t152 == null ?{core::num} let final core::double #t153 = self::getDouble() in let final void #t154 = #t150.{self::Test2::[]=}(#t151, #t153){(core::String, core::double?) → void} in #t153 : #t152{core::num};
+  core::double v9 = let final self::Test<core::num, core::double> #t155 = t in let final core::String #t156 = "x" in let final core::double #t157 = #t155.{self::Test::[]}(#t156){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t158 = #t155.{self::Test::[]=}(#t156, #t157){(core::String, core::double) → void} in #t157;
+  core::double v10 = let final self::Test<core::num, core::double> #t159 = t in let final core::String #t160 = "x" in let final core::double #t161 = #t159.{self::Test::[]}(#t160){(core::String) → core::num}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t162 = #t159.{self::Test::[]=}(#t160, #t161){(core::String, core::double) → void} in #t161;
+  core::num v11 = let final self::Test<core::num, core::double> #t163 = t in let final core::String #t164 = "x" in let final core::num #t165 = #t163.{self::Test::[]}(#t164){(core::String) → core::num} in let final void #t166 = #t163.{self::Test::[]=}(#t164, #t165.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t165;
+}
+static method test7(self::Test<core::double, core::int> t, self::Test2<core::double, core::int> t2) → void {
+  core::int v1 = let final self::Test<core::double, core::int> #t167 = t in let final core::String #t168 = "x" in let final core::int #t169 = self::getInt() in let final void #t170 = #t167.{self::Test::[]=}(#t168, #t169){(core::String, core::int) → void} in #t169;
+  invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards2.dart:153:2: Error: Undefined name 'st'.
+ st  var /*@type=num*/ v4 =
+ ^^";
+  core::num v4 = let final self::Test2<core::double, core::int> #t171 = t2 in let final core::String #t172 = "x" in let final core::double? #t173 = #t171.{self::Test2::[]}(#t172){(core::String) → core::double?} in #t173 == null ?{core::num} let final core::int #t174 = self::getInt() in let final void #t175 = #t171.{self::Test2::[]=}(#t172, #t174){(core::String, core::int?) → void} in #t174 : #t173{core::double};
+}
+static method test8(self::Test<core::double, core::num> t, self::Test2<core::double, core::num> t2) → void {
+  core::int v1 = let final self::Test<core::double, core::num> #t176 = t in let final core::String #t177 = "x" in let final core::int #t178 = self::getInt() in let final void #t179 = #t176.{self::Test::[]=}(#t177, #t178){(core::String, core::num) → void} in #t178;
+  core::num v2 = let final self::Test<core::double, core::num> #t180 = t in let final core::String #t181 = "x" in let final core::num #t182 = self::getNum() in let final void #t183 = #t180.{self::Test::[]=}(#t181, #t182){(core::String, core::num) → void} in #t182;
+  core::double v3 = let final self::Test<core::double, core::num> #t184 = t in let final core::String #t185 = "x" in let final core::double #t186 = self::getDouble() in let final void #t187 = #t184.{self::Test::[]=}(#t185, #t186){(core::String, core::num) → void} in #t186;
+  core::num v4 = let final self::Test2<core::double, core::num> #t188 = t2 in let final core::String #t189 = "x" in let final core::double? #t190 = #t188.{self::Test2::[]}(#t189){(core::String) → core::double?} in #t190 == null ?{core::num} let final core::int #t191 = self::getInt() in let final void #t192 = #t188.{self::Test2::[]=}(#t189, #t191){(core::String, core::num?) → void} in #t191 : #t190{core::double};
+  core::num v5 = let final self::Test2<core::double, core::num> #t193 = t2 in let final core::String #t194 = "x" in let final core::double? #t195 = #t193.{self::Test2::[]}(#t194){(core::String) → core::double?} in #t195 == null ?{core::num} let final core::num #t196 = self::getNum() in let final void #t197 = #t193.{self::Test2::[]=}(#t194, #t196){(core::String, core::num?) → void} in #t196 : #t195{core::double};
+  core::double v6 = let final self::Test2<core::double, core::num> #t198 = t2 in let final core::String #t199 = "x" in let final core::double? #t200 = #t198.{self::Test2::[]}(#t199){(core::String) → core::double?} in #t200 == null ?{core::double} let final core::double #t201 = self::getDouble() in let final void #t202 = #t198.{self::Test2::[]=}(#t199, #t201){(core::String, core::num?) → void} in #t201 : #t200{core::double};
+  core::double v7 = let final self::Test<core::double, core::num> #t203 = t in let final core::String #t204 = "x" in let final core::double #t205 = #t203.{self::Test::[]}(#t204){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t206 = #t203.{self::Test::[]=}(#t204, #t205){(core::String, core::num) → void} in #t205;
+  core::double v8 = let final self::Test<core::double, core::num> #t207 = t in let final core::String #t208 = "x" in let final core::double #t209 = #t207.{self::Test::[]}(#t208){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t210 = #t207.{self::Test::[]=}(#t208, #t209){(core::String, core::num) → void} in #t209;
+  core::double v9 = let final self::Test<core::double, core::num> #t211 = t in let final core::String #t212 = "x" in let final core::double #t213 = #t211.{self::Test::[]}(#t212){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t214 = #t211.{self::Test::[]=}(#t212, #t213){(core::String, core::num) → void} in #t213;
+  core::double v10 = let final self::Test<core::double, core::num> #t215 = t in let final core::String #t216 = "x" in let final core::double #t217 = #t215.{self::Test::[]}(#t216){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t218 = #t215.{self::Test::[]=}(#t216, #t217){(core::String, core::num) → void} in #t217;
+  core::double v11 = let final self::Test<core::double, core::num> #t219 = t in let final core::String #t220 = "x" in let final core::double #t221 = #t219.{self::Test::[]}(#t220){(core::String) → core::double} in let final void #t222 = #t219.{self::Test::[]=}(#t220, #t221.{core::double::+}(1){(core::num) → core::double}){(core::String, core::num) → void} in #t221;
+}
+static method test9(self::Test<core::double, core::double> t, self::Test2<core::double, core::double> t2) → void {
+  core::double v3 = let final self::Test<core::double, core::double> #t223 = t in let final core::String #t224 = "x" in let final core::double #t225 = self::getDouble() in let final void #t226 = #t223.{self::Test::[]=}(#t224, #t225){(core::String, core::double) → void} in #t225;
+  core::double v6 = let final self::Test2<core::double, core::double> #t227 = t2 in let final core::String #t228 = "x" in let final core::double? #t229 = #t227.{self::Test2::[]}(#t228){(core::String) → core::double?} in #t229 == null ?{core::double} let final core::double #t230 = self::getDouble() in let final void #t231 = #t227.{self::Test2::[]=}(#t228, #t230){(core::String, core::double?) → void} in #t230 : #t229{core::double};
+  core::double v7 = let final self::Test<core::double, core::double> #t232 = t in let final core::String #t233 = "x" in let final core::double #t234 = #t232.{self::Test::[]}(#t233){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t235 = #t232.{self::Test::[]=}(#t233, #t234){(core::String, core::double) → void} in #t234;
+  core::double v8 = let final self::Test<core::double, core::double> #t236 = t in let final core::String #t237 = "x" in let final core::double #t238 = #t236.{self::Test::[]}(#t237){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t239 = #t236.{self::Test::[]=}(#t237, #t238){(core::String, core::double) → void} in #t238;
+  core::double v9 = let final self::Test<core::double, core::double> #t240 = t in let final core::String #t241 = "x" in let final core::double #t242 = #t240.{self::Test::[]}(#t241){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t243 = #t240.{self::Test::[]=}(#t241, #t242){(core::String, core::double) → void} in #t242;
+  core::double v10 = let final self::Test<core::double, core::double> #t244 = t in let final core::String #t245 = "x" in let final core::double #t246 = #t244.{self::Test::[]}(#t245){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t247 = #t244.{self::Test::[]=}(#t245, #t246){(core::String, core::double) → void} in #t246;
+  core::double v11 = let final self::Test<core::double, core::double> #t248 = t in let final core::String #t249 = "x" in let final core::double #t250 = #t248.{self::Test::[]}(#t249){(core::String) → core::double} in let final void #t251 = #t248.{self::Test::[]=}(#t249, #t250.{core::double::+}(1){(core::num) → core::double}){(core::String, core::double) → void} in #t250;
+}
+static method main() → dynamic {}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:23:50 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:26:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:26:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:29:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:29:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:33:71 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:33:71 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:36:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:36:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:40:50 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:42:50 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:44:53 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:47:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:47:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:50:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:50:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:53:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:53:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:56:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:56:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:60:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:60:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:64:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:64:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:68:71 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:68:71 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:71:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:71:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:75:53 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:78:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:78:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:81:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:81:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:85:71 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:85:71 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:88:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:88:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:92:50 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:95:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:95:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:99:50 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:101:50 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:103:53 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:106:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:106:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:109:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:109:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:112:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:112:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:115:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:115:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:119:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:119:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:123:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:123:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:127:71 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:127:71 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:130:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:130:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:134:53 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:137:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:137:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:140:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:140:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:144:71 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:144:71 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:147:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:147:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:151:50 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:154:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:154:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:158:50 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:160:50 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:162:53 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:165:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:165:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:168:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:168:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:171:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:171:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:174:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:174:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:178:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:178:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:182:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:182:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:186:74 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:186:74 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:189:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:189:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:193:53 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:196:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:196:54 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:199:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:199:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:203:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:203:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:207:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:207:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:211:74 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:211:74 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:214:51 -> StringConstant("x")
+Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_upwards2.dart:214:51 -> StringConstant("x")
+Extra constant evaluation: evaluated: 871, effectively constant: 103
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart
index d6b952a..2ab05f4 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -20,38 +22,38 @@
 
 void test() {
   B local;
-  local = /*@ typeArgs=B* */ f();
+  local = /*@typeArgs=B**/ f();
 
-  local  ??= /*@ typeArgs=B* */ f();
+  local  ??= /*@typeArgs=B**/ f();
 
-  local /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+  local /*@target=B.+*/ += /*@typeArgs=C**/ f();
 
-  local /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+  local /*@target=B.**/ *= /*@typeArgs=B**/ f();
 
-  local /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+  local /*@target=B.&*/ &= /*@typeArgs=A**/ f();
 
   /*@target=B.-*/ --local;
 
   local /*@target=B.-*/ --;
 
-  var /*@ type=B* */ v1 = local = /*@ typeArgs=B* */ f();
+  var /*@type=B**/ v1 = local = /*@typeArgs=B**/ f();
 
-  var /*@ type=B* */ v2 =
-      local  ??= /*@ typeArgs=B* */ f();
+  var /*@type=B**/ v2 =
+      local  ??= /*@typeArgs=B**/ f();
 
-  var /*@ type=A* */ v3 = local
-      /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+  var /*@type=A**/ v3 = local
+      /*@target=B.+*/ += /*@typeArgs=C**/ f();
 
-  var /*@ type=B* */ v4 = local
-      /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+  var /*@type=B**/ v4 = local
+      /*@target=B.**/ *= /*@typeArgs=B**/ f();
 
-  var /*@ type=C* */ v5 = local
-      /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+  var /*@type=C**/ v5 = local
+      /*@target=B.&*/ &= /*@typeArgs=A**/ f();
 
-  var /*@ type=B* */ v6 = /*@target=B.-*/ --local;
+  var /*@type=B**/ v6 = /*@target=B.-*/ --local;
 
-  var /*@ type=B* */ v7 = /*@ type=B* */ local
-      /*@ type=B* */ /*@target=B.-*/ --;
+  var /*@type=B**/ v7 = /*@type=B**/ local
+      /*@type=B**/ /*@target=B.-*/ --;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart
new file mode 100644
index 0000000..3cca74e
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart
@@ -0,0 +1,51 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+void test(B local, B? local2, B? local3) {
+  local = /*@typeArgs=B*/ f();
+
+  local2 ??= /*@typeArgs=B?*/ f();
+
+  local /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+  local /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+  local /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+  /*@target=B.-*/ --local;
+
+  local /*@target=B.-*/ --;
+
+  var /*@type=B*/ v1 = local = /*@typeArgs=B*/ f();
+
+  var /*@type=B?*/ v2 = local3 ??= /*@typeArgs=B?*/ f();
+
+  var /*@type=B*/ v3 = local /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+  var /*@type=B*/ v4 = local /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+  var /*@type=C*/ v5 = local /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+  var /*@type=B*/ v6 = /*@target=B.-*/ --local;
+
+  var /*@type=B*/ v7 = /*@type=B*/ local /*@type=B*/ /*@target=B.-*/ --;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.textual_outline.expect
new file mode 100644
index 0000000..76cd500
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+void test(B local, B? local2, B? local3) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..54c75c7
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.textual_outline_modelled.expect
@@ -0,0 +1,17 @@
+library test;
+
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+main() {}
+void test(B local, B? local2, B? local3) {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.weak.expect
new file mode 100644
index 0000000..e817caa
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.weak.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test(self::B local, self::B? local2, self::B? local3) → void {
+  local = self::f<self::B>();
+  local2 == null ?{self::B?} local2 = self::f<self::B?>() : null;
+  local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  local = local.{self::B::-}(1){(core::int) → self::B};
+  local = local.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = local = self::f<self::B>();
+  self::B? v2 = let final self::B? #t1 = local3 in #t1 == null ?{self::B?} local3 = self::f<self::B?>() : #t1{self::B};
+  self::B v3 = local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = local = local.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t2 = local in let final self::B #t3 = local = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.weak.modular.expect
new file mode 100644
index 0000000..e817caa
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test(self::B local, self::B? local2, self::B? local3) → void {
+  local = self::f<self::B>();
+  local2 == null ?{self::B?} local2 = self::f<self::B?>() : null;
+  local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  local = local.{self::B::-}(1){(core::int) → self::B};
+  local = local.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = local = self::f<self::B>();
+  self::B? v2 = let final self::B? #t1 = local3 in #t1 == null ?{self::B?} local3 = self::f<self::B?>() : #t1{self::B};
+  self::B v3 = local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = local = local.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t2 = local in let final self::B #t3 = local = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.weak.outline.expect
new file mode 100644
index 0000000..ee73ba5
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.weak.outline.expect
@@ -0,0 +1,30 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method test(self::B local, self::B? local2, self::B? local3) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.weak.transformed.expect
new file mode 100644
index 0000000..e817caa
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local2.dart.weak.transformed.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test(self::B local, self::B? local2, self::B? local3) → void {
+  local = self::f<self::B>();
+  local2 == null ?{self::B?} local2 = self::f<self::B?>() : null;
+  local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  local = local.{self::B::-}(1){(core::int) → self::B};
+  local = local.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = local = self::f<self::B>();
+  self::B? v2 = let final self::B? #t1 = local3 in #t1 == null ?{self::B?} local3 = self::f<self::B?>() : #t1{self::B};
+  self::B v3 = local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = local = local.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t2 = local in let final self::B #t3 = local = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart
index 6a3242d..758f432 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -10,68 +12,66 @@
 double getDouble() => 0.0;
 
 void test1(int t) {
-  var /*@ type=int* */ v1 = t = getInt();
+  var /*@type=int**/ v1 = t = getInt();
 
-  var /*@ type=num* */ v2 = t = getNum();
+  var /*@type=num**/ v2 = t = getNum();
 
-  var /*@ type=int* */ v4 = t ??= getInt();
+  var /*@type=int**/ v4 = t ??= getInt();
 
-  var /*@ type=num* */ v5 = t ??= getNum();
+  var /*@type=num**/ v5 = t ??= getNum();
 
-  var /*@ type=int* */ v7 = t /*@target=num.+*/ += getInt();
+  var /*@type=int**/ v7 = t /*@target=num.+*/ += getInt();
 
-  var /*@ type=num* */ v8 = t /*@target=num.+*/ += getNum();
+  var /*@type=num**/ v8 = t /*@target=num.+*/ += getNum();
 
-  var /*@ type=int* */ v10 = /*@target=num.+*/ ++t;
+  var /*@type=int**/ v10 = /*@target=num.+*/ ++t;
 
-  var /*@ type=int* */ v11 =
-      /*@ type=int* */ t /*@ type=int* */ /*@target=num.+*/ ++;
+  var /*@type=int**/ v11 = /*@type=int**/ t /*@type=int**/ /*@target=num.+*/ ++;
 }
 
 void test2(num t) {
-  var /*@ type=int* */ v1 = t = getInt();
+  var /*@type=int**/ v1 = t = getInt();
 
-  var /*@ type=num* */ v2 = t = getNum();
+  var /*@type=num**/ v2 = t = getNum();
 
-  var /*@ type=double* */ v3 = t = getDouble();
+  var /*@type=double**/ v3 = t = getDouble();
 
-  var /*@ type=num* */ v4 = t ??= getInt();
+  var /*@type=num**/ v4 = t ??= getInt();
 
-  var /*@ type=num* */ v5 = t ??= getNum();
+  var /*@type=num**/ v5 = t ??= getNum();
 
-  var /*@ type=num* */ v6 = t ??= getDouble();
+  var /*@type=num**/ v6 = t ??= getDouble();
 
-  var /*@ type=num* */ v7 = t /*@target=num.+*/ += getInt();
+  var /*@type=num**/ v7 = t /*@target=num.+*/ += getInt();
 
-  var /*@ type=num* */ v8 = t /*@target=num.+*/ += getNum();
+  var /*@type=num**/ v8 = t /*@target=num.+*/ += getNum();
 
-  var /*@ type=num* */ v9 = t /*@target=num.+*/ += getDouble();
+  var /*@type=num**/ v9 = t /*@target=num.+*/ += getDouble();
 
-  var /*@ type=num* */ v10 = /*@target=num.+*/ ++t;
+  var /*@type=num**/ v10 = /*@target=num.+*/ ++t;
 
-  var /*@ type=num* */ v11 =
-      /*@ type=num* */ t /*@ type=num* */ /*@target=num.+*/ ++;
+  var /*@type=num**/ v11 = /*@type=num**/ t /*@type=num**/ /*@target=num.+*/ ++;
 }
 
 void test3(double t) {
-  var /*@ type=num* */ v2 = t = getNum();
+  var /*@type=num**/ v2 = t = getNum();
 
-  var /*@ type=double* */ v3 = t = getDouble();
+  var /*@type=double**/ v3 = t = getDouble();
 
-  var /*@ type=num* */ v5 = t ??= getNum();
+  var /*@type=num**/ v5 = t ??= getNum();
 
-  var /*@ type=double* */ v6 = t ??= getDouble();
+  var /*@type=double**/ v6 = t ??= getDouble();
 
-  var /*@ type=double* */ v7 = t /*@target=double.+*/ += getInt();
+  var /*@type=double**/ v7 = t /*@target=double.+*/ += getInt();
 
-  var /*@ type=double* */ v8 = t /*@target=double.+*/ += getNum();
+  var /*@type=double**/ v8 = t /*@target=double.+*/ += getNum();
 
-  var /*@ type=double* */ v9 = t /*@target=double.+*/ += getDouble();
+  var /*@type=double**/ v9 = t /*@target=double.+*/ += getDouble();
 
-  var /*@ type=double* */ v10 = /*@target=double.+*/ ++t;
+  var /*@type=double**/ v10 = /*@target=double.+*/ ++t;
 
-  var /*@ type=double* */ v11 =
-      /*@ type=double* */ t /*@ type=double* */ /*@target=double.+*/ ++;
+  var /*@type=double**/ v11 =
+      /*@type=double**/ t /*@type=double**/ /*@target=double.+*/ ++;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart
new file mode 100644
index 0000000..9d06fc5
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart
@@ -0,0 +1,65 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+void test1(int t, int? t2) {
+  var /*@type=int*/ v1 = t = getInt();
+
+  var /*@type=int*/ v4 = t2 ??= getInt();
+
+  var /*@type=int*/ v7 = t /*@target=num.+*/ += getInt();
+
+  var /*@type=int*/ v10 = /*@target=num.+*/ ++t;
+
+  var /*@type=int*/ v11 = /*@type=int*/ t /*@type=int*/ /*@target=num.+*/ ++;
+}
+
+void test2(num t, num? t2, num? t3, num? t4) {
+  var /*@type=int*/ v1 = t = getInt();
+
+  var /*@type=num*/ v2 = t = getNum();
+
+  var /*@type=double*/ v3 = t = getDouble();
+
+  var /*@type=num*/ v4 = t2 ??= getInt();
+
+  var /*@type=num*/ v5 = t3 ??= getNum();
+
+  var /*@type=num*/ v6 = t4 ??= getDouble();
+
+  var /*@type=num*/ v7 = t /*@target=num.+*/ += getInt();
+
+  var /*@type=num*/ v8 = t /*@target=num.+*/ += getNum();
+
+  var /*@type=double*/ v9 = t /*@target=num.+*/ += getDouble();
+
+  var /*@type=num*/ v10 = /*@target=num.+*/ ++t;
+
+  var /*@type=num*/ v11 = /*@type=num*/ t /*@type=num*/ /*@target=num.+*/ ++;
+}
+
+void test3(double t, double? t2) {
+  var /*@type=double*/ v3 = t = getDouble();
+
+  var /*@type=double*/ v6 = t2 ??= getDouble();
+
+  var /*@type=double*/ v7 = t /*@target=double.+*/ += getInt();
+
+  var /*@type=double*/ v8 = t /*@target=double.+*/ += getNum();
+
+  var /*@type=double*/ v9 = t /*@target=double.+*/ += getDouble();
+
+  var /*@type=double*/ v10 = /*@target=double.+*/ ++t;
+
+  var /*@type=double*/ v11 =
+      /*@type=double*/ t /*@type=double*/ /*@target=double.+*/ ++;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.textual_outline.expect
new file mode 100644
index 0000000..9202a99
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+void test1(int t, int? t2) {}
+void test2(num t, num? t2, num? t3, num? t4) {}
+void test3(double t, double? t2) {}
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d299937
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+library test;
+
+double getDouble() => 0.0;
+int getInt() => 0;
+main() {}
+num getNum() => 0;
+void test1(int t, int? t2) {}
+void test2(num t, num? t2, num? t3, num? t4) {}
+void test3(double t, double? t2) {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.weak.expect
new file mode 100644
index 0000000..62846c1
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.weak.expect
@@ -0,0 +1,40 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method test1(core::int t, core::int? t2) → void {
+  core::int v1 = t = self::getInt();
+  core::int v4 = let final core::int? #t1 = t2 in #t1 == null ?{core::int} t2 = self::getInt() : #t1{core::int};
+  core::int v7 = t = t.{core::num::+}(self::getInt()){(core::num) → core::int};
+  core::int v10 = t = t.{core::num::+}(1){(core::num) → core::int};
+  core::int v11 = let final core::int #t2 = t in let final core::int #t3 = t = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+}
+static method test2(core::num t, core::num? t2, core::num? t3, core::num? t4) → void {
+  core::int v1 = t = self::getInt();
+  core::num v2 = t = self::getNum();
+  core::double v3 = t = self::getDouble();
+  core::num v4 = let final core::num? #t4 = t2 in #t4 == null ?{core::num} t2 = self::getInt() : #t4{core::num};
+  core::num v5 = let final core::num? #t5 = t3 in #t5 == null ?{core::num} t3 = self::getNum() : #t5{core::num};
+  core::num v6 = let final core::num? #t6 = t4 in #t6 == null ?{core::num} t4 = self::getDouble() : #t6{core::num};
+  core::num v7 = t = t.{core::num::+}(self::getInt()){(core::num) → core::num};
+  core::num v8 = t = t.{core::num::+}(self::getNum()){(core::num) → core::num};
+  core::double v9 = t = t.{core::num::+}(self::getDouble()){(core::num) → core::double};
+  core::num v10 = t = t.{core::num::+}(1){(core::num) → core::num};
+  core::num v11 = let final core::num #t7 = t in let final core::num #t8 = t = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+}
+static method test3(core::double t, core::double? t2) → void {
+  core::double v3 = t = self::getDouble();
+  core::double v6 = let final core::double? #t9 = t2 in #t9 == null ?{core::double} t2 = self::getDouble() : #t9{core::double};
+  core::double v7 = t = t.{core::double::+}(self::getInt()){(core::num) → core::double};
+  core::double v8 = t = t.{core::double::+}(self::getNum()){(core::num) → core::double};
+  core::double v9 = t = t.{core::double::+}(self::getDouble()){(core::num) → core::double};
+  core::double v10 = t = t.{core::double::+}(1){(core::num) → core::double};
+  core::double v11 = let final core::double #t10 = t in let final core::double #t11 = t = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.weak.modular.expect
new file mode 100644
index 0000000..62846c1
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method test1(core::int t, core::int? t2) → void {
+  core::int v1 = t = self::getInt();
+  core::int v4 = let final core::int? #t1 = t2 in #t1 == null ?{core::int} t2 = self::getInt() : #t1{core::int};
+  core::int v7 = t = t.{core::num::+}(self::getInt()){(core::num) → core::int};
+  core::int v10 = t = t.{core::num::+}(1){(core::num) → core::int};
+  core::int v11 = let final core::int #t2 = t in let final core::int #t3 = t = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+}
+static method test2(core::num t, core::num? t2, core::num? t3, core::num? t4) → void {
+  core::int v1 = t = self::getInt();
+  core::num v2 = t = self::getNum();
+  core::double v3 = t = self::getDouble();
+  core::num v4 = let final core::num? #t4 = t2 in #t4 == null ?{core::num} t2 = self::getInt() : #t4{core::num};
+  core::num v5 = let final core::num? #t5 = t3 in #t5 == null ?{core::num} t3 = self::getNum() : #t5{core::num};
+  core::num v6 = let final core::num? #t6 = t4 in #t6 == null ?{core::num} t4 = self::getDouble() : #t6{core::num};
+  core::num v7 = t = t.{core::num::+}(self::getInt()){(core::num) → core::num};
+  core::num v8 = t = t.{core::num::+}(self::getNum()){(core::num) → core::num};
+  core::double v9 = t = t.{core::num::+}(self::getDouble()){(core::num) → core::double};
+  core::num v10 = t = t.{core::num::+}(1){(core::num) → core::num};
+  core::num v11 = let final core::num #t7 = t in let final core::num #t8 = t = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+}
+static method test3(core::double t, core::double? t2) → void {
+  core::double v3 = t = self::getDouble();
+  core::double v6 = let final core::double? #t9 = t2 in #t9 == null ?{core::double} t2 = self::getDouble() : #t9{core::double};
+  core::double v7 = t = t.{core::double::+}(self::getInt()){(core::num) → core::double};
+  core::double v8 = t = t.{core::double::+}(self::getNum()){(core::num) → core::double};
+  core::double v9 = t = t.{core::double::+}(self::getDouble()){(core::num) → core::double};
+  core::double v10 = t = t.{core::double::+}(1){(core::num) → core::double};
+  core::double v11 = let final core::double #t10 = t in let final core::double #t11 = t = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.weak.outline.expect
new file mode 100644
index 0000000..332425c
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.weak.outline.expect
@@ -0,0 +1,18 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method getInt() → core::int
+  ;
+static method getNum() → core::num
+  ;
+static method getDouble() → core::double
+  ;
+static method test1(core::int t, core::int? t2) → void
+  ;
+static method test2(core::num t, core::num? t2, core::num? t3, core::num? t4) → void
+  ;
+static method test3(core::double t, core::double? t2) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.weak.transformed.expect
new file mode 100644
index 0000000..62846c1
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards2.dart.weak.transformed.expect
@@ -0,0 +1,40 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method test1(core::int t, core::int? t2) → void {
+  core::int v1 = t = self::getInt();
+  core::int v4 = let final core::int? #t1 = t2 in #t1 == null ?{core::int} t2 = self::getInt() : #t1{core::int};
+  core::int v7 = t = t.{core::num::+}(self::getInt()){(core::num) → core::int};
+  core::int v10 = t = t.{core::num::+}(1){(core::num) → core::int};
+  core::int v11 = let final core::int #t2 = t in let final core::int #t3 = t = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+}
+static method test2(core::num t, core::num? t2, core::num? t3, core::num? t4) → void {
+  core::int v1 = t = self::getInt();
+  core::num v2 = t = self::getNum();
+  core::double v3 = t = self::getDouble();
+  core::num v4 = let final core::num? #t4 = t2 in #t4 == null ?{core::num} t2 = self::getInt() : #t4{core::num};
+  core::num v5 = let final core::num? #t5 = t3 in #t5 == null ?{core::num} t3 = self::getNum() : #t5{core::num};
+  core::num v6 = let final core::num? #t6 = t4 in #t6 == null ?{core::num} t4 = self::getDouble() : #t6{core::num};
+  core::num v7 = t = t.{core::num::+}(self::getInt()){(core::num) → core::num};
+  core::num v8 = t = t.{core::num::+}(self::getNum()){(core::num) → core::num};
+  core::double v9 = t = t.{core::num::+}(self::getDouble()){(core::num) → core::double};
+  core::num v10 = t = t.{core::num::+}(1){(core::num) → core::num};
+  core::num v11 = let final core::num #t7 = t in let final core::num #t8 = t = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+}
+static method test3(core::double t, core::double? t2) → void {
+  core::double v3 = t = self::getDouble();
+  core::double v6 = let final core::double? #t9 = t2 in #t9 == null ?{core::double} t2 = self::getDouble() : #t9{core::double};
+  core::double v7 = t = t.{core::double::+}(self::getInt()){(core::num) → core::double};
+  core::double v8 = t = t.{core::double::+}(self::getNum()){(core::num) → core::double};
+  core::double v9 = t = t.{core::double::+}(self::getDouble()){(core::num) → core::double};
+  core::double v10 = t = t.{core::double::+}(1){(core::num) → core::double};
+  core::double v11 = let final core::double #t10 = t in let final core::double #t11 = t = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart
index d9e5815..23bd343 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart
@@ -1,30 +1,30 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A {
-  int f;
+  int f = 0;
 }
 
 var v_assign = (new A(). /*@target=A.f*/ f = 1);
-var v_plus = (new /*@ type=A* */ A()
+var v_plus = (new /*@type=A*/ A()
     . /*@target=A.f*/ /*@target=A.f*/ f /*@target=num.+*/ += 1);
-var v_minus = (new /*@ type=A* */ A()
+var v_minus = (new /*@type=A*/ A()
     . /*@target=A.f*/ /*@target=A.f*/ f /*@target=num.-*/ -= 1);
-var v_multiply = (new /*@ type=A* */ A()
+var v_multiply = (new /*@type=A*/ A()
     . /*@target=A.f*/ /*@target=A.f*/ f /*@target=num.**/ *= 1);
-var v_prefix_pp = (/*@target=num.+*/ ++new /*@ type=A* */ A()
+var v_prefix_pp = (/*@target=num.+*/ ++new /*@type=A*/ A()
     . /*@target=A.f*/ /*@target=A.f*/ f);
-var v_prefix_mm = (/*@target=num.-*/ --new /*@ type=A* */ A()
+var v_prefix_mm = (/*@target=num.-*/ --new /*@type=A*/ A()
     . /*@target=A.f*/ /*@target=A.f*/ f);
-var v_postfix_pp = (new /*@ type=A* */ A()
-    . /*@ type=int* */ /*@target=A.f*/ /*@target=A.f*/
-    /*@ type=int* */ f /*@target=num.+*/ ++);
-var v_postfix_mm = (new /*@ type=A* */ A()
-    . /*@ type=int* */ /*@target=A.f*/ /*@target=A.f*/
-    /*@ type=int* */ f /*@target=num.-*/ --);
+var v_postfix_pp = (new /*@type=A*/ A()
+    . /*@type=int*/ /*@target=A.f*/ /*@target=A.f*/
+    /*@type=int*/ f /*@target=num.+*/ ++);
+var v_postfix_mm = (new /*@type=A*/ A()
+    . /*@type=int*/ /*@target=A.f*/ /*@target=A.f*/
+    /*@type=int*/ f /*@target=num.-*/ --);
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.textual_outline.expect
index f8430e7..5524381 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class A {
-  int f;
+  int f = 0;
 }
 
 var v_assign = (new A().f = 1);
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.textual_outline_modelled.expect
index 0c17d98..12ab51d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class A {
-  int f;
+  int f = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.expect
index 6ae0089..020c76e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* f = null;
-  synthetic constructor •() → self::A*
+  field core::int f = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_assign = new self::A::•().{self::A::f} = 1;
-static field core::int* v_plus = let final self::A* #t1 = new self::A::•() in #t1.{self::A::f} = #t1.{self::A::f}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-static field core::int* v_minus = let final self::A* #t2 = new self::A::•() in #t2.{self::A::f} = #t2.{self::A::f}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
-static field core::int* v_multiply = let final self::A* #t3 = new self::A::•() in #t3.{self::A::f} = #t3.{self::A::f}{core::int*}.{core::num::*}(1){(core::num*) →* core::int*};
-static field core::int* v_prefix_pp = let final self::A* #t4 = new self::A::•() in #t4.{self::A::f} = #t4.{self::A::f}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-static field core::int* v_prefix_mm = let final self::A* #t5 = new self::A::•() in #t5.{self::A::f} = #t5.{self::A::f}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
-static field core::int* v_postfix_pp = let final self::A* #t6 = new self::A::•() in let final core::int* #t7 = #t6.{self::A::f}{core::int*} in let final core::int* #t8 = #t6.{self::A::f} = #t7.{core::num::+}(1){(core::num*) →* core::int*} in #t7;
-static field core::int* v_postfix_mm = let final self::A* #t9 = new self::A::•() in let final core::int* #t10 = #t9.{self::A::f}{core::int*} in let final core::int* #t11 = #t9.{self::A::f} = #t10.{core::num::-}(1){(core::num*) →* core::int*} in #t10;
+static field core::int v_assign = new self::A::•().{self::A::f} = 1;
+static field core::int v_plus = let final self::A #t1 = new self::A::•() in #t1.{self::A::f} = #t1.{self::A::f}{core::int}.{core::num::+}(1){(core::num) → core::int};
+static field core::int v_minus = let final self::A #t2 = new self::A::•() in #t2.{self::A::f} = #t2.{self::A::f}{core::int}.{core::num::-}(1){(core::num) → core::int};
+static field core::int v_multiply = let final self::A #t3 = new self::A::•() in #t3.{self::A::f} = #t3.{self::A::f}{core::int}.{core::num::*}(1){(core::num) → core::int};
+static field core::int v_prefix_pp = let final self::A #t4 = new self::A::•() in #t4.{self::A::f} = #t4.{self::A::f}{core::int}.{core::num::+}(1){(core::num) → core::int};
+static field core::int v_prefix_mm = let final self::A #t5 = new self::A::•() in #t5.{self::A::f} = #t5.{self::A::f}{core::int}.{core::num::-}(1){(core::num) → core::int};
+static field core::int v_postfix_pp = let final self::A #t6 = new self::A::•() in let final core::int #t7 = #t6.{self::A::f}{core::int} in let final core::int #t8 = #t6.{self::A::f} = #t7.{core::num::+}(1){(core::num) → core::int} in #t7;
+static field core::int v_postfix_mm = let final self::A #t9 = new self::A::•() in let final core::int #t10 = #t9.{self::A::f}{core::int} in let final core::int #t11 = #t9.{self::A::f} = #t10.{core::num::-}(1){(core::num) → core::int} in #t10;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.modular.expect
index 6ae0089..020c76e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.modular.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* f = null;
-  synthetic constructor •() → self::A*
+  field core::int f = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_assign = new self::A::•().{self::A::f} = 1;
-static field core::int* v_plus = let final self::A* #t1 = new self::A::•() in #t1.{self::A::f} = #t1.{self::A::f}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-static field core::int* v_minus = let final self::A* #t2 = new self::A::•() in #t2.{self::A::f} = #t2.{self::A::f}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
-static field core::int* v_multiply = let final self::A* #t3 = new self::A::•() in #t3.{self::A::f} = #t3.{self::A::f}{core::int*}.{core::num::*}(1){(core::num*) →* core::int*};
-static field core::int* v_prefix_pp = let final self::A* #t4 = new self::A::•() in #t4.{self::A::f} = #t4.{self::A::f}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-static field core::int* v_prefix_mm = let final self::A* #t5 = new self::A::•() in #t5.{self::A::f} = #t5.{self::A::f}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
-static field core::int* v_postfix_pp = let final self::A* #t6 = new self::A::•() in let final core::int* #t7 = #t6.{self::A::f}{core::int*} in let final core::int* #t8 = #t6.{self::A::f} = #t7.{core::num::+}(1){(core::num*) →* core::int*} in #t7;
-static field core::int* v_postfix_mm = let final self::A* #t9 = new self::A::•() in let final core::int* #t10 = #t9.{self::A::f}{core::int*} in let final core::int* #t11 = #t9.{self::A::f} = #t10.{core::num::-}(1){(core::num*) →* core::int*} in #t10;
+static field core::int v_assign = new self::A::•().{self::A::f} = 1;
+static field core::int v_plus = let final self::A #t1 = new self::A::•() in #t1.{self::A::f} = #t1.{self::A::f}{core::int}.{core::num::+}(1){(core::num) → core::int};
+static field core::int v_minus = let final self::A #t2 = new self::A::•() in #t2.{self::A::f} = #t2.{self::A::f}{core::int}.{core::num::-}(1){(core::num) → core::int};
+static field core::int v_multiply = let final self::A #t3 = new self::A::•() in #t3.{self::A::f} = #t3.{self::A::f}{core::int}.{core::num::*}(1){(core::num) → core::int};
+static field core::int v_prefix_pp = let final self::A #t4 = new self::A::•() in #t4.{self::A::f} = #t4.{self::A::f}{core::int}.{core::num::+}(1){(core::num) → core::int};
+static field core::int v_prefix_mm = let final self::A #t5 = new self::A::•() in #t5.{self::A::f} = #t5.{self::A::f}{core::int}.{core::num::-}(1){(core::num) → core::int};
+static field core::int v_postfix_pp = let final self::A #t6 = new self::A::•() in let final core::int #t7 = #t6.{self::A::f}{core::int} in let final core::int #t8 = #t6.{self::A::f} = #t7.{core::num::+}(1){(core::num) → core::int} in #t7;
+static field core::int v_postfix_mm = let final self::A #t9 = new self::A::•() in let final core::int #t10 = #t9.{self::A::f}{core::int} in let final core::int #t11 = #t9.{self::A::f} = #t10.{core::num::-}(1){(core::num) → core::int} in #t10;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.outline.expect
index 16d2edb..e9ccb16 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.outline.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* f;
-  synthetic constructor •() → self::A*
+  field core::int f;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_assign;
-static field core::int* v_plus;
-static field core::int* v_minus;
-static field core::int* v_multiply;
-static field core::int* v_prefix_pp;
-static field core::int* v_prefix_mm;
-static field core::int* v_postfix_pp;
-static field core::int* v_postfix_mm;
+static field core::int v_assign;
+static field core::int v_plus;
+static field core::int v_minus;
+static field core::int v_multiply;
+static field core::int v_prefix_pp;
+static field core::int v_prefix_mm;
+static field core::int v_postfix_pp;
+static field core::int v_postfix_mm;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.transformed.expect
index 6ae0089..020c76e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.transformed.expect
@@ -1,29 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* f = null;
-  synthetic constructor •() → self::A*
+  field core::int f = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_assign = new self::A::•().{self::A::f} = 1;
-static field core::int* v_plus = let final self::A* #t1 = new self::A::•() in #t1.{self::A::f} = #t1.{self::A::f}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-static field core::int* v_minus = let final self::A* #t2 = new self::A::•() in #t2.{self::A::f} = #t2.{self::A::f}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
-static field core::int* v_multiply = let final self::A* #t3 = new self::A::•() in #t3.{self::A::f} = #t3.{self::A::f}{core::int*}.{core::num::*}(1){(core::num*) →* core::int*};
-static field core::int* v_prefix_pp = let final self::A* #t4 = new self::A::•() in #t4.{self::A::f} = #t4.{self::A::f}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-static field core::int* v_prefix_mm = let final self::A* #t5 = new self::A::•() in #t5.{self::A::f} = #t5.{self::A::f}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
-static field core::int* v_postfix_pp = let final self::A* #t6 = new self::A::•() in let final core::int* #t7 = #t6.{self::A::f}{core::int*} in let final core::int* #t8 = #t6.{self::A::f} = #t7.{core::num::+}(1){(core::num*) →* core::int*} in #t7;
-static field core::int* v_postfix_mm = let final self::A* #t9 = new self::A::•() in let final core::int* #t10 = #t9.{self::A::f}{core::int*} in let final core::int* #t11 = #t9.{self::A::f} = #t10.{core::num::-}(1){(core::num*) →* core::int*} in #t10;
+static field core::int v_assign = new self::A::•().{self::A::f} = 1;
+static field core::int v_plus = let final self::A #t1 = new self::A::•() in #t1.{self::A::f} = #t1.{self::A::f}{core::int}.{core::num::+}(1){(core::num) → core::int};
+static field core::int v_minus = let final self::A #t2 = new self::A::•() in #t2.{self::A::f} = #t2.{self::A::f}{core::int}.{core::num::-}(1){(core::num) → core::int};
+static field core::int v_multiply = let final self::A #t3 = new self::A::•() in #t3.{self::A::f} = #t3.{self::A::f}{core::int}.{core::num::*}(1){(core::num) → core::int};
+static field core::int v_prefix_pp = let final self::A #t4 = new self::A::•() in #t4.{self::A::f} = #t4.{self::A::f}{core::int}.{core::num::+}(1){(core::num) → core::int};
+static field core::int v_prefix_mm = let final self::A #t5 = new self::A::•() in #t5.{self::A::f} = #t5.{self::A::f}{core::int}.{core::num::-}(1){(core::num) → core::int};
+static field core::int v_postfix_pp = let final self::A #t6 = new self::A::•() in let final core::int #t7 = #t6.{self::A::f}{core::int} in let final core::int #t8 = #t6.{self::A::f} = #t7.{core::num::+}(1){(core::num) → core::int} in #t7;
+static field core::int v_postfix_mm = let final self::A #t9 = new self::A::•() in let final core::int #t10 = #t9.{self::A::f}{core::int} in let final core::int #t11 = #t9.{self::A::f} = #t10.{core::num::-}(1){(core::num) → core::int} in #t10;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart
index b4dd357..2b1f0c6 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -11,18 +11,18 @@
 }
 
 class B {
-  A a;
+  A a = throw '';
 }
 
-var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
-    . /*@target=B.a*/ /*@target=B.a*/ a);
-var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
-    . /*@target=B.a*/ /*@target=B.a*/ a);
-var v_postfix_pp = (new /*@ type=B* */ B()
-    . /*@ type=A* */ /*@target=B.a*/ /*@target=B.a*/
-    /*@ type=int* */ a /*@target=A.+*/ ++);
-var v_postfix_mm = (new /*@ type=B* */ B()
-    . /*@ type=A* */ /*@target=B.a*/ /*@target=B.a*/
-    /*@ type=double* */ a /*@target=A.-*/ --);
+var v_prefix_pp =
+    (/*@target=A.+*/ ++new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+var v_prefix_mm =
+    (/*@target=A.-*/ --new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+var v_postfix_pp = (new /*@type=B*/ B()
+    . /*@type=A*/ /*@target=B.a*/ /*@target=B.a*/
+    /*@type=int*/ a /*@target=A.+*/ ++);
+var v_postfix_mm = (new /*@type=B*/ B()
+    . /*@type=A*/ /*@target=B.a*/ /*@target=B.a*/
+    /*@type=double*/ a /*@target=A.-*/ --);
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.textual_outline.expect
index a7fbd9f..f84b618 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
@@ -7,7 +6,7 @@
 }
 
 class B {
-  A a;
+  A a = throw '';
 }
 
 var v_prefix_pp = (++new B().a);
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.textual_outline_modelled.expect
index d08a97e..7a08c89 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
@@ -7,7 +6,7 @@
 }
 
 class B {
-  A a;
+  A a = throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.expect
index 1bf4996..4a89d3d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.expect
@@ -1,79 +1,59 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:22: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-// var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
-//                                    ^
+//     (/*@target=A.+*/ ++new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+//                      ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:22: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-// var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
-//                                    ^
+//     (/*@target=A.-*/ --new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+//                      ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:37: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-//     /*@ type=int* */ a /*@target=A.+*/ ++);
+//     /*@type=int*/ a /*@target=A.+*/ ++);
+//                                     ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:40: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+//     /*@type=double*/ a /*@target=A.-*/ --);
 //                                        ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-//     /*@ type=double* */ a /*@target=A.-*/ --);
-//                                           ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(dynamic other) → core::int*
+  operator +(dynamic other) → core::int
     return 1;
-  operator -(dynamic other) → core::double*
+  operator -(dynamic other) → core::double
     return 2.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field self::A* a = null;
-  synthetic constructor •() → self::B*
+  field self::A a = throw "";
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_prefix_pp = let final self::B* #t1 = new self::B::•() in #t1.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:22: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
-                                   ^" in #t1.{self::B::a}{self::A*}.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A*;
-static field core::double* v_prefix_mm = let final self::B* #t2 = new self::B::•() in #t2.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+    (/*@target=A.+*/ ++new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+                     ^" in #t1.{self::B::a}{self::A}.{self::A::+}(1){(dynamic) → core::int} as{TypeError,ForNonNullableByDefault} self::A;
+static field core::double v_prefix_mm = let final self::B #t2 = new self::B::•() in #t2.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:22: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
-                                   ^" in #t2.{self::B::a}{self::A*}.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A*;
-static field self::A* v_postfix_pp = let final self::B* #t3 = new self::B::•() in let final self::A* #t4 = #t3.{self::B::a}{self::A*} in let final core::int* #t5 = #t3.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+    (/*@target=A.-*/ --new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+                     ^" in #t2.{self::B::a}{self::A}.{self::A::-}(1){(dynamic) → core::double} as{TypeError,ForNonNullableByDefault} self::A;
+static field self::A v_postfix_pp = let final self::B #t3 = new self::B::•() in let final self::A #t4 = #t3.{self::B::a}{self::A} in let final core::int #t5 = #t3.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:37: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-    /*@ type=int* */ a /*@target=A.+*/ ++);
-                                       ^" in #t4.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A* in #t4;
-static field self::A* v_postfix_mm = let final self::B* #t6 = new self::B::•() in let final self::A* #t7 = #t6.{self::B::a}{self::A*} in let final core::double* #t8 = #t6.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+    /*@type=int*/ a /*@target=A.+*/ ++);
+                                    ^" in #t4.{self::A::+}(1){(dynamic) → core::int} as{TypeError,ForNonNullableByDefault} self::A in #t4;
+static field self::A v_postfix_mm = let final self::B #t6 = new self::B::•() in let final self::A #t7 = #t6.{self::B::a}{self::A} in let final core::double #t8 = #t6.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:40: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-    /*@ type=double* */ a /*@target=A.-*/ --);
-                                          ^" in #t7.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A* in #t7;
+    /*@type=double*/ a /*@target=A.-*/ --);
+                                       ^" in #t7.{self::A::-}(1){(dynamic) → core::double} as{TypeError,ForNonNullableByDefault} self::A in #t7;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.modular.expect
index 1bf4996..4a89d3d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.modular.expect
@@ -1,79 +1,59 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:22: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-// var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
-//                                    ^
+//     (/*@target=A.+*/ ++new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+//                      ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:22: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-// var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
-//                                    ^
+//     (/*@target=A.-*/ --new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+//                      ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:37: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-//     /*@ type=int* */ a /*@target=A.+*/ ++);
+//     /*@type=int*/ a /*@target=A.+*/ ++);
+//                                     ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:40: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+//     /*@type=double*/ a /*@target=A.-*/ --);
 //                                        ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-//     /*@ type=double* */ a /*@target=A.-*/ --);
-//                                           ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(dynamic other) → core::int*
+  operator +(dynamic other) → core::int
     return 1;
-  operator -(dynamic other) → core::double*
+  operator -(dynamic other) → core::double
     return 2.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field self::A* a = null;
-  synthetic constructor •() → self::B*
+  field self::A a = throw "";
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_prefix_pp = let final self::B* #t1 = new self::B::•() in #t1.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:22: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
-                                   ^" in #t1.{self::B::a}{self::A*}.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A*;
-static field core::double* v_prefix_mm = let final self::B* #t2 = new self::B::•() in #t2.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+    (/*@target=A.+*/ ++new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+                     ^" in #t1.{self::B::a}{self::A}.{self::A::+}(1){(dynamic) → core::int} as{TypeError,ForNonNullableByDefault} self::A;
+static field core::double v_prefix_mm = let final self::B #t2 = new self::B::•() in #t2.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:22: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
-                                   ^" in #t2.{self::B::a}{self::A*}.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A*;
-static field self::A* v_postfix_pp = let final self::B* #t3 = new self::B::•() in let final self::A* #t4 = #t3.{self::B::a}{self::A*} in let final core::int* #t5 = #t3.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+    (/*@target=A.-*/ --new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+                     ^" in #t2.{self::B::a}{self::A}.{self::A::-}(1){(dynamic) → core::double} as{TypeError,ForNonNullableByDefault} self::A;
+static field self::A v_postfix_pp = let final self::B #t3 = new self::B::•() in let final self::A #t4 = #t3.{self::B::a}{self::A} in let final core::int #t5 = #t3.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:37: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-    /*@ type=int* */ a /*@target=A.+*/ ++);
-                                       ^" in #t4.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A* in #t4;
-static field self::A* v_postfix_mm = let final self::B* #t6 = new self::B::•() in let final self::A* #t7 = #t6.{self::B::a}{self::A*} in let final core::double* #t8 = #t6.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+    /*@type=int*/ a /*@target=A.+*/ ++);
+                                    ^" in #t4.{self::A::+}(1){(dynamic) → core::int} as{TypeError,ForNonNullableByDefault} self::A in #t4;
+static field self::A v_postfix_mm = let final self::B #t6 = new self::B::•() in let final self::A #t7 = #t6.{self::B::a}{self::A} in let final core::double #t8 = #t6.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:40: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-    /*@ type=double* */ a /*@target=A.-*/ --);
-                                          ^" in #t7.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A* in #t7;
+    /*@type=double*/ a /*@target=A.-*/ --);
+                                       ^" in #t7.{self::A::-}(1){(dynamic) → core::double} as{TypeError,ForNonNullableByDefault} self::A in #t7;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.outline.expect
index 647803a..d8ef5fc 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.outline.expect
@@ -1,43 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  operator +(dynamic other) → core::int*
+  operator +(dynamic other) → core::int
     ;
-  operator -(dynamic other) → core::double*
+  operator -(dynamic other) → core::double
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field self::A* a;
-  synthetic constructor •() → self::B*
+  field self::A a;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_prefix_pp;
-static field core::double* v_prefix_mm;
-static field self::A* v_postfix_pp;
-static field self::A* v_postfix_mm;
+static field core::int v_prefix_pp;
+static field core::double v_prefix_mm;
+static field self::A v_postfix_pp;
+static field self::A v_postfix_mm;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.transformed.expect
index 1bf4996..4a89d3d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.transformed.expect
@@ -1,79 +1,59 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:22: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-// var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
-//                                    ^
+//     (/*@target=A.+*/ ++new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+//                      ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:22: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-// var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
-//                                    ^
+//     (/*@target=A.-*/ --new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+//                      ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:37: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-//     /*@ type=int* */ a /*@target=A.+*/ ++);
+//     /*@type=int*/ a /*@target=A.+*/ ++);
+//                                     ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:40: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+//     /*@type=double*/ a /*@target=A.-*/ --);
 //                                        ^
 //
-// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
-//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-//     /*@ type=double* */ a /*@target=A.-*/ --);
-//                                           ^
-//
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(dynamic other) → core::int*
+  operator +(dynamic other) → core::int
     return 1;
-  operator -(dynamic other) → core::double*
+  operator -(dynamic other) → core::double
     return 2.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field self::A* a = null;
-  synthetic constructor •() → self::B*
+  field self::A a = throw "";
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_prefix_pp = let final self::B* #t1 = new self::B::•() in #t1.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:22: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
-                                   ^" in #t1.{self::B::a}{self::A*}.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A*;
-static field core::double* v_prefix_mm = let final self::B* #t2 = new self::B::•() in #t2.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+    (/*@target=A.+*/ ++new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+                     ^" in #t1.{self::B::a}{self::A}.{self::A::+}(1){(dynamic) → core::int} as{TypeError,ForNonNullableByDefault} self::A;
+static field core::double v_prefix_mm = let final self::B #t2 = new self::B::•() in #t2.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:22: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
-                                   ^" in #t2.{self::B::a}{self::A*}.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A*;
-static field self::A* v_postfix_pp = let final self::B* #t3 = new self::B::•() in let final self::A* #t4 = #t3.{self::B::a}{self::A*} in let final core::int* #t5 = #t3.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+    (/*@target=A.-*/ --new /*@type=B*/ B(). /*@target=B.a*/ /*@target=B.a*/ a);
+                     ^" in #t2.{self::B::a}{self::A}.{self::A::-}(1){(dynamic) → core::double} as{TypeError,ForNonNullableByDefault} self::A;
+static field self::A v_postfix_pp = let final self::B #t3 = new self::B::•() in let final self::A #t4 = #t3.{self::B::a}{self::A} in let final core::int #t5 = #t3.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:37: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-    /*@ type=int* */ a /*@target=A.+*/ ++);
-                                       ^" in #t4.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A* in #t4;
-static field self::A* v_postfix_mm = let final self::B* #t6 = new self::B::•() in let final self::A* #t7 = #t6.{self::B::a}{self::A*} in let final core::double* #t8 = #t6.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+    /*@type=int*/ a /*@target=A.+*/ ++);
+                                    ^" in #t4.{self::A::+}(1){(dynamic) → core::int} as{TypeError,ForNonNullableByDefault} self::A in #t4;
+static field self::A v_postfix_mm = let final self::B #t6 = new self::B::•() in let final self::A #t7 = #t6.{self::B::a}{self::A} in let final core::double #t8 = #t6.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:40: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
-    /*@ type=double* */ a /*@target=A.-*/ --);
-                                          ^" in #t7.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A* in #t7;
+    /*@type=double*/ a /*@target=A.-*/ --);
+                                       ^" in #t7.{self::A::-}(1){(dynamic) → core::double} as{TypeError,ForNonNullableByDefault} self::A in #t7;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart
index 24d478e..5b20440 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -22,42 +24,42 @@
   B member;
 
   static void test(Test t) {
-    t. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
-    /*@ type=Test* */ /*@target=Test.member*/ t. /*@target=Test.member*/ member
-         ??= /*@ typeArgs=B* */ f();
-    /*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
-    /*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
-    /*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
-    /*@target=B.-*/ -- /*@ type=Test* */ t
+    t. /*@target=Test.member*/ member = /*@typeArgs=B**/ f();
+    /*@type=Test**/ /*@target=Test.member*/ t. /*@target=Test.member*/ member
+         ??= /*@typeArgs=B**/ f();
+    /*@type=Test**/ t. /*@target=Test.member*/ /*@target=Test.member*/ member
+        /*@target=B.+*/ += /*@typeArgs=C**/ f();
+    /*@type=Test**/ t. /*@target=Test.member*/ /*@target=Test.member*/ member
+        /*@target=B.**/ *= /*@typeArgs=B**/ f();
+    /*@type=Test**/ t. /*@target=Test.member*/ /*@target=Test.member*/ member
+        /*@target=B.&*/ &= /*@typeArgs=A**/ f();
+    /*@target=B.-*/ -- /*@type=Test**/ t
         . /*@target=Test.member*/ /*@target=Test.member*/ member;
-    /*@ type=Test* */ t. /*@target=Test.member*/ /*@target=Test.member*/ member
+    /*@type=Test**/ t. /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.-*/ --;
-    var /*@ type=B* */ v1 =
-        t. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
-    var /*@ type=B* */ v2 =
-        /*@ type=Test* */ /*@target=Test.member*/ t
+    var /*@type=B**/ v1 =
+        t. /*@target=Test.member*/ member = /*@typeArgs=B**/ f();
+    var /*@type=B**/ v2 =
+        /*@type=Test**/ /*@target=Test.member*/ t
                 . /*@target=Test.member*/ member
-             ??= /*@ typeArgs=B* */ f();
-    var /*@ type=A* */ v3 =
-        /*@ type=Test* */ t
+             ??= /*@typeArgs=B**/ f();
+    var /*@type=A**/ v3 =
+        /*@type=Test**/ t
                 . /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.+*/ += /*@ typeArgs=C* */ f();
-    var /*@ type=B* */ v4 =
-        /*@ type=Test* */ t
+            /*@target=B.+*/ += /*@typeArgs=C**/ f();
+    var /*@type=B**/ v4 =
+        /*@type=Test**/ t
                 . /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.**/ *= /*@ typeArgs=B* */ f();
-    var /*@ type=C* */ v5 =
-        /*@ type=Test* */ t
+            /*@target=B.**/ *= /*@typeArgs=B**/ f();
+    var /*@type=C**/ v5 =
+        /*@type=Test**/ t
                 . /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
-    var /*@ type=B* */ v6 = /*@target=B.-*/ -- /*@ type=Test* */ t
+            /*@target=B.&*/ &= /*@typeArgs=A**/ f();
+    var /*@type=B**/ v6 = /*@target=B.-*/ -- /*@type=Test**/ t
         . /*@target=Test.member*/ /*@target=Test.member*/ member;
-    var /*@ type=B* */ v7 = /*@ type=Test* */ t
-        . /*@ type=B* */ /*@target=Test.member*/ /*@target=Test.member*/
-        /*@ type=B* */ member /*@target=B.-*/ --;
+    var /*@type=B**/ v7 = /*@type=Test**/ t
+        . /*@type=B**/ /*@target=Test.member*/ /*@target=Test.member*/
+        /*@type=B**/ member /*@target=B.-*/ --;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart
new file mode 100644
index 0000000..7a2c3cf
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart
@@ -0,0 +1,57 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Test {
+  B member = throw '';
+  B? member2;
+
+  static void test(Test t) {
+    t. /*@target=Test.member*/ member = /*@typeArgs=B*/ f();
+    /*@type=Test*/ /*@target=Test.member2*/ t
+        . /*@target=Test.member2*/ member2 ??= /*@typeArgs=B?*/ f();
+    /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.+*/ += /*@typeArgs=C*/ f();
+    /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.**/ *= /*@typeArgs=B*/ f();
+    /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+    /*@target=B.-*/ -- /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member;
+    /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.-*/ --;
+    var /*@type=B*/ v1 =
+        t. /*@target=Test.member*/ member = /*@typeArgs=B*/ f();
+    var /*@type=B?*/ v2 = /*@type=Test*/ /*@target=Test.member2*/ t
+        . /*@target=Test.member2*/ member2 ??= /*@typeArgs=B?*/ f();
+    var /*@type=B*/ v3 = /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.+*/ += /*@typeArgs=C*/ f();
+    var /*@type=B*/ v4 = /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.**/ *= /*@typeArgs=B*/ f();
+    var /*@type=C*/ v5 = /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+    var /*@type=B*/ v6 = /*@target=B.-*/ -- /*@type=Test*/ t
+        . /*@target=Test.member*/ /*@target=Test.member*/ member;
+    var /*@type=B*/ v7 = /*@type=Test*/ t
+        . /*@type=B*/ /*@target=Test.member*/ /*@target=Test.member*/
+        /*@type=B*/ member /*@target=B.-*/ --;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.textual_outline.expect
new file mode 100644
index 0000000..7736aed
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.textual_outline.expect
@@ -0,0 +1,22 @@
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Test {
+  B member = throw '';
+  B? member2;
+  static void test(Test t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6f16193
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.textual_outline_modelled.expect
@@ -0,0 +1,22 @@
+library test;
+
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+class Test {
+  B? member2;
+  B member = throw '';
+  static void test(Test t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.weak.expect
new file mode 100644
index 0000000..3f9076d
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.weak.expect
@@ -0,0 +1,53 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B member = throw "";
+  field self::B? member2 = null;
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  static method test(self::Test t) → void {
+    t.{self::Test::member} = self::f<self::B>();
+    let final self::Test #t1 = t in #t1.{self::Test::member2}{self::B?} == null ?{self::B?} #t1.{self::Test::member2} = self::f<self::B?>() : null;
+    let final self::Test #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    let final self::Test #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    let final self::Test #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    let final self::Test #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    let final self::Test #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = t.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::Test #t7 = t in let final self::B? #t8 = #t7.{self::Test::member2}{self::B?} in #t8 == null ?{self::B?} #t7.{self::Test::member2} = self::f<self::B?>() : #t8{self::B};
+    self::B v3 = let final self::Test #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = let final self::Test #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = let final self::Test #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = let final self::Test #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::Test #t13 = t in let final self::B #t14 = #t13.{self::Test::member}{self::B} in let final self::B #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1){(core::int) → self::B} in #t14;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.weak.modular.expect
new file mode 100644
index 0000000..3f9076d
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B member = throw "";
+  field self::B? member2 = null;
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  static method test(self::Test t) → void {
+    t.{self::Test::member} = self::f<self::B>();
+    let final self::Test #t1 = t in #t1.{self::Test::member2}{self::B?} == null ?{self::B?} #t1.{self::Test::member2} = self::f<self::B?>() : null;
+    let final self::Test #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    let final self::Test #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    let final self::Test #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    let final self::Test #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    let final self::Test #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = t.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::Test #t7 = t in let final self::B? #t8 = #t7.{self::Test::member2}{self::B?} in #t8 == null ?{self::B?} #t7.{self::Test::member2} = self::f<self::B?>() : #t8{self::B};
+    self::B v3 = let final self::Test #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = let final self::Test #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = let final self::Test #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = let final self::Test #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::Test #t13 = t in let final self::B #t14 = #t13.{self::Test::member}{self::B} in let final self::B #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1){(core::int) → self::B} in #t14;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.weak.outline.expect
new file mode 100644
index 0000000..12955e9
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+class Test extends core::Object {
+  field self::B member;
+  field self::B? member2;
+  synthetic constructor •() → self::Test
+    ;
+  static method test(self::Test t) → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.weak.transformed.expect
new file mode 100644
index 0000000..3f9076d
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full2.dart.weak.transformed.expect
@@ -0,0 +1,53 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B member = throw "";
+  field self::B? member2 = null;
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  static method test(self::Test t) → void {
+    t.{self::Test::member} = self::f<self::B>();
+    let final self::Test #t1 = t in #t1.{self::Test::member2}{self::B?} == null ?{self::B?} #t1.{self::Test::member2} = self::f<self::B?>() : null;
+    let final self::Test #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    let final self::Test #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    let final self::Test #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    let final self::Test #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    let final self::Test #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = t.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::Test #t7 = t in let final self::B? #t8 = #t7.{self::Test::member2}{self::B?} in #t8 == null ?{self::B?} #t7.{self::Test::member2} = self::f<self::B?>() : #t8{self::B};
+    self::B v3 = let final self::Test #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = let final self::Test #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = let final self::Test #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = let final self::Test #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::Test #t13 = t in let final self::B #t14 = #t13.{self::Test::member}{self::B} in let final self::B #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1){(core::int) → self::B} in #t14;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart
index 0905ef9..c316708 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -22,24 +24,24 @@
   B member;
 
   static void test(Test t) {
-    /*@ type=Test* */  t
-        ?. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
+    /*@type=Test**/  t
+        ?. /*@target=Test.member*/ member = /*@typeArgs=B**/ f();
 
      t?.
             /*@target=Test.member*/ /*@target=Test.member*/ member
-         ??= /*@ typeArgs=B* */ f();
+         ??= /*@typeArgs=B**/ f();
 
      t?.
             /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+        /*@target=B.+*/ += /*@typeArgs=C**/ f();
 
      t?.
             /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+        /*@target=B.**/ *= /*@typeArgs=B**/ f();
 
      t?.
             /*@target=Test.member*/ /*@target=Test.member*/ member
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+        /*@target=B.&*/ &= /*@typeArgs=A**/ f();
 
     /*@target=B.-*/ --  t?.
         /*@target=Test.member*/ /*@target=Test.member*/ member;
@@ -48,34 +50,34 @@
             /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.-*/ --;
 
-    var /*@ type=B* */ v1 =
-        /*@ type=Test* */  t
-            ?. /*@target=Test.member*/ member = /*@ typeArgs=B* */ f();
+    var /*@type=B**/ v1 =
+        /*@type=Test**/  t
+            ?. /*@target=Test.member*/ member = /*@typeArgs=B**/ f();
 
-    var /*@ type=B* */ v2 =
+    var /*@type=B**/ v2 =
          t
                 ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-             ??= /*@ typeArgs=B* */ f();
+             ??= /*@typeArgs=B**/ f();
 
-    var /*@ type=A* */ v3 =
+    var /*@type=A**/ v3 =
          t
                 ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+            /*@target=B.+*/ += /*@typeArgs=C**/ f();
 
-    var /*@ type=B* */ v4 =
+    var /*@type=B**/ v4 =
          t
                 ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+            /*@target=B.**/ *= /*@typeArgs=B**/ f();
 
-    var /*@ type=C* */ v5 =
+    var /*@type=C**/ v5 =
          t
                 ?. /*@target=Test.member*/ /*@target=Test.member*/ member
-            /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+            /*@target=B.&*/ &= /*@typeArgs=A**/ f();
 
-    var /*@ type=B* */ v6 = /*@target=B.-*/ --  t
+    var /*@type=B**/ v6 = /*@target=B.-*/ --  t
         ?. /*@target=Test.member*/ /*@target=Test.member*/ member;
 
-    var /*@ type=B* */ v7 =  t
+    var /*@type=B**/ v7 =  t
             ?. /*@target=Test.member*/ /*@target=Test.member*/ member
         /*@target=B.-*/ --;
   }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart
new file mode 100644
index 0000000..c70a66f
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart
@@ -0,0 +1,65 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Test {
+  B member = throw '';
+  B? member2;
+
+  static void test(Test? t) {
+    /*@type=Test?*/ /*@promotedType=Test*/ t
+        ?. /*@target=Test.member*/ member = /*@typeArgs=B*/ f();
+
+    t?. /*@target=Test.member2*/ /*@target=Test.member2*/ member2 ??= /*@typeArgs=B?*/ f();
+
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    /*@target=B.-*/ --t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member;
+
+    t?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.-*/ --;
+
+    var /*@type=B?*/ v1 = /*@type=Test?*/ /*@promotedType=Test*/ t
+        ?. /*@target=Test.member*/ member = /*@typeArgs=B*/ f();
+
+    var /*@type=B?*/ v2 = t
+        ?. /*@target=Test.member2*/ /*@target=Test.member2*/ member2 ??= /*@typeArgs=B?*/ f();
+
+    var /*@type=B?*/ v3 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    var /*@type=B?*/ v4 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    var /*@type=C?*/ v5 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    var /*@type=B?*/ v6 = /*@target=B.-*/ --t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member;
+
+    var /*@type=B?*/ v7 = t
+        ?. /*@target=Test.member*/ /*@target=Test.member*/ member /*@target=B.-*/ --;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.textual_outline.expect
new file mode 100644
index 0000000..86f86c4
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.textual_outline.expect
@@ -0,0 +1,22 @@
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Test {
+  B member = throw '';
+  B? member2;
+  static void test(Test? t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..45af6d7
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.textual_outline_modelled.expect
@@ -0,0 +1,22 @@
+library test;
+
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+class Test {
+  B? member2;
+  B member = throw '';
+  static void test(Test? t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.weak.expect
new file mode 100644
index 0000000..aa67c0b
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.weak.expect
@@ -0,0 +1,53 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B member = throw "";
+  field self::B? member2 = null;
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  static method test(self::Test? t) → void {
+    let final self::Test? #t1 = t in #t1 == null ?{self::B?} null : #t1{self::Test}.{self::Test::member} = self::f<self::B>();
+    let final self::Test? #t2 = t in #t2 == null ?{self::B?} null : #t2.{self::Test::member2}{self::B?} == null ?{self::B?} #t2.{self::Test::member2} = self::f<self::B?>() : null;
+    let final self::Test? #t3 = t in #t3 == null ?{self::B?} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    let final self::Test? #t4 = t in #t4 == null ?{self::B?} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    let final self::Test? #t5 = t in #t5 == null ?{self::C?} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    let final self::Test? #t6 = t in #t6 == null ?{self::B?} null : let final self::B #t7 = #t6.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
+    let final self::Test? #t9 = t in #t9 == null ?{self::B?} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B? v1 = let final self::Test? #t10 = t in #t10 == null ?{self::B?} null : #t10{self::Test}.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::Test? #t11 = t in #t11 == null ?{self::B?} null : let final self::B? #t12 = #t11.{self::Test::member2}{self::B?} in #t12 == null ?{self::B?} #t11.{self::Test::member2} = self::f<self::B?>() : #t12{self::B};
+    self::B? v3 = let final self::Test? #t13 = t in #t13 == null ?{self::B?} null : let final self::B #t14 = #t13.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B? v4 = let final self::Test? #t16 = t in #t16 == null ?{self::B?} null : let final self::B #t17 = #t16.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
+    self::C? v5 = let final self::Test? #t19 = t in #t19 == null ?{self::C?} null : let final self::C #t20 = #t19.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
+    self::B? v6 = let final self::Test? #t22 = t in #t22 == null ?{self::B?} null : let final self::B #t23 = #t22.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
+    self::B? v7 = let final self::Test? #t25 = t in #t25 == null ?{self::B?} null : let final self::B #t26 = #t25.{self::Test::member}{self::B} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1){(core::int) → self::B} in #t26;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.weak.modular.expect
new file mode 100644
index 0000000..aa67c0b
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B member = throw "";
+  field self::B? member2 = null;
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  static method test(self::Test? t) → void {
+    let final self::Test? #t1 = t in #t1 == null ?{self::B?} null : #t1{self::Test}.{self::Test::member} = self::f<self::B>();
+    let final self::Test? #t2 = t in #t2 == null ?{self::B?} null : #t2.{self::Test::member2}{self::B?} == null ?{self::B?} #t2.{self::Test::member2} = self::f<self::B?>() : null;
+    let final self::Test? #t3 = t in #t3 == null ?{self::B?} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    let final self::Test? #t4 = t in #t4 == null ?{self::B?} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    let final self::Test? #t5 = t in #t5 == null ?{self::C?} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    let final self::Test? #t6 = t in #t6 == null ?{self::B?} null : let final self::B #t7 = #t6.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
+    let final self::Test? #t9 = t in #t9 == null ?{self::B?} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B? v1 = let final self::Test? #t10 = t in #t10 == null ?{self::B?} null : #t10{self::Test}.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::Test? #t11 = t in #t11 == null ?{self::B?} null : let final self::B? #t12 = #t11.{self::Test::member2}{self::B?} in #t12 == null ?{self::B?} #t11.{self::Test::member2} = self::f<self::B?>() : #t12{self::B};
+    self::B? v3 = let final self::Test? #t13 = t in #t13 == null ?{self::B?} null : let final self::B #t14 = #t13.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B? v4 = let final self::Test? #t16 = t in #t16 == null ?{self::B?} null : let final self::B #t17 = #t16.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
+    self::C? v5 = let final self::Test? #t19 = t in #t19 == null ?{self::C?} null : let final self::C #t20 = #t19.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
+    self::B? v6 = let final self::Test? #t22 = t in #t22 == null ?{self::B?} null : let final self::B #t23 = #t22.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
+    self::B? v7 = let final self::Test? #t25 = t in #t25 == null ?{self::B?} null : let final self::B #t26 = #t25.{self::Test::member}{self::B} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1){(core::int) → self::B} in #t26;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.weak.outline.expect
new file mode 100644
index 0000000..5125b3b
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+class Test extends core::Object {
+  field self::B member;
+  field self::B? member2;
+  synthetic constructor •() → self::Test
+    ;
+  static method test(self::Test? t) → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.weak.transformed.expect
new file mode 100644
index 0000000..aa67c0b
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware2.dart.weak.transformed.expect
@@ -0,0 +1,53 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B member = throw "";
+  field self::B? member2 = null;
+  synthetic constructor •() → self::Test
+    : super core::Object::•()
+    ;
+  static method test(self::Test? t) → void {
+    let final self::Test? #t1 = t in #t1 == null ?{self::B?} null : #t1{self::Test}.{self::Test::member} = self::f<self::B>();
+    let final self::Test? #t2 = t in #t2 == null ?{self::B?} null : #t2.{self::Test::member2}{self::B?} == null ?{self::B?} #t2.{self::Test::member2} = self::f<self::B?>() : null;
+    let final self::Test? #t3 = t in #t3 == null ?{self::B?} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    let final self::Test? #t4 = t in #t4 == null ?{self::B?} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    let final self::Test? #t5 = t in #t5 == null ?{self::C?} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    let final self::Test? #t6 = t in #t6 == null ?{self::B?} null : let final self::B #t7 = #t6.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
+    let final self::Test? #t9 = t in #t9 == null ?{self::B?} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B};
+    self::B? v1 = let final self::Test? #t10 = t in #t10 == null ?{self::B?} null : #t10{self::Test}.{self::Test::member} = self::f<self::B>();
+    self::B? v2 = let final self::Test? #t11 = t in #t11 == null ?{self::B?} null : let final self::B? #t12 = #t11.{self::Test::member2}{self::B?} in #t12 == null ?{self::B?} #t11.{self::Test::member2} = self::f<self::B?>() : #t12{self::B};
+    self::B? v3 = let final self::Test? #t13 = t in #t13 == null ?{self::B?} null : let final self::B #t14 = #t13.{self::Test::member}{self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B} in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B? v4 = let final self::Test? #t16 = t in #t16 == null ?{self::B?} null : let final self::B #t17 = #t16.{self::Test::member}{self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
+    self::C? v5 = let final self::Test? #t19 = t in #t19 == null ?{self::C?} null : let final self::C #t20 = #t19.{self::Test::member}{self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
+    self::B? v6 = let final self::Test? #t22 = t in #t22 == null ?{self::B?} null : let final self::B #t23 = #t22.{self::Test::member}{self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
+    self::B? v7 = let final self::Test? #t25 = t in #t25 == null ?{self::B?} null : let final self::B #t26 = #t25.{self::Test::member}{self::B} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1){(core::int) → self::B} in #t26;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart
index 692f54f..55f52eb 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -13,33 +15,33 @@
   int prop;
 
   static void test(Test1 t) {
-    var /*@ type=int* */ v1 = /*@ type=Test1* */  t
+    var /*@type=int**/ v1 = /*@type=Test1**/  t
         ?. /*@target=Test1.prop*/ prop = getInt();
 
-    var /*@ type=num* */ v2 = /*@ type=Test1* */  t
+    var /*@type=num**/ v2 = /*@type=Test1**/  t
         ?. /*@target=Test1.prop*/ prop = getNum();
 
-    var /*@ type=int* */ v4 =  t?.
+    var /*@type=int**/ v4 =  t?.
             /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
          ??= getInt();
 
-    var /*@ type=num* */ v5 =  t?.
+    var /*@type=num**/ v5 =  t?.
             /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
          ??= getNum();
 
-    var /*@ type=int* */ v7 =  t?.
+    var /*@type=int**/ v7 =  t?.
             /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 =  t?.
+    var /*@type=num**/ v8 =  t?.
             /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++
          t?.
             /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop;
 
-    var /*@ type=int* */ v11 =  t?.
+    var /*@type=int**/ v11 =  t?.
             /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
         /*@target=num.+*/ ++;
   }
@@ -49,43 +51,43 @@
   num prop;
 
   static void test(Test2 t) {
-    var /*@ type=int* */ v1 = /*@ type=Test2* */  t
+    var /*@type=int**/ v1 = /*@type=Test2**/  t
         ?. /*@target=Test2.prop*/ prop = getInt();
 
-    var /*@ type=num* */ v2 = /*@ type=Test2* */  t
+    var /*@type=num**/ v2 = /*@type=Test2**/  t
         ?. /*@target=Test2.prop*/ prop = getNum();
 
-    var /*@ type=double* */ v3 = /*@ type=Test2* */  t
+    var /*@type=double**/ v3 = /*@type=Test2**/  t
         ?. /*@target=Test2.prop*/ prop = getDouble();
 
-    var /*@ type=num* */ v4 =  t?.
+    var /*@type=num**/ v4 =  t?.
             /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
          ??= getInt();
 
-    var /*@ type=num* */ v5 =  t?.
+    var /*@type=num**/ v5 =  t?.
             /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
          ??= getNum();
 
-    var /*@ type=num* */ v6 =  t?.
+    var /*@type=num**/ v6 =  t?.
             /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
          ??= getDouble();
 
-    var /*@ type=num* */ v7 =  t?.
+    var /*@type=num**/ v7 =  t?.
             /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 =  t?.
+    var /*@type=num**/ v8 =  t?.
             /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v9 =  t?.
+    var /*@type=num**/ v9 =  t?.
         /*@target=Test2.prop*/ /*@target=Test2.prop*/
         prop /*@target=num.+*/ += getDouble();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++ 
+    var /*@type=num**/ v10 = /*@target=num.+*/ ++ 
         t?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop;
 
-    var /*@ type=num* */ v11 = 
+    var /*@type=num**/ v11 = 
         t?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
         /*@target=num.+*/ ++;
   }
@@ -95,39 +97,39 @@
   double prop;
 
   static void test3(Test3 t) {
-    var /*@ type=num* */ v2 = /*@ type=Test3* */  t
+    var /*@type=num**/ v2 = /*@type=Test3**/  t
         ?. /*@target=Test3.prop*/ prop = getNum();
 
-    var /*@ type=double* */ v3 = /*@ type=Test3* */  t
+    var /*@type=double**/ v3 = /*@type=Test3**/  t
         ?. /*@target=Test3.prop*/ prop = getDouble();
 
-    var /*@ type=num* */ v5 =  t?.
+    var /*@type=num**/ v5 =  t?.
             /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
          ??= getNum();
 
-    var /*@ type=double* */ v6 =
+    var /*@type=double**/ v6 =
          t?.
                 /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
              ??= getDouble();
 
-    var /*@ type=double* */ v7 =  t?.
+    var /*@type=double**/ v7 =  t?.
             /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
         /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 =  t?.
+    var /*@type=double**/ v8 =  t?.
             /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
         /*@target=double.+*/ += getNum();
 
-    var /*@ type=double* */ v9 =
+    var /*@type=double**/ v9 =
          t?.
                 /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
             /*@target=double.+*/ += getDouble();
 
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++
+    var /*@type=double**/ v10 = /*@target=double.+*/ ++
          t?.
             /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop;
 
-    var /*@ type=double* */ v11 = 
+    var /*@type=double**/ v11 = 
         t?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
         /*@target=double.+*/ ++;
   }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart
new file mode 100644
index 0000000..bb3247f
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart
@@ -0,0 +1,111 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Test1 {
+  int prop = 0;
+  int? prop2;
+
+  static void test(Test1? t) {
+    var /*@type=int?*/ v1 = /*@type=Test1?*/ /*@promotedType=Test1*/ t
+        ?. /*@target=Test1.prop*/ prop = getInt();
+
+    var /*@type=int?*/ v4 =
+        t?. /*@target=Test1.prop2*/ /*@target=Test1.prop2*/ prop2 ??= getInt();
+
+    var /*@type=int?*/ v7 =
+        t?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop /*@target=num.+*/ +=
+            getInt();
+
+    var /*@type=int?*/ v10 = /*@target=num.+*/ ++t
+        ?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop;
+
+    var /*@type=int?*/ v11 = t
+        ?. /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop /*@target=num.+*/ ++;
+  }
+}
+
+class Test2 {
+  num prop = 0;
+  num? prop2;
+
+  static void test(Test2? t) {
+    var /*@type=int?*/ v1 = /*@type=Test2?*/ /*@promotedType=Test2*/ t
+        ?. /*@target=Test2.prop*/ prop = getInt();
+
+    var /*@type=num?*/ v2 = /*@type=Test2?*/ /*@promotedType=Test2*/ t
+        ?. /*@target=Test2.prop*/ prop = getNum();
+
+    var /*@type=double?*/ v3 = /*@type=Test2?*/ /*@promotedType=Test2*/ t
+        ?. /*@target=Test2.prop*/ prop = getDouble();
+
+    var /*@type=num?*/ v4 =
+        t?. /*@target=Test2.prop2*/ /*@target=Test2.prop2*/ prop2 ??= getInt();
+
+    var /*@type=num?*/ v5 =
+        t?. /*@target=Test2.prop2*/ /*@target=Test2.prop2*/ prop2 ??= getNum();
+
+    var /*@type=num?*/ v6 =
+        t?. /*@target=Test2.prop2*/ /*@target=Test2.prop2*/ prop2 ??=
+            getDouble();
+
+    var /*@type=num?*/ v7 =
+        t?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop /*@target=num.+*/ +=
+            getInt();
+
+    var /*@type=num?*/ v8 =
+        t?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop /*@target=num.+*/ +=
+            getNum();
+
+    var /*@type=double?*/ v9 = t?.
+        /*@target=Test2.prop*/ /*@target=Test2.prop*/
+        prop /*@target=num.+*/ += getDouble();
+
+    var /*@type=num?*/ v10 = /*@target=num.+*/ ++t
+        ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop;
+
+    var /*@type=num?*/ v11 = t
+        ?. /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop /*@target=num.+*/ ++;
+  }
+}
+
+class Test3 {
+  double prop = 0;
+  double? prop2;
+
+  static void test3(Test3? t) {
+    var /*@type=double?*/ v3 = /*@type=Test3?*/ /*@promotedType=Test3*/ t
+        ?. /*@target=Test3.prop*/ prop = getDouble();
+
+    var /*@type=double?*/ v6 =
+        t?. /*@target=Test3.prop2*/ /*@target=Test3.prop2*/ prop2 ??=
+            getDouble();
+
+    var /*@type=double?*/ v7 =
+        t?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop /*@target=double.+*/ +=
+            getInt();
+
+    var /*@type=double?*/ v8 =
+        t?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop /*@target=double.+*/ +=
+            getNum();
+
+    var /*@type=double?*/ v9 =
+        t?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop /*@target=double.+*/ +=
+            getDouble();
+
+    var /*@type=double?*/ v10 = /*@target=double.+*/ ++t
+        ?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop;
+
+    var /*@type=double?*/ v11 = t
+        ?. /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop /*@target=double.+*/ ++;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.textual_outline.expect
new file mode 100644
index 0000000..813b55d
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.textual_outline.expect
@@ -0,0 +1,25 @@
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Test1 {
+  int prop = 0;
+  int? prop2;
+  static void test(Test1? t) {}
+}
+
+class Test2 {
+  num prop = 0;
+  num? prop2;
+  static void test(Test2? t) {}
+}
+
+class Test3 {
+  double prop = 0;
+  double? prop2;
+  static void test3(Test3? t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..970a68c
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.textual_outline_modelled.expect
@@ -0,0 +1,24 @@
+library test;
+
+class Test1 {
+  int? prop2;
+  int prop = 0;
+  static void test(Test1? t) {}
+}
+
+class Test2 {
+  num? prop2;
+  num prop = 0;
+  static void test(Test2? t) {}
+}
+
+class Test3 {
+  double? prop2;
+  double prop = 0;
+  static void test3(Test3? t) {}
+}
+
+double getDouble() => 0.0;
+int getInt() => 0;
+main() {}
+num getNum() => 0;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.weak.expect
new file mode 100644
index 0000000..592b84d
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.weak.expect
@@ -0,0 +1,61 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int prop = 0;
+  field core::int? prop2 = null;
+  synthetic constructor •() → self::Test1
+    : super core::Object::•()
+    ;
+  static method test(self::Test1? t) → void {
+    core::int? v1 = let final self::Test1? #t1 = t in #t1 == null ?{core::int?} null : #t1{self::Test1}.{self::Test1::prop} = self::getInt();
+    core::int? v4 = let final self::Test1? #t2 = t in #t2 == null ?{core::int?} null : let final core::int? #t3 = #t2.{self::Test1::prop2}{core::int?} in #t3 == null ?{core::int} #t2.{self::Test1::prop2} = self::getInt() : #t3{core::int};
+    core::int? v7 = let final self::Test1? #t4 = t in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Test1::prop}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
+    core::int? v10 = let final self::Test1? #t7 = t in #t7 == null ?{core::int?} null : let final core::int #t8 = #t7.{self::Test1::prop}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
+    core::int? v11 = let final self::Test1? #t10 = t in #t10 == null ?{core::int?} null : let final core::int #t11 = #t10.{self::Test1::prop}{core::int} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1){(core::num) → core::int} in #t11;
+  }
+}
+class Test2 extends core::Object {
+  field core::num prop = 0;
+  field core::num? prop2 = null;
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  static method test(self::Test2? t) → void {
+    core::int? v1 = let final self::Test2? #t13 = t in #t13 == null ?{core::int?} null : #t13{self::Test2}.{self::Test2::prop} = self::getInt();
+    core::num? v2 = let final self::Test2? #t14 = t in #t14 == null ?{core::num?} null : #t14{self::Test2}.{self::Test2::prop} = self::getNum();
+    core::double? v3 = let final self::Test2? #t15 = t in #t15 == null ?{core::double?} null : #t15{self::Test2}.{self::Test2::prop} = self::getDouble();
+    core::num? v4 = let final self::Test2? #t16 = t in #t16 == null ?{core::num?} null : let final core::num? #t17 = #t16.{self::Test2::prop2}{core::num?} in #t17 == null ?{core::num} #t16.{self::Test2::prop2} = self::getInt() : #t17{core::num};
+    core::num? v5 = let final self::Test2? #t18 = t in #t18 == null ?{core::num?} null : let final core::num? #t19 = #t18.{self::Test2::prop2}{core::num?} in #t19 == null ?{core::num} #t18.{self::Test2::prop2} = self::getNum() : #t19{core::num};
+    core::num? v6 = let final self::Test2? #t20 = t in #t20 == null ?{core::num?} null : let final core::num? #t21 = #t20.{self::Test2::prop2}{core::num?} in #t21 == null ?{core::num} #t20.{self::Test2::prop2} = self::getDouble() : #t21{core::num};
+    core::num? v7 = let final self::Test2? #t22 = t in #t22 == null ?{core::num?} null : let final core::num #t23 = #t22.{self::Test2::prop}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
+    core::num? v8 = let final self::Test2? #t25 = t in #t25 == null ?{core::num?} null : let final core::num #t26 = #t25.{self::Test2::prop}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
+    core::double? v9 = let final self::Test2? #t28 = t in #t28 == null ?{core::double?} null : let final core::double #t29 = #t28.{self::Test2::prop}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
+    core::num? v10 = let final self::Test2? #t31 = t in #t31 == null ?{core::num?} null : let final core::num #t32 = #t31.{self::Test2::prop}{core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
+    core::num? v11 = let final self::Test2? #t34 = t in #t34 == null ?{core::num?} null : let final core::num #t35 = #t34.{self::Test2::prop}{core::num} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1){(core::num) → core::num} in #t35;
+  }
+}
+class Test3 extends core::Object {
+  field core::double prop = 0.0;
+  field core::double? prop2 = null;
+  synthetic constructor •() → self::Test3
+    : super core::Object::•()
+    ;
+  static method test3(self::Test3? t) → void {
+    core::double? v3 = let final self::Test3? #t37 = t in #t37 == null ?{core::double?} null : #t37{self::Test3}.{self::Test3::prop} = self::getDouble();
+    core::double? v6 = let final self::Test3? #t38 = t in #t38 == null ?{core::double?} null : let final core::double? #t39 = #t38.{self::Test3::prop2}{core::double?} in #t39 == null ?{core::double} #t38.{self::Test3::prop2} = self::getDouble() : #t39{core::double};
+    core::double? v7 = let final self::Test3? #t40 = t in #t40 == null ?{core::double?} null : let final core::double #t41 = #t40.{self::Test3::prop}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
+    core::double? v8 = let final self::Test3? #t43 = t in #t43 == null ?{core::double?} null : let final core::double #t44 = #t43.{self::Test3::prop}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
+    core::double? v9 = let final self::Test3? #t46 = t in #t46 == null ?{core::double?} null : let final core::double #t47 = #t46.{self::Test3::prop}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
+    core::double? v10 = let final self::Test3? #t49 = t in #t49 == null ?{core::double?} null : let final core::double #t50 = #t49.{self::Test3::prop}{core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
+    core::double? v11 = let final self::Test3? #t52 = t in #t52 == null ?{core::double?} null : let final core::double #t53 = #t52.{self::Test3::prop}{core::double} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1){(core::num) → core::double} in #t53;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.weak.modular.expect
new file mode 100644
index 0000000..592b84d
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int prop = 0;
+  field core::int? prop2 = null;
+  synthetic constructor •() → self::Test1
+    : super core::Object::•()
+    ;
+  static method test(self::Test1? t) → void {
+    core::int? v1 = let final self::Test1? #t1 = t in #t1 == null ?{core::int?} null : #t1{self::Test1}.{self::Test1::prop} = self::getInt();
+    core::int? v4 = let final self::Test1? #t2 = t in #t2 == null ?{core::int?} null : let final core::int? #t3 = #t2.{self::Test1::prop2}{core::int?} in #t3 == null ?{core::int} #t2.{self::Test1::prop2} = self::getInt() : #t3{core::int};
+    core::int? v7 = let final self::Test1? #t4 = t in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Test1::prop}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
+    core::int? v10 = let final self::Test1? #t7 = t in #t7 == null ?{core::int?} null : let final core::int #t8 = #t7.{self::Test1::prop}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
+    core::int? v11 = let final self::Test1? #t10 = t in #t10 == null ?{core::int?} null : let final core::int #t11 = #t10.{self::Test1::prop}{core::int} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1){(core::num) → core::int} in #t11;
+  }
+}
+class Test2 extends core::Object {
+  field core::num prop = 0;
+  field core::num? prop2 = null;
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  static method test(self::Test2? t) → void {
+    core::int? v1 = let final self::Test2? #t13 = t in #t13 == null ?{core::int?} null : #t13{self::Test2}.{self::Test2::prop} = self::getInt();
+    core::num? v2 = let final self::Test2? #t14 = t in #t14 == null ?{core::num?} null : #t14{self::Test2}.{self::Test2::prop} = self::getNum();
+    core::double? v3 = let final self::Test2? #t15 = t in #t15 == null ?{core::double?} null : #t15{self::Test2}.{self::Test2::prop} = self::getDouble();
+    core::num? v4 = let final self::Test2? #t16 = t in #t16 == null ?{core::num?} null : let final core::num? #t17 = #t16.{self::Test2::prop2}{core::num?} in #t17 == null ?{core::num} #t16.{self::Test2::prop2} = self::getInt() : #t17{core::num};
+    core::num? v5 = let final self::Test2? #t18 = t in #t18 == null ?{core::num?} null : let final core::num? #t19 = #t18.{self::Test2::prop2}{core::num?} in #t19 == null ?{core::num} #t18.{self::Test2::prop2} = self::getNum() : #t19{core::num};
+    core::num? v6 = let final self::Test2? #t20 = t in #t20 == null ?{core::num?} null : let final core::num? #t21 = #t20.{self::Test2::prop2}{core::num?} in #t21 == null ?{core::num} #t20.{self::Test2::prop2} = self::getDouble() : #t21{core::num};
+    core::num? v7 = let final self::Test2? #t22 = t in #t22 == null ?{core::num?} null : let final core::num #t23 = #t22.{self::Test2::prop}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
+    core::num? v8 = let final self::Test2? #t25 = t in #t25 == null ?{core::num?} null : let final core::num #t26 = #t25.{self::Test2::prop}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
+    core::double? v9 = let final self::Test2? #t28 = t in #t28 == null ?{core::double?} null : let final core::double #t29 = #t28.{self::Test2::prop}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
+    core::num? v10 = let final self::Test2? #t31 = t in #t31 == null ?{core::num?} null : let final core::num #t32 = #t31.{self::Test2::prop}{core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
+    core::num? v11 = let final self::Test2? #t34 = t in #t34 == null ?{core::num?} null : let final core::num #t35 = #t34.{self::Test2::prop}{core::num} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1){(core::num) → core::num} in #t35;
+  }
+}
+class Test3 extends core::Object {
+  field core::double prop = 0.0;
+  field core::double? prop2 = null;
+  synthetic constructor •() → self::Test3
+    : super core::Object::•()
+    ;
+  static method test3(self::Test3? t) → void {
+    core::double? v3 = let final self::Test3? #t37 = t in #t37 == null ?{core::double?} null : #t37{self::Test3}.{self::Test3::prop} = self::getDouble();
+    core::double? v6 = let final self::Test3? #t38 = t in #t38 == null ?{core::double?} null : let final core::double? #t39 = #t38.{self::Test3::prop2}{core::double?} in #t39 == null ?{core::double} #t38.{self::Test3::prop2} = self::getDouble() : #t39{core::double};
+    core::double? v7 = let final self::Test3? #t40 = t in #t40 == null ?{core::double?} null : let final core::double #t41 = #t40.{self::Test3::prop}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
+    core::double? v8 = let final self::Test3? #t43 = t in #t43 == null ?{core::double?} null : let final core::double #t44 = #t43.{self::Test3::prop}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
+    core::double? v9 = let final self::Test3? #t46 = t in #t46 == null ?{core::double?} null : let final core::double #t47 = #t46.{self::Test3::prop}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
+    core::double? v10 = let final self::Test3? #t49 = t in #t49 == null ?{core::double?} null : let final core::double #t50 = #t49.{self::Test3::prop}{core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
+    core::double? v11 = let final self::Test3? #t52 = t in #t52 == null ?{core::double?} null : let final core::double #t53 = #t52.{self::Test3::prop}{core::double} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1){(core::num) → core::double} in #t53;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.weak.outline.expect
new file mode 100644
index 0000000..21d9cba
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int prop;
+  field core::int? prop2;
+  synthetic constructor •() → self::Test1
+    ;
+  static method test(self::Test1? t) → void
+    ;
+}
+class Test2 extends core::Object {
+  field core::num prop;
+  field core::num? prop2;
+  synthetic constructor •() → self::Test2
+    ;
+  static method test(self::Test2? t) → void
+    ;
+}
+class Test3 extends core::Object {
+  field core::double prop;
+  field core::double? prop2;
+  synthetic constructor •() → self::Test3
+    ;
+  static method test3(self::Test3? t) → void
+    ;
+}
+static method getInt() → core::int
+  ;
+static method getNum() → core::num
+  ;
+static method getDouble() → core::double
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.weak.transformed.expect
new file mode 100644
index 0000000..592b84d
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards2.dart.weak.transformed.expect
@@ -0,0 +1,61 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int prop = 0;
+  field core::int? prop2 = null;
+  synthetic constructor •() → self::Test1
+    : super core::Object::•()
+    ;
+  static method test(self::Test1? t) → void {
+    core::int? v1 = let final self::Test1? #t1 = t in #t1 == null ?{core::int?} null : #t1{self::Test1}.{self::Test1::prop} = self::getInt();
+    core::int? v4 = let final self::Test1? #t2 = t in #t2 == null ?{core::int?} null : let final core::int? #t3 = #t2.{self::Test1::prop2}{core::int?} in #t3 == null ?{core::int} #t2.{self::Test1::prop2} = self::getInt() : #t3{core::int};
+    core::int? v7 = let final self::Test1? #t4 = t in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Test1::prop}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
+    core::int? v10 = let final self::Test1? #t7 = t in #t7 == null ?{core::int?} null : let final core::int #t8 = #t7.{self::Test1::prop}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
+    core::int? v11 = let final self::Test1? #t10 = t in #t10 == null ?{core::int?} null : let final core::int #t11 = #t10.{self::Test1::prop}{core::int} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1){(core::num) → core::int} in #t11;
+  }
+}
+class Test2 extends core::Object {
+  field core::num prop = 0;
+  field core::num? prop2 = null;
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  static method test(self::Test2? t) → void {
+    core::int? v1 = let final self::Test2? #t13 = t in #t13 == null ?{core::int?} null : #t13{self::Test2}.{self::Test2::prop} = self::getInt();
+    core::num? v2 = let final self::Test2? #t14 = t in #t14 == null ?{core::num?} null : #t14{self::Test2}.{self::Test2::prop} = self::getNum();
+    core::double? v3 = let final self::Test2? #t15 = t in #t15 == null ?{core::double?} null : #t15{self::Test2}.{self::Test2::prop} = self::getDouble();
+    core::num? v4 = let final self::Test2? #t16 = t in #t16 == null ?{core::num?} null : let final core::num? #t17 = #t16.{self::Test2::prop2}{core::num?} in #t17 == null ?{core::num} #t16.{self::Test2::prop2} = self::getInt() : #t17{core::num};
+    core::num? v5 = let final self::Test2? #t18 = t in #t18 == null ?{core::num?} null : let final core::num? #t19 = #t18.{self::Test2::prop2}{core::num?} in #t19 == null ?{core::num} #t18.{self::Test2::prop2} = self::getNum() : #t19{core::num};
+    core::num? v6 = let final self::Test2? #t20 = t in #t20 == null ?{core::num?} null : let final core::num? #t21 = #t20.{self::Test2::prop2}{core::num?} in #t21 == null ?{core::num} #t20.{self::Test2::prop2} = self::getDouble() : #t21{core::num};
+    core::num? v7 = let final self::Test2? #t22 = t in #t22 == null ?{core::num?} null : let final core::num #t23 = #t22.{self::Test2::prop}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
+    core::num? v8 = let final self::Test2? #t25 = t in #t25 == null ?{core::num?} null : let final core::num #t26 = #t25.{self::Test2::prop}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
+    core::double? v9 = let final self::Test2? #t28 = t in #t28 == null ?{core::double?} null : let final core::double #t29 = #t28.{self::Test2::prop}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
+    core::num? v10 = let final self::Test2? #t31 = t in #t31 == null ?{core::num?} null : let final core::num #t32 = #t31.{self::Test2::prop}{core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
+    core::num? v11 = let final self::Test2? #t34 = t in #t34 == null ?{core::num?} null : let final core::num #t35 = #t34.{self::Test2::prop}{core::num} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1){(core::num) → core::num} in #t35;
+  }
+}
+class Test3 extends core::Object {
+  field core::double prop = 0.0;
+  field core::double? prop2 = null;
+  synthetic constructor •() → self::Test3
+    : super core::Object::•()
+    ;
+  static method test3(self::Test3? t) → void {
+    core::double? v3 = let final self::Test3? #t37 = t in #t37 == null ?{core::double?} null : #t37{self::Test3}.{self::Test3::prop} = self::getDouble();
+    core::double? v6 = let final self::Test3? #t38 = t in #t38 == null ?{core::double?} null : let final core::double? #t39 = #t38.{self::Test3::prop2}{core::double?} in #t39 == null ?{core::double} #t38.{self::Test3::prop2} = self::getDouble() : #t39{core::double};
+    core::double? v7 = let final self::Test3? #t40 = t in #t40 == null ?{core::double?} null : let final core::double #t41 = #t40.{self::Test3::prop}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
+    core::double? v8 = let final self::Test3? #t43 = t in #t43 == null ?{core::double?} null : let final core::double #t44 = #t43.{self::Test3::prop}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
+    core::double? v9 = let final self::Test3? #t46 = t in #t46 == null ?{core::double?} null : let final core::double #t47 = #t46.{self::Test3::prop}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
+    core::double? v10 = let final self::Test3? #t49 = t in #t49 == null ?{core::double?} null : let final core::double #t50 = #t49.{self::Test3::prop}{core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
+    core::double? v11 = let final self::Test3? #t52 = t in #t52 == null ?{core::double?} null : let final core::double #t53 = #t52.{self::Test3::prop}{core::double} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1){(core::num) → core::double} in #t53;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart
index 00881df..bb02773 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -24,47 +26,47 @@
 
 class Test extends Base {
   void test() {
-    super.member = /*@ typeArgs=B* */ f();
+    super.member = /*@typeArgs=B**/ f();
 
     super. /*@target=Base.member*/ member
-         ??= /*@ typeArgs=B* */ f();
+         ??= /*@typeArgs=B**/ f();
 
     super. /*@target=Base.member*/ member
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+        /*@target=B.+*/ += /*@typeArgs=C**/ f();
 
     super. /*@target=Base.member*/ member
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+        /*@target=B.**/ *= /*@typeArgs=B**/ f();
 
     super. /*@target=Base.member*/ member
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+        /*@target=B.&*/ &= /*@typeArgs=A**/ f();
 
     /*@target=B.-*/ --super. /*@target=Base.member*/ member;
 
     super. /*@target=Base.member*/ member
         /*@target=B.-*/ --;
 
-    var /*@ type=B* */ v1 = super.member = /*@ typeArgs=B* */ f();
+    var /*@type=B**/ v1 = super.member = /*@typeArgs=B**/ f();
 
-    var /*@ type=B* */ v2 = super. /*@target=Base.member*/ member
-         ??= /*@ typeArgs=B* */ f();
+    var /*@type=B**/ v2 = super. /*@target=Base.member*/ member
+         ??= /*@typeArgs=B**/ f();
 
-    var /*@ type=A* */ v3 = super. /*@target=Base.member*/ member
-        /*@target=B.+*/ += /*@ typeArgs=C* */ f();
+    var /*@type=A**/ v3 = super. /*@target=Base.member*/ member
+        /*@target=B.+*/ += /*@typeArgs=C**/ f();
 
-    var /*@ type=B* */ v4 = super. /*@target=Base.member*/ member
-        /*@target=B.**/ *= /*@ typeArgs=B* */ f();
+    var /*@type=B**/ v4 = super. /*@target=Base.member*/ member
+        /*@target=B.**/ *= /*@typeArgs=B**/ f();
 
-    var /*@ type=C* */ v5 = super. /*@target=Base.member*/ member
-        /*@target=B.&*/ &= /*@ typeArgs=A* */ f();
+    var /*@type=C**/ v5 = super. /*@target=Base.member*/ member
+        /*@target=B.&*/ &= /*@typeArgs=A**/ f();
 
-    var /*@ type=B* */ v6 = /*@target=B.-*/ --super
+    var /*@type=B**/ v6 = /*@target=B.-*/ --super
         .
         /*@target=Base.member*/ member;
 
-    var /*@ type=B* */ v7 = super
+    var /*@type=B**/ v7 = super
         .
-        /*@ type=B* */ /*@target=Base.member*/
-        /*@ type=B* */ member /*@target=B.-*/ --;
+        /*@type=B**/ /*@target=Base.member*/
+        /*@type=B**/ member /*@target=B.-*/ --;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart
new file mode 100644
index 0000000..59ea01a
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart
@@ -0,0 +1,69 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Base {
+  B member = throw '';
+  B? member2;
+}
+
+class Test extends Base {
+  void test() {
+    super.member = /*@typeArgs=B*/ f();
+
+    super. /*@target=Base.member2*/ member2 ??= /*@typeArgs=B?*/ f();
+
+    super
+        . /*@target=Base.member*/ member /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    super
+        . /*@target=Base.member*/ member /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    super
+        . /*@target=Base.member*/ member /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    /*@target=B.-*/ --super. /*@target=Base.member*/ member;
+
+    super. /*@target=Base.member*/ member /*@target=B.-*/ --;
+
+    var /*@type=B*/ v1 = super.member = /*@typeArgs=B*/ f();
+
+    var /*@type=B?*/ v2 =
+        super. /*@target=Base.member2*/ member2 ??= /*@typeArgs=B?*/ f();
+
+    var /*@type=B*/ v3 = super
+        . /*@target=Base.member*/ member /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+    var /*@type=B*/ v4 = super
+        . /*@target=Base.member*/ member /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+    var /*@type=C*/ v5 = super
+        . /*@target=Base.member*/ member /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+    var /*@type=B*/ v6 = /*@target=B.-*/ --super
+        . /*@target=Base.member*/ member;
+
+    var /*@type=B*/ v7 = super
+        .
+        /*@type=B*/ /*@target=Base.member*/
+        /*@type=B*/ member /*@target=B.-*/ --;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.textual_outline.expect
new file mode 100644
index 0000000..0d42283
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.textual_outline.expect
@@ -0,0 +1,25 @@
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+class Base {
+  B member = throw '';
+  B? member2;
+}
+
+class Test extends Base {
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3aebb1b
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.textual_outline_modelled.expect
@@ -0,0 +1,25 @@
+library test;
+
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+}
+
+class Base {
+  B? member2;
+  B member = throw '';
+}
+
+class C extends B {}
+
+class Test extends Base {
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.weak.expect
new file mode 100644
index 0000000..a451f53
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.weak.expect
@@ -0,0 +1,58 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  field self::B member = throw "";
+  field self::B? member2 = null;
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::member} = self::f<self::B>();
+    super.{self::Base::member2} == null ?{self::B?} super.{self::Base::member2} = self::f<self::B?>() : null;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = super.{self::Base::member} = self::f<self::B>();
+    self::B? v2 = let final self::B? #t1 = super.{self::Base::member2} in #t1 == null ?{self::B?} super.{self::Base::member2} = self::f<self::B?>() : #t1{self::B};
+    self::B v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::B #t2 = super.{self::Base::member} in let final self::B #t3 = super.{self::Base::member} = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.weak.modular.expect
new file mode 100644
index 0000000..a451f53
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  field self::B member = throw "";
+  field self::B? member2 = null;
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::member} = self::f<self::B>();
+    super.{self::Base::member2} == null ?{self::B?} super.{self::Base::member2} = self::f<self::B?>() : null;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = super.{self::Base::member} = self::f<self::B>();
+    self::B? v2 = let final self::B? #t1 = super.{self::Base::member2} in #t1 == null ?{self::B?} super.{self::Base::member2} = self::f<self::B?>() : #t1{self::B};
+    self::B v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::B #t2 = super.{self::Base::member} in let final self::B #t3 = super.{self::Base::member} = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.weak.outline.expect
new file mode 100644
index 0000000..344c5cc
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.weak.outline.expect
@@ -0,0 +1,40 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+class Base extends core::Object {
+  field self::B member;
+  field self::B? member2;
+  synthetic constructor •() → self::Base
+    ;
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test
+    ;
+  method test() → void
+    ;
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.weak.transformed.expect
new file mode 100644
index 0000000..a451f53
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super2.dart.weak.transformed.expect
@@ -0,0 +1,58 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  field self::B member = throw "";
+  field self::B? member2 = null;
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::member} = self::f<self::B>();
+    super.{self::Base::member2} == null ?{self::B?} super.{self::Base::member2} = self::f<self::B?>() : null;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    self::B v1 = super.{self::Base::member} = self::f<self::B>();
+    self::B? v2 = let final self::B? #t1 = super.{self::Base::member2} in #t1 == null ?{self::B?} super.{self::Base::member2} = self::f<self::B?>() : #t1{self::B};
+    self::B v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+    self::B v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+    self::C v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+    self::B v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int) → self::B};
+    self::B v7 = let final self::B #t2 = super.{self::Base::member} in let final self::B #t3 = super.{self::Base::member} = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+  }
+}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart
index fb14b71..5a6f7fe 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -17,98 +19,98 @@
 
 class Test1 extends Base {
   void test() {
-    var /*@ type=int* */ v1 = super.intProp = getInt();
+    var /*@type=int**/ v1 = super.intProp = getInt();
 
-    var /*@ type=num* */ v2 = super.intProp = getNum();
+    var /*@type=num**/ v2 = super.intProp = getNum();
 
-    var /*@ type=int* */ v4 = super. /*@target=Base.intProp*/ intProp
+    var /*@type=int**/ v4 = super. /*@target=Base.intProp*/ intProp
          ??= getInt();
 
-    var /*@ type=num* */ v5 = super. /*@target=Base.intProp*/ intProp
+    var /*@type=num**/ v5 = super. /*@target=Base.intProp*/ intProp
          ??= getNum();
 
-    var /*@ type=int* */ v7 = super. /*@target=Base.intProp*/ intProp
+    var /*@type=int**/ v7 = super. /*@target=Base.intProp*/ intProp
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = super. /*@target=Base.intProp*/ intProp
+    var /*@type=num**/ v8 = super. /*@target=Base.intProp*/ intProp
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++super
         . /*@target=Base.intProp*/ intProp;
 
-    var /*@ type=int* */ v11 = super
-        . /*@ type=int* */ /*@target=Base.intProp*/
-        /*@ type=int* */ intProp /*@target=num.+*/ ++;
+    var /*@type=int**/ v11 = super
+        . /*@type=int**/ /*@target=Base.intProp*/
+        /*@type=int**/ intProp /*@target=num.+*/ ++;
   }
 }
 
 class Test2 extends Base {
   void test() {
-    var /*@ type=int* */ v1 = super.numProp = getInt();
+    var /*@type=int**/ v1 = super.numProp = getInt();
 
-    var /*@ type=num* */ v2 = super.numProp = getNum();
+    var /*@type=num**/ v2 = super.numProp = getNum();
 
-    var /*@ type=double* */ v3 = super.numProp = getDouble();
+    var /*@type=double**/ v3 = super.numProp = getDouble();
 
-    var /*@ type=num* */ v4 = super. /*@target=Base.numProp*/ numProp
+    var /*@type=num**/ v4 = super. /*@target=Base.numProp*/ numProp
          ??= getInt();
 
-    var /*@ type=num* */ v5 = super. /*@target=Base.numProp*/ numProp
+    var /*@type=num**/ v5 = super. /*@target=Base.numProp*/ numProp
          ??= getNum();
 
-    var /*@ type=num* */ v6 = super. /*@target=Base.numProp*/ numProp
+    var /*@type=num**/ v6 = super. /*@target=Base.numProp*/ numProp
          ??= getDouble();
 
-    var /*@ type=num* */ v7 = super. /*@target=Base.numProp*/ numProp
+    var /*@type=num**/ v7 = super. /*@target=Base.numProp*/ numProp
         /*@target=num.+*/ += getInt();
 
-    var /*@ type=num* */ v8 = super. /*@target=Base.numProp*/ numProp
+    var /*@type=num**/ v8 = super. /*@target=Base.numProp*/ numProp
         /*@target=num.+*/ += getNum();
 
-    var /*@ type=num* */ v9 = super. /*@target=Base.numProp*/ numProp
+    var /*@type=num**/ v9 = super. /*@target=Base.numProp*/ numProp
         /*@target=num.+*/ += getDouble();
 
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++super
+    var /*@type=num**/ v10 = /*@target=num.+*/ ++super
         . /*@target=Base.numProp*/ numProp;
 
-    var /*@ type=num* */ v11 = super
-        . /*@ type=num* */ /*@target=Base.numProp*/
-        /*@ type=num* */ numProp /*@target=num.+*/ ++;
+    var /*@type=num**/ v11 = super
+        . /*@type=num**/ /*@target=Base.numProp*/
+        /*@type=num**/ numProp /*@target=num.+*/ ++;
   }
 }
 
 class Test3 extends Base {
   void test3() {
-    var /*@ type=num* */ v2 = super.doubleProp = getNum();
+    var /*@type=num**/ v2 = super.doubleProp = getNum();
 
-    var /*@ type=double* */ v3 = super.doubleProp = getDouble();
+    var /*@type=double**/ v3 = super.doubleProp = getDouble();
 
-    var /*@ type=num* */ v5 = super. /*@target=Base.doubleProp*/ doubleProp
+    var /*@type=num**/ v5 = super. /*@target=Base.doubleProp*/ doubleProp
          ??= getNum();
 
-    var /*@ type=double* */ v6 = super. /*@target=Base.doubleProp*/ doubleProp
+    var /*@type=double**/ v6 = super. /*@target=Base.doubleProp*/ doubleProp
          ??= getDouble();
 
-    var /*@ type=double* */ v7 = super
+    var /*@type=double**/ v7 = super
         . /*@target=Base.doubleProp*/
         doubleProp /*@target=double.+*/ += getInt();
 
-    var /*@ type=double* */ v8 = super
+    var /*@type=double**/ v8 = super
         . /*@target=Base.doubleProp*/
         doubleProp /*@target=double.+*/ += getNum();
 
-    var /*@ type=double* */ v9 = super
+    var /*@type=double**/ v9 = super
         . /*@target=Base.doubleProp*/
         doubleProp /*@target=double.+*/ += getDouble();
 
-    var /*@ type=double* */ v10 =
+    var /*@type=double**/ v10 =
         /*@target=double.+*/ ++super
             . /*@target=Base.doubleProp*/
             doubleProp;
 
-    var /*@ type=double* */ v11 = super
-        . /*@ type=double* */ /*@target=Base.doubleProp*/
-        /*@ type=double* */ doubleProp /*@target=double.+*/ ++;
+    var /*@type=double**/ v11 = super
+        . /*@type=double**/ /*@target=Base.doubleProp*/
+        /*@type=double**/ doubleProp /*@target=double.+*/ ++;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart
new file mode 100644
index 0000000..42d6f75
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart
@@ -0,0 +1,104 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Base {
+  int intProp = 0;
+  int? intProp2;
+  num numProp = 0;
+  num? numProp2;
+  double doubleProp = 0;
+  double? doubleProp2;
+}
+
+class Test1 extends Base {
+  void test() {
+    var /*@type=int*/ v1 = super.intProp = getInt();
+
+    var /*@type=int*/ v4 =
+        super. /*@target=Base.intProp2*/ intProp2 ??= getInt();
+
+    var /*@type=int*/ v7 =
+        super. /*@target=Base.intProp*/ intProp /*@target=num.+*/ += getInt();
+
+    var /*@type=int*/ v10 = /*@target=num.+*/ ++super
+        . /*@target=Base.intProp*/ intProp;
+
+    var /*@type=int*/ v11 = super
+        . /*@type=int*/ /*@target=Base.intProp*/
+        /*@type=int*/ intProp /*@target=num.+*/ ++;
+  }
+}
+
+class Test2 extends Base {
+  void test() {
+    var /*@type=int*/ v1 = super.numProp = getInt();
+
+    var /*@type=num*/ v2 = super.numProp = getNum();
+
+    var /*@type=double*/ v3 = super.numProp = getDouble();
+
+    var /*@type=num*/ v4 =
+        super. /*@target=Base.numProp2*/ numProp2 ??= getInt();
+
+    var /*@type=num*/ v5 =
+        super. /*@target=Base.numProp2*/ numProp2 ??= getNum();
+
+    var /*@type=num*/ v6 =
+        super. /*@target=Base.numProp2*/ numProp2 ??= getDouble();
+
+    var /*@type=num*/ v7 =
+        super. /*@target=Base.numProp*/ numProp /*@target=num.+*/ += getInt();
+
+    var /*@type=num*/ v8 =
+        super. /*@target=Base.numProp*/ numProp /*@target=num.+*/ += getNum();
+
+    var /*@type=double*/ v9 = super
+        . /*@target=Base.numProp*/ numProp /*@target=num.+*/ += getDouble();
+
+    var /*@type=num*/ v10 = /*@target=num.+*/ ++super
+        . /*@target=Base.numProp*/ numProp;
+
+    var /*@type=num*/ v11 = super
+        . /*@type=num*/ /*@target=Base.numProp*/
+        /*@type=num*/ numProp /*@target=num.+*/ ++;
+  }
+}
+
+class Test3 extends Base {
+  void test3() {
+    var /*@type=double*/ v3 = super.doubleProp = getDouble();
+
+    var /*@type=double*/ v6 =
+        super. /*@target=Base.doubleProp2*/ doubleProp2 ??= getDouble();
+
+    var /*@type=double*/ v7 = super
+        . /*@target=Base.doubleProp*/
+        doubleProp /*@target=double.+*/ += getInt();
+
+    var /*@type=double*/ v8 = super
+        . /*@target=Base.doubleProp*/
+        doubleProp /*@target=double.+*/ += getNum();
+
+    var /*@type=double*/ v9 = super
+        . /*@target=Base.doubleProp*/
+        doubleProp /*@target=double.+*/ += getDouble();
+
+    var /*@type=double*/ v10 = /*@target=double.+*/ ++super
+        . /*@target=Base.doubleProp*/
+        doubleProp;
+
+    var /*@type=double*/ v11 = super
+        . /*@type=double*/ /*@target=Base.doubleProp*/
+        /*@type=double*/ doubleProp /*@target=double.+*/ ++;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.textual_outline.expect
new file mode 100644
index 0000000..371ffeb
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.textual_outline.expect
@@ -0,0 +1,28 @@
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Base {
+  int intProp = 0;
+  int? intProp2;
+  num numProp = 0;
+  num? numProp2;
+  double doubleProp = 0;
+  double? doubleProp2;
+}
+
+class Test1 extends Base {
+  void test() {}
+}
+
+class Test2 extends Base {
+  void test() {}
+}
+
+class Test3 extends Base {
+  void test3() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..230af7c
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.textual_outline_modelled.expect
@@ -0,0 +1,27 @@
+library test;
+
+class Base {
+  double? doubleProp2;
+  double doubleProp = 0;
+  int? intProp2;
+  int intProp = 0;
+  num? numProp2;
+  num numProp = 0;
+}
+
+class Test1 extends Base {
+  void test() {}
+}
+
+class Test2 extends Base {
+  void test() {}
+}
+
+class Test3 extends Base {
+  void test3() {}
+}
+
+double getDouble() => 0.0;
+int getInt() => 0;
+main() {}
+num getNum() => 0;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.weak.expect
new file mode 100644
index 0000000..12e10f4
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.weak.expect
@@ -0,0 +1,66 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int intProp = 0;
+  field core::int? intProp2 = null;
+  field core::num numProp = 0;
+  field core::num? numProp2 = null;
+  field core::double doubleProp = 0.0;
+  field core::double? doubleProp2 = null;
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+}
+class Test1 extends self::Base {
+  synthetic constructor •() → self::Test1
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = super.{self::Base::intProp} = self::getInt();
+    core::int v4 = let final core::int? #t1 = super.{self::Base::intProp2} in #t1 == null ?{core::int} super.{self::Base::intProp2} = self::getInt() : #t1{core::int};
+    core::int v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final core::int #t2 = super.{self::Base::intProp} in let final core::int #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+  }
+}
+class Test2 extends self::Base {
+  synthetic constructor •() → self::Test2
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = super.{self::Base::numProp} = self::getInt();
+    core::num v2 = super.{self::Base::numProp} = self::getNum();
+    core::double v3 = super.{self::Base::numProp} = self::getDouble();
+    core::num v4 = let final core::num? #t4 = super.{self::Base::numProp2} in #t4 == null ?{core::num} super.{self::Base::numProp2} = self::getInt() : #t4{core::num};
+    core::num v5 = let final core::num? #t5 = super.{self::Base::numProp2} in #t5 == null ?{core::num} super.{self::Base::numProp2} = self::getNum() : #t5{core::num};
+    core::num v6 = let final core::num? #t6 = super.{self::Base::numProp2} in #t6 == null ?{core::num} super.{self::Base::numProp2} = self::getDouble() : #t6{core::num};
+    core::num v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final core::num #t7 = super.{self::Base::numProp} in let final core::num #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+  }
+}
+class Test3 extends self::Base {
+  synthetic constructor •() → self::Test3
+    : super self::Base::•()
+    ;
+  method test3() → void {
+    core::double v3 = super.{self::Base::doubleProp} = self::getDouble();
+    core::double v6 = let final core::double? #t9 = super.{self::Base::doubleProp2} in #t9 == null ?{core::double} super.{self::Base::doubleProp2} = self::getDouble() : #t9{core::double};
+    core::double v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final core::double #t10 = super.{self::Base::doubleProp} in let final core::double #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.weak.modular.expect
new file mode 100644
index 0000000..12e10f4
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int intProp = 0;
+  field core::int? intProp2 = null;
+  field core::num numProp = 0;
+  field core::num? numProp2 = null;
+  field core::double doubleProp = 0.0;
+  field core::double? doubleProp2 = null;
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+}
+class Test1 extends self::Base {
+  synthetic constructor •() → self::Test1
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = super.{self::Base::intProp} = self::getInt();
+    core::int v4 = let final core::int? #t1 = super.{self::Base::intProp2} in #t1 == null ?{core::int} super.{self::Base::intProp2} = self::getInt() : #t1{core::int};
+    core::int v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final core::int #t2 = super.{self::Base::intProp} in let final core::int #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+  }
+}
+class Test2 extends self::Base {
+  synthetic constructor •() → self::Test2
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = super.{self::Base::numProp} = self::getInt();
+    core::num v2 = super.{self::Base::numProp} = self::getNum();
+    core::double v3 = super.{self::Base::numProp} = self::getDouble();
+    core::num v4 = let final core::num? #t4 = super.{self::Base::numProp2} in #t4 == null ?{core::num} super.{self::Base::numProp2} = self::getInt() : #t4{core::num};
+    core::num v5 = let final core::num? #t5 = super.{self::Base::numProp2} in #t5 == null ?{core::num} super.{self::Base::numProp2} = self::getNum() : #t5{core::num};
+    core::num v6 = let final core::num? #t6 = super.{self::Base::numProp2} in #t6 == null ?{core::num} super.{self::Base::numProp2} = self::getDouble() : #t6{core::num};
+    core::num v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final core::num #t7 = super.{self::Base::numProp} in let final core::num #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+  }
+}
+class Test3 extends self::Base {
+  synthetic constructor •() → self::Test3
+    : super self::Base::•()
+    ;
+  method test3() → void {
+    core::double v3 = super.{self::Base::doubleProp} = self::getDouble();
+    core::double v6 = let final core::double? #t9 = super.{self::Base::doubleProp2} in #t9 == null ?{core::double} super.{self::Base::doubleProp2} = self::getDouble() : #t9{core::double};
+    core::double v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final core::double #t10 = super.{self::Base::doubleProp} in let final core::double #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.weak.outline.expect
new file mode 100644
index 0000000..6500afd
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.weak.outline.expect
@@ -0,0 +1,40 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int intProp;
+  field core::int? intProp2;
+  field core::num numProp;
+  field core::num? numProp2;
+  field core::double doubleProp;
+  field core::double? doubleProp2;
+  synthetic constructor •() → self::Base
+    ;
+}
+class Test1 extends self::Base {
+  synthetic constructor •() → self::Test1
+    ;
+  method test() → void
+    ;
+}
+class Test2 extends self::Base {
+  synthetic constructor •() → self::Test2
+    ;
+  method test() → void
+    ;
+}
+class Test3 extends self::Base {
+  synthetic constructor •() → self::Test3
+    ;
+  method test3() → void
+    ;
+}
+static method getInt() → core::int
+  ;
+static method getNum() → core::num
+  ;
+static method getDouble() → core::double
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.weak.transformed.expect
new file mode 100644
index 0000000..12e10f4
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards2.dart.weak.transformed.expect
@@ -0,0 +1,66 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int intProp = 0;
+  field core::int? intProp2 = null;
+  field core::num numProp = 0;
+  field core::num? numProp2 = null;
+  field core::double doubleProp = 0.0;
+  field core::double? doubleProp2 = null;
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+}
+class Test1 extends self::Base {
+  synthetic constructor •() → self::Test1
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = super.{self::Base::intProp} = self::getInt();
+    core::int v4 = let final core::int? #t1 = super.{self::Base::intProp2} in #t1 == null ?{core::int} super.{self::Base::intProp2} = self::getInt() : #t1{core::int};
+    core::int v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final core::int #t2 = super.{self::Base::intProp} in let final core::int #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+  }
+}
+class Test2 extends self::Base {
+  synthetic constructor •() → self::Test2
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int v1 = super.{self::Base::numProp} = self::getInt();
+    core::num v2 = super.{self::Base::numProp} = self::getNum();
+    core::double v3 = super.{self::Base::numProp} = self::getDouble();
+    core::num v4 = let final core::num? #t4 = super.{self::Base::numProp2} in #t4 == null ?{core::num} super.{self::Base::numProp2} = self::getInt() : #t4{core::num};
+    core::num v5 = let final core::num? #t5 = super.{self::Base::numProp2} in #t5 == null ?{core::num} super.{self::Base::numProp2} = self::getNum() : #t5{core::num};
+    core::num v6 = let final core::num? #t6 = super.{self::Base::numProp2} in #t6 == null ?{core::num} super.{self::Base::numProp2} = self::getDouble() : #t6{core::num};
+    core::num v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final core::num #t7 = super.{self::Base::numProp} in let final core::num #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+  }
+}
+class Test3 extends self::Base {
+  synthetic constructor •() → self::Test3
+    : super self::Base::•()
+    ;
+  method test3() → void {
+    core::double v3 = super.{self::Base::doubleProp} = self::getDouble();
+    core::double v6 = let final core::double? #t9 = super.{self::Base::doubleProp2} in #t9 == null ?{core::double} super.{self::Base::doubleProp2} = self::getDouble() : #t9{core::double};
+    core::double v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final core::double #t10 = super.{self::Base::doubleProp} in let final core::double #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart
index e3c79e3..48ffd3a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -13,26 +15,26 @@
   int prop;
 
   static void test(Test1 t) {
-    var /*@ type=int* */ v1 = t. /*@target=Test1.prop*/ prop = getInt();
-    var /*@ type=num* */ v2 = t. /*@target=Test1.prop*/ prop = getNum();
-    var /*@ type=int* */ v4 = /*@ type=Test1* */ /*@target=Test1.prop*/ t
+    var /*@type=int**/ v1 = t. /*@target=Test1.prop*/ prop = getInt();
+    var /*@type=num**/ v2 = t. /*@target=Test1.prop*/ prop = getNum();
+    var /*@type=int**/ v4 = /*@type=Test1**/ /*@target=Test1.prop*/ t
             . /*@target=Test1.prop*/ prop
          ??= getInt();
-    var /*@ type=num* */ v5 = /*@ type=Test1* */ /*@target=Test1.prop*/ t
+    var /*@type=num**/ v5 = /*@type=Test1**/ /*@target=Test1.prop*/ t
             . /*@target=Test1.prop*/ prop
          ??= getNum();
-    var /*@ type=int* */ v7 = /*@ type=Test1* */ t
+    var /*@type=int**/ v7 = /*@type=Test1**/ t
             . /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
         /*@target=num.+*/ += getInt();
-    var /*@ type=num* */ v8 = /*@ type=Test1* */ t
+    var /*@type=num**/ v8 = /*@type=Test1**/ t
             . /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop
         /*@target=num.+*/ += getNum();
-    var /*@ type=int* */ v10 = /*@target=num.+*/ ++ /*@ type=Test1* */ t
+    var /*@type=int**/ v10 = /*@target=num.+*/ ++ /*@type=Test1**/ t
         . /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop;
-    var /*@ type=int* */ v11 =
-        /*@ type=Test1* */ t
-            . /*@ type=int* */ /*@target=Test1.prop*/ /*@target=Test1.prop*/
-            /*@ type=int* */ prop /*@target=num.+*/ ++;
+    var /*@type=int**/ v11 =
+        /*@type=Test1**/ t
+            . /*@type=int**/ /*@target=Test1.prop*/ /*@target=Test1.prop*/
+            /*@type=int**/ prop /*@target=num.+*/ ++;
   }
 }
 
@@ -40,33 +42,33 @@
   num prop;
 
   static void test(Test2 t) {
-    var /*@ type=int* */ v1 = t. /*@target=Test2.prop*/ prop = getInt();
-    var /*@ type=num* */ v2 = t. /*@target=Test2.prop*/ prop = getNum();
-    var /*@ type=double* */ v3 = t. /*@target=Test2.prop*/ prop = getDouble();
-    var /*@ type=num* */ v4 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
+    var /*@type=int**/ v1 = t. /*@target=Test2.prop*/ prop = getInt();
+    var /*@type=num**/ v2 = t. /*@target=Test2.prop*/ prop = getNum();
+    var /*@type=double**/ v3 = t. /*@target=Test2.prop*/ prop = getDouble();
+    var /*@type=num**/ v4 = /*@type=Test2**/ /*@target=Test2.prop*/ t
             . /*@target=Test2.prop*/ prop
          ??= getInt();
-    var /*@ type=num* */ v5 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
+    var /*@type=num**/ v5 = /*@type=Test2**/ /*@target=Test2.prop*/ t
             . /*@target=Test2.prop*/ prop
          ??= getNum();
-    var /*@ type=num* */ v6 = /*@ type=Test2* */ /*@target=Test2.prop*/ t
+    var /*@type=num**/ v6 = /*@type=Test2**/ /*@target=Test2.prop*/ t
             . /*@target=Test2.prop*/ prop
          ??= getDouble();
-    var /*@ type=num* */ v7 = /*@ type=Test2* */ t
+    var /*@type=num**/ v7 = /*@type=Test2**/ t
             . /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
         /*@target=num.+*/ += getInt();
-    var /*@ type=num* */ v8 = /*@ type=Test2* */ t
+    var /*@type=num**/ v8 = /*@type=Test2**/ t
             . /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
         /*@target=num.+*/ += getNum();
-    var /*@ type=num* */ v9 = /*@ type=Test2* */ t
+    var /*@type=num**/ v9 = /*@type=Test2**/ t
             . /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop
         /*@target=num.+*/ += getDouble();
-    var /*@ type=num* */ v10 = /*@target=num.+*/ ++ /*@ type=Test2* */ t
+    var /*@type=num**/ v10 = /*@target=num.+*/ ++ /*@type=Test2**/ t
         . /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop;
-    var /*@ type=num* */ v11 =
-        /*@ type=Test2* */ t
-            . /*@ type=num* */ /*@target=Test2.prop*/ /*@target=Test2.prop*/
-            /*@ type=num* */ prop /*@target=num.+*/ ++;
+    var /*@type=num**/ v11 =
+        /*@type=Test2**/ t
+            . /*@type=num**/ /*@target=Test2.prop*/ /*@target=Test2.prop*/
+            /*@type=num**/ prop /*@target=num.+*/ ++;
   }
 }
 
@@ -74,29 +76,29 @@
   double prop;
 
   static void test3(Test3 t) {
-    var /*@ type=num* */ v2 = t. /*@target=Test3.prop*/ prop = getNum();
-    var /*@ type=double* */ v3 = t. /*@target=Test3.prop*/ prop = getDouble();
-    var /*@ type=num* */ v5 = /*@ type=Test3* */ /*@target=Test3.prop*/ t
+    var /*@type=num**/ v2 = t. /*@target=Test3.prop*/ prop = getNum();
+    var /*@type=double**/ v3 = t. /*@target=Test3.prop*/ prop = getDouble();
+    var /*@type=num**/ v5 = /*@type=Test3**/ /*@target=Test3.prop*/ t
             . /*@target=Test3.prop*/ prop
          ??= getNum();
-    var /*@ type=double* */ v6 = /*@ type=Test3* */ /*@target=Test3.prop*/ t
+    var /*@type=double**/ v6 = /*@type=Test3**/ /*@target=Test3.prop*/ t
             . /*@target=Test3.prop*/ prop
          ??= getDouble();
-    var /*@ type=double* */ v7 = /*@ type=Test3* */ t
+    var /*@type=double**/ v7 = /*@type=Test3**/ t
             . /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
         /*@target=double.+*/ += getInt();
-    var /*@ type=double* */ v8 = /*@ type=Test3* */ t
+    var /*@type=double**/ v8 = /*@type=Test3**/ t
             . /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
         /*@target=double.+*/ += getNum();
-    var /*@ type=double* */ v9 = /*@ type=Test3* */ t
+    var /*@type=double**/ v9 = /*@type=Test3**/ t
             . /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop
         /*@target=double.+*/ += getDouble();
-    var /*@ type=double* */ v10 = /*@target=double.+*/ ++ /*@ type=Test3* */ t
+    var /*@type=double**/ v10 = /*@target=double.+*/ ++ /*@type=Test3**/ t
         . /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop;
-    var /*@ type=double* */ v11 =
-        /*@ type=Test3* */ t
-            . /*@ type=double* */ /*@target=Test3.prop*/ /*@target=Test3.prop*/
-            /*@ type=double* */ prop /*@target=double.+*/ ++;
+    var /*@type=double**/ v11 =
+        /*@type=Test3**/ t
+            . /*@type=double**/ /*@target=Test3.prop*/ /*@target=Test3.prop*/
+            /*@type=double**/ prop /*@target=double.+*/ ++;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart
new file mode 100644
index 0000000..724e061
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart
@@ -0,0 +1,87 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Test1 {
+  int prop = 0;
+  int? prop2;
+
+  static void test(Test1 t) {
+    var /*@type=int*/ v1 = t. /*@target=Test1.prop*/ prop = getInt();
+    var /*@type=int*/ v4 = /*@type=Test1*/ /*@target=Test1.prop2*/ t
+        . /*@target=Test1.prop2*/ prop2 ??= getInt();
+    var /*@type=int*/ v7 = /*@type=Test1*/ t
+            . /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop /*@target=num.+*/ +=
+        getInt();
+    var /*@type=int*/ v10 = /*@target=num.+*/ ++ /*@type=Test1*/ t
+        . /*@target=Test1.prop*/ /*@target=Test1.prop*/ prop;
+    var /*@type=int*/ v11 = /*@type=Test1*/ t
+        . /*@type=int*/ /*@target=Test1.prop*/ /*@target=Test1.prop*/
+        /*@type=int*/ prop /*@target=num.+*/ ++;
+  }
+}
+
+class Test2 {
+  num prop = 0;
+  num? prop2;
+
+  static void test(Test2 t) {
+    var /*@type=int*/ v1 = t. /*@target=Test2.prop*/ prop = getInt();
+    var /*@type=num*/ v2 = t. /*@target=Test2.prop*/ prop = getNum();
+    var /*@type=double*/ v3 = t. /*@target=Test2.prop*/ prop = getDouble();
+    var /*@type=num*/ v4 = /*@type=Test2*/ /*@target=Test2.prop2*/ t
+        . /*@target=Test2.prop2*/ prop2 ??= getInt();
+    var /*@type=num*/ v5 = /*@type=Test2*/ /*@target=Test2.prop2*/ t
+        . /*@target=Test2.prop2*/ prop2 ??= getNum();
+    var /*@type=num*/ v6 = /*@type=Test2*/ /*@target=Test2.prop2*/ t
+        . /*@target=Test2.prop2*/ prop2 ??= getDouble();
+    var /*@type=num*/ v7 = /*@type=Test2*/ t
+            . /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop /*@target=num.+*/ +=
+        getInt();
+    var /*@type=num*/ v8 = /*@type=Test2*/ t
+            . /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop /*@target=num.+*/ +=
+        getNum();
+    var /*@type=double*/ v9 = /*@type=Test2*/ t
+            . /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop /*@target=num.+*/ +=
+        getDouble();
+    var /*@type=num*/ v10 = /*@target=num.+*/ ++ /*@type=Test2*/ t
+        . /*@target=Test2.prop*/ /*@target=Test2.prop*/ prop;
+    var /*@type=num*/ v11 = /*@type=Test2*/ t
+        . /*@type=num*/ /*@target=Test2.prop*/ /*@target=Test2.prop*/
+        /*@type=num*/ prop /*@target=num.+*/ ++;
+  }
+}
+
+class Test3 {
+  double prop = 0;
+  double? prop2;
+
+  static void test3(Test3 t) {
+    var /*@type=double*/ v3 = t. /*@target=Test3.prop*/ prop = getDouble();
+    var /*@type=double*/ v6 = /*@type=Test3*/ /*@target=Test3.prop2*/ t
+        . /*@target=Test3.prop2*/ prop2 ??= getDouble();
+    var /*@type=double*/ v7 = /*@type=Test3*/ t
+            . /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop /*@target=double.+*/ +=
+        getInt();
+    var /*@type=double*/ v8 = /*@type=Test3*/ t
+            . /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop /*@target=double.+*/ +=
+        getNum();
+    var /*@type=double*/ v9 = /*@type=Test3*/ t
+            . /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop /*@target=double.+*/ +=
+        getDouble();
+    var /*@type=double*/ v10 = /*@target=double.+*/ ++ /*@type=Test3*/ t
+        . /*@target=Test3.prop*/ /*@target=Test3.prop*/ prop;
+    var /*@type=double*/ v11 = /*@type=Test3*/ t
+        . /*@type=double*/ /*@target=Test3.prop*/ /*@target=Test3.prop*/
+        /*@type=double*/ prop /*@target=double.+*/ ++;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.textual_outline.expect
new file mode 100644
index 0000000..c8a6c11
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.textual_outline.expect
@@ -0,0 +1,25 @@
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+class Test1 {
+  int prop = 0;
+  int? prop2;
+  static void test(Test1 t) {}
+}
+
+class Test2 {
+  num prop = 0;
+  num? prop2;
+  static void test(Test2 t) {}
+}
+
+class Test3 {
+  double prop = 0;
+  double? prop2;
+  static void test3(Test3 t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..473c5d4
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.textual_outline_modelled.expect
@@ -0,0 +1,24 @@
+library test;
+
+class Test1 {
+  int? prop2;
+  int prop = 0;
+  static void test(Test1 t) {}
+}
+
+class Test2 {
+  num? prop2;
+  num prop = 0;
+  static void test(Test2 t) {}
+}
+
+class Test3 {
+  double? prop2;
+  double prop = 0;
+  static void test3(Test3 t) {}
+}
+
+double getDouble() => 0.0;
+int getInt() => 0;
+main() {}
+num getNum() => 0;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.weak.expect
new file mode 100644
index 0000000..e4784b6
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.weak.expect
@@ -0,0 +1,61 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int prop = 0;
+  field core::int? prop2 = null;
+  synthetic constructor •() → self::Test1
+    : super core::Object::•()
+    ;
+  static method test(self::Test1 t) → void {
+    core::int v1 = t.{self::Test1::prop} = self::getInt();
+    core::int v4 = let final self::Test1 #t1 = t in let final core::int? #t2 = #t1.{self::Test1::prop2}{core::int?} in #t2 == null ?{core::int} #t1.{self::Test1::prop2} = self::getInt() : #t2{core::int};
+    core::int v7 = let final self::Test1 #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = let final self::Test1 #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final self::Test1 #t5 = t in let final core::int #t6 = #t5.{self::Test1::prop}{core::int} in let final core::int #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1){(core::num) → core::int} in #t6;
+  }
+}
+class Test2 extends core::Object {
+  field core::num prop = 0;
+  field core::num? prop2 = null;
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  static method test(self::Test2 t) → void {
+    core::int v1 = t.{self::Test2::prop} = self::getInt();
+    core::num v2 = t.{self::Test2::prop} = self::getNum();
+    core::double v3 = t.{self::Test2::prop} = self::getDouble();
+    core::num v4 = let final self::Test2 #t8 = t in let final core::num? #t9 = #t8.{self::Test2::prop2}{core::num?} in #t9 == null ?{core::num} #t8.{self::Test2::prop2} = self::getInt() : #t9{core::num};
+    core::num v5 = let final self::Test2 #t10 = t in let final core::num? #t11 = #t10.{self::Test2::prop2}{core::num?} in #t11 == null ?{core::num} #t10.{self::Test2::prop2} = self::getNum() : #t11{core::num};
+    core::num v6 = let final self::Test2 #t12 = t in let final core::num? #t13 = #t12.{self::Test2::prop2}{core::num?} in #t13 == null ?{core::num} #t12.{self::Test2::prop2} = self::getDouble() : #t13{core::num};
+    core::num v7 = let final self::Test2 #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = let final self::Test2 #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = let final self::Test2 #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = let final self::Test2 #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final self::Test2 #t18 = t in let final core::num #t19 = #t18.{self::Test2::prop}{core::num} in let final core::num #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1){(core::num) → core::num} in #t19;
+  }
+}
+class Test3 extends core::Object {
+  field core::double prop = 0.0;
+  field core::double? prop2 = null;
+  synthetic constructor •() → self::Test3
+    : super core::Object::•()
+    ;
+  static method test3(self::Test3 t) → void {
+    core::double v3 = t.{self::Test3::prop} = self::getDouble();
+    core::double v6 = let final self::Test3 #t21 = t in let final core::double? #t22 = #t21.{self::Test3::prop2}{core::double?} in #t22 == null ?{core::double} #t21.{self::Test3::prop2} = self::getDouble() : #t22{core::double};
+    core::double v7 = let final self::Test3 #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = let final self::Test3 #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = let final self::Test3 #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = let final self::Test3 #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}{core::double}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final self::Test3 #t27 = t in let final core::double #t28 = #t27.{self::Test3::prop}{core::double} in let final core::double #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1){(core::num) → core::double} in #t28;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.weak.modular.expect
new file mode 100644
index 0000000..e4784b6
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int prop = 0;
+  field core::int? prop2 = null;
+  synthetic constructor •() → self::Test1
+    : super core::Object::•()
+    ;
+  static method test(self::Test1 t) → void {
+    core::int v1 = t.{self::Test1::prop} = self::getInt();
+    core::int v4 = let final self::Test1 #t1 = t in let final core::int? #t2 = #t1.{self::Test1::prop2}{core::int?} in #t2 == null ?{core::int} #t1.{self::Test1::prop2} = self::getInt() : #t2{core::int};
+    core::int v7 = let final self::Test1 #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = let final self::Test1 #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final self::Test1 #t5 = t in let final core::int #t6 = #t5.{self::Test1::prop}{core::int} in let final core::int #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1){(core::num) → core::int} in #t6;
+  }
+}
+class Test2 extends core::Object {
+  field core::num prop = 0;
+  field core::num? prop2 = null;
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  static method test(self::Test2 t) → void {
+    core::int v1 = t.{self::Test2::prop} = self::getInt();
+    core::num v2 = t.{self::Test2::prop} = self::getNum();
+    core::double v3 = t.{self::Test2::prop} = self::getDouble();
+    core::num v4 = let final self::Test2 #t8 = t in let final core::num? #t9 = #t8.{self::Test2::prop2}{core::num?} in #t9 == null ?{core::num} #t8.{self::Test2::prop2} = self::getInt() : #t9{core::num};
+    core::num v5 = let final self::Test2 #t10 = t in let final core::num? #t11 = #t10.{self::Test2::prop2}{core::num?} in #t11 == null ?{core::num} #t10.{self::Test2::prop2} = self::getNum() : #t11{core::num};
+    core::num v6 = let final self::Test2 #t12 = t in let final core::num? #t13 = #t12.{self::Test2::prop2}{core::num?} in #t13 == null ?{core::num} #t12.{self::Test2::prop2} = self::getDouble() : #t13{core::num};
+    core::num v7 = let final self::Test2 #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = let final self::Test2 #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = let final self::Test2 #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = let final self::Test2 #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final self::Test2 #t18 = t in let final core::num #t19 = #t18.{self::Test2::prop}{core::num} in let final core::num #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1){(core::num) → core::num} in #t19;
+  }
+}
+class Test3 extends core::Object {
+  field core::double prop = 0.0;
+  field core::double? prop2 = null;
+  synthetic constructor •() → self::Test3
+    : super core::Object::•()
+    ;
+  static method test3(self::Test3 t) → void {
+    core::double v3 = t.{self::Test3::prop} = self::getDouble();
+    core::double v6 = let final self::Test3 #t21 = t in let final core::double? #t22 = #t21.{self::Test3::prop2}{core::double?} in #t22 == null ?{core::double} #t21.{self::Test3::prop2} = self::getDouble() : #t22{core::double};
+    core::double v7 = let final self::Test3 #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = let final self::Test3 #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = let final self::Test3 #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = let final self::Test3 #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}{core::double}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final self::Test3 #t27 = t in let final core::double #t28 = #t27.{self::Test3::prop}{core::double} in let final core::double #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1){(core::num) → core::double} in #t28;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.weak.outline.expect
new file mode 100644
index 0000000..fd3445a
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int prop;
+  field core::int? prop2;
+  synthetic constructor •() → self::Test1
+    ;
+  static method test(self::Test1 t) → void
+    ;
+}
+class Test2 extends core::Object {
+  field core::num prop;
+  field core::num? prop2;
+  synthetic constructor •() → self::Test2
+    ;
+  static method test(self::Test2 t) → void
+    ;
+}
+class Test3 extends core::Object {
+  field core::double prop;
+  field core::double? prop2;
+  synthetic constructor •() → self::Test3
+    ;
+  static method test3(self::Test3 t) → void
+    ;
+}
+static method getInt() → core::int
+  ;
+static method getNum() → core::num
+  ;
+static method getDouble() → core::double
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.weak.transformed.expect
new file mode 100644
index 0000000..e4784b6
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards2.dart.weak.transformed.expect
@@ -0,0 +1,61 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int prop = 0;
+  field core::int? prop2 = null;
+  synthetic constructor •() → self::Test1
+    : super core::Object::•()
+    ;
+  static method test(self::Test1 t) → void {
+    core::int v1 = t.{self::Test1::prop} = self::getInt();
+    core::int v4 = let final self::Test1 #t1 = t in let final core::int? #t2 = #t1.{self::Test1::prop2}{core::int?} in #t2 == null ?{core::int} #t1.{self::Test1::prop2} = self::getInt() : #t2{core::int};
+    core::int v7 = let final self::Test1 #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
+    core::int v10 = let final self::Test1 #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    core::int v11 = let final self::Test1 #t5 = t in let final core::int #t6 = #t5.{self::Test1::prop}{core::int} in let final core::int #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1){(core::num) → core::int} in #t6;
+  }
+}
+class Test2 extends core::Object {
+  field core::num prop = 0;
+  field core::num? prop2 = null;
+  synthetic constructor •() → self::Test2
+    : super core::Object::•()
+    ;
+  static method test(self::Test2 t) → void {
+    core::int v1 = t.{self::Test2::prop} = self::getInt();
+    core::num v2 = t.{self::Test2::prop} = self::getNum();
+    core::double v3 = t.{self::Test2::prop} = self::getDouble();
+    core::num v4 = let final self::Test2 #t8 = t in let final core::num? #t9 = #t8.{self::Test2::prop2}{core::num?} in #t9 == null ?{core::num} #t8.{self::Test2::prop2} = self::getInt() : #t9{core::num};
+    core::num v5 = let final self::Test2 #t10 = t in let final core::num? #t11 = #t10.{self::Test2::prop2}{core::num?} in #t11 == null ?{core::num} #t10.{self::Test2::prop2} = self::getNum() : #t11{core::num};
+    core::num v6 = let final self::Test2 #t12 = t in let final core::num? #t13 = #t12.{self::Test2::prop2}{core::num?} in #t13 == null ?{core::num} #t12.{self::Test2::prop2} = self::getDouble() : #t13{core::num};
+    core::num v7 = let final self::Test2 #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
+    core::num v8 = let final self::Test2 #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
+    core::double v9 = let final self::Test2 #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
+    core::num v10 = let final self::Test2 #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num}.{core::num::+}(1){(core::num) → core::num};
+    core::num v11 = let final self::Test2 #t18 = t in let final core::num #t19 = #t18.{self::Test2::prop}{core::num} in let final core::num #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1){(core::num) → core::num} in #t19;
+  }
+}
+class Test3 extends core::Object {
+  field core::double prop = 0.0;
+  field core::double? prop2 = null;
+  synthetic constructor •() → self::Test3
+    : super core::Object::•()
+    ;
+  static method test3(self::Test3 t) → void {
+    core::double v3 = t.{self::Test3::prop} = self::getDouble();
+    core::double v6 = let final self::Test3 #t21 = t in let final core::double? #t22 = #t21.{self::Test3::prop2}{core::double?} in #t22 == null ?{core::double} #t21.{self::Test3::prop2} = self::getDouble() : #t22{core::double};
+    core::double v7 = let final self::Test3 #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double};
+    core::double v8 = let final self::Test3 #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double};
+    core::double v9 = let final self::Test3 #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
+    core::double v10 = let final self::Test3 #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}{core::double}.{core::double::+}(1){(core::num) → core::double};
+    core::double v11 = let final self::Test3 #t27 = t in let final core::double #t28 = #t27.{self::Test3::prop}{core::double} in let final core::double #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1){(core::num) → core::double} in #t28;
+  }
+}
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart
index 46289ff..78584f1 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A {
-  int f;
+  int f = 0;
 }
 
 A a = new A();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.textual_outline.expect
index 5bccd027..4f8c497 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class A {
-  int f;
+  int f = 0;
 }
 
 A a = new A();
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.textual_outline_modelled.expect
index 5f20dcf..7428928 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 A a = new A();
 
 class A {
-  int f;
+  int f = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.expect
index e2c5e19..13277c8 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* f = null;
-  synthetic constructor •() → self::A*
+  field core::int f = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field core::int* b = self::a.{self::A::f} = 1;
-static field core::int* c = 0;
-static field core::int* d = self::c = 1;
+static field self::A a = new self::A::•();
+static field core::int b = self::a.{self::A::f} = 1;
+static field core::int c = 0;
+static field core::int d = self::c = 1;
 static method main() → dynamic {
   self::a;
   self::b;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.modular.expect
index e2c5e19..13277c8 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* f = null;
-  synthetic constructor •() → self::A*
+  field core::int f = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field core::int* b = self::a.{self::A::f} = 1;
-static field core::int* c = 0;
-static field core::int* d = self::c = 1;
+static field self::A a = new self::A::•();
+static field core::int b = self::a.{self::A::f} = 1;
+static field core::int c = 0;
+static field core::int d = self::c = 1;
 static method main() → dynamic {
   self::a;
   self::b;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.outline.expect
index 4a1b7e3..d0de032 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* f;
-  synthetic constructor •() → self::A*
+  field core::int f;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a;
-static field core::int* b;
-static field core::int* c;
-static field core::int* d;
+static field self::A a;
+static field core::int b;
+static field core::int c;
+static field core::int d;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.transformed.expect
index e2c5e19..13277c8 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* f = null;
-  synthetic constructor •() → self::A*
+  field core::int f = 0;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field core::int* b = self::a.{self::A::f} = 1;
-static field core::int* c = 0;
-static field core::int* d = self::c = 1;
+static field self::A a = new self::A::•();
+static field core::int b = self::a.{self::A::f} = 1;
+static field core::int c = 0;
+static field core::int d = self::c = 1;
 static method main() → dynamic {
   self::a;
   self::b;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart
index c09b270..c457353 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart
new file mode 100644
index 0000000..834b333
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart
@@ -0,0 +1,88 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+
+  static B staticVariable = throw '';
+  static B? staticVariable2;
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+
+B topLevelVariable = throw '';
+B? topLevelVariable2;
+
+void test_topLevelVariable() {
+  topLevelVariable = /*@typeArgs=B*/ f();
+
+  topLevelVariable2 ??= /*@typeArgs=B?*/ f();
+
+  topLevelVariable /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+  topLevelVariable /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+  topLevelVariable /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+  /*@target=B.-*/ --topLevelVariable;
+
+  topLevelVariable /*@target=B.-*/ --;
+
+  var /*@type=B*/ v1 = topLevelVariable = /*@typeArgs=B*/ f();
+
+  var /*@type=B?*/ v2 = topLevelVariable2 ??= /*@typeArgs=B?*/ f();
+
+  var /*@type=B*/ v3 = topLevelVariable /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+  var /*@type=B*/ v4 = topLevelVariable /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+  var /*@type=C*/ v5 = topLevelVariable /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+  var /*@type=B*/ v6 = /*@target=B.-*/ --topLevelVariable;
+
+  var /*@type=B*/ v7 = /*@type=B*/ topLevelVariable /*@type=B*/ /*@target=B.-*/ --;
+}
+
+void test_staticVariable() {
+  B.staticVariable = /*@typeArgs=B*/ f();
+
+  B.staticVariable2 ??= /*@typeArgs=B?*/ f();
+
+  B.staticVariable /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+  B.staticVariable /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+  B.staticVariable /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+  /*@target=B.-*/ --B.staticVariable;
+
+  B.staticVariable /*@target=B.-*/ --;
+
+  var /*@type=B*/ v1 = B.staticVariable = /*@typeArgs=B*/ f();
+
+  var /*@type=B?*/ v2 = B.staticVariable2 ??= /*@typeArgs=B?*/ f();
+
+  var /*@type=B*/ v3 = B.staticVariable /*@target=B.+*/ += /*@typeArgs=C*/ f();
+
+  var /*@type=B*/ v4 = B.staticVariable /*@target=B.**/ *= /*@typeArgs=B*/ f();
+
+  var /*@type=C*/ v5 = B.staticVariable /*@target=B.&*/ &= /*@typeArgs=A*/ f();
+
+  var /*@type=B*/ v6 = /*@target=B.-*/ --B.staticVariable;
+
+  var /*@type=B*/ v7 =
+      B. /*@type=B*/ staticVariable /*@type=B*/ /*@target=B.-*/ --;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.textual_outline.expect
new file mode 100644
index 0000000..ac69ece
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.textual_outline.expect
@@ -0,0 +1,21 @@
+library test;
+
+class A {}
+
+class B extends A {
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  B operator *(B v) => throw '';
+  C operator &(A v) => throw '';
+  static B staticVariable = throw '';
+  static B? staticVariable2;
+}
+
+class C extends B {}
+
+T f<T>() => throw '';
+B topLevelVariable = throw '';
+B? topLevelVariable2;
+void test_topLevelVariable() {}
+void test_staticVariable() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..dfd2d70
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.textual_outline_modelled.expect
@@ -0,0 +1,22 @@
+library test;
+
+B? topLevelVariable2;
+B topLevelVariable = throw '';
+T f<T>() => throw '';
+
+class A {}
+
+class B extends A {
+  B operator *(B v) => throw '';
+  B operator +(C v) => throw '';
+  B operator -(int i) => throw '';
+  C operator &(A v) => throw '';
+  static B? staticVariable2;
+  static B staticVariable = throw '';
+}
+
+class C extends B {}
+
+main() {}
+void test_staticVariable() {}
+void test_topLevelVariable() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.weak.expect
new file mode 100644
index 0000000..3551711
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.weak.expect
@@ -0,0 +1,66 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  static field self::B staticVariable = throw "";
+  static field self::B? staticVariable2 = null;
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static field self::B topLevelVariable = throw "";
+static field self::B? topLevelVariable2;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test_topLevelVariable() → void {
+  self::topLevelVariable = self::f<self::B>();
+  self::topLevelVariable2 == null ?{self::B?} self::topLevelVariable2 = self::f<self::B?>() : null;
+  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = self::topLevelVariable = self::f<self::B>();
+  self::B? v2 = let final self::B? #t1 = self::topLevelVariable2 in #t1 == null ?{self::B?} self::topLevelVariable2 = self::f<self::B?>() : #t1{self::B};
+  self::B v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t2 = self::topLevelVariable in let final self::B #t3 = self::topLevelVariable = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+}
+static method test_staticVariable() → void {
+  self::B::staticVariable = self::f<self::B>();
+  self::B::staticVariable2 == null ?{self::B?} self::B::staticVariable2 = self::f<self::B?>() : null;
+  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = self::B::staticVariable = self::f<self::B>();
+  self::B? v2 = let final self::B? #t4 = self::B::staticVariable2 in #t4 == null ?{self::B?} self::B::staticVariable2 = self::f<self::B?>() : #t4{self::B};
+  self::B v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t5 = self::B::staticVariable in let final self::B #t6 = self::B::staticVariable = #t5.{self::B::-}(1){(core::int) → self::B} in #t5;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.weak.modular.expect
new file mode 100644
index 0000000..3551711
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  static field self::B staticVariable = throw "";
+  static field self::B? staticVariable2 = null;
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static field self::B topLevelVariable = throw "";
+static field self::B? topLevelVariable2;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test_topLevelVariable() → void {
+  self::topLevelVariable = self::f<self::B>();
+  self::topLevelVariable2 == null ?{self::B?} self::topLevelVariable2 = self::f<self::B?>() : null;
+  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = self::topLevelVariable = self::f<self::B>();
+  self::B? v2 = let final self::B? #t1 = self::topLevelVariable2 in #t1 == null ?{self::B?} self::topLevelVariable2 = self::f<self::B?>() : #t1{self::B};
+  self::B v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t2 = self::topLevelVariable in let final self::B #t3 = self::topLevelVariable = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+}
+static method test_staticVariable() → void {
+  self::B::staticVariable = self::f<self::B>();
+  self::B::staticVariable2 == null ?{self::B?} self::B::staticVariable2 = self::f<self::B?>() : null;
+  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = self::B::staticVariable = self::f<self::B>();
+  self::B? v2 = let final self::B? #t4 = self::B::staticVariable2 in #t4 == null ?{self::B?} self::B::staticVariable2 = self::f<self::B?>() : #t4{self::B};
+  self::B v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t5 = self::B::staticVariable in let final self::B #t6 = self::B::staticVariable = #t5.{self::B::-}(1){(core::int) → self::B} in #t5;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.weak.outline.expect
new file mode 100644
index 0000000..a06bbd0
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  static field self::B staticVariable;
+  static field self::B? staticVariable2;
+  synthetic constructor •() → self::B
+    ;
+  operator +(self::C v) → self::B
+    ;
+  operator -(core::int i) → self::B
+    ;
+  operator *(self::B v) → self::B
+    ;
+  operator &(self::A v) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+static field self::B topLevelVariable;
+static field self::B? topLevelVariable2;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  ;
+static method test_topLevelVariable() → void
+  ;
+static method test_staticVariable() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.weak.transformed.expect
new file mode 100644
index 0000000..3551711
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static2.dart.weak.transformed.expect
@@ -0,0 +1,66 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  static field self::B staticVariable = throw "";
+  static field self::B? staticVariable2 = null;
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator +(self::C v) → self::B
+    return throw "";
+  operator -(core::int i) → self::B
+    return throw "";
+  operator *(self::B v) → self::B
+    return throw "";
+  operator &(self::A v) → self::C
+    return throw "";
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static field self::B topLevelVariable = throw "";
+static field self::B? topLevelVariable2;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test_topLevelVariable() → void {
+  self::topLevelVariable = self::f<self::B>();
+  self::topLevelVariable2 == null ?{self::B?} self::topLevelVariable2 = self::f<self::B?>() : null;
+  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = self::topLevelVariable = self::f<self::B>();
+  self::B? v2 = let final self::B? #t1 = self::topLevelVariable2 in #t1 == null ?{self::B?} self::topLevelVariable2 = self::f<self::B?>() : #t1{self::B};
+  self::B v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t2 = self::topLevelVariable in let final self::B #t3 = self::topLevelVariable = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
+}
+static method test_staticVariable() → void {
+  self::B::staticVariable = self::f<self::B>();
+  self::B::staticVariable2 == null ?{self::B?} self::B::staticVariable2 = self::f<self::B?>() : null;
+  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v1 = self::B::staticVariable = self::f<self::B>();
+  self::B? v2 = let final self::B? #t4 = self::B::staticVariable2 in #t4 == null ?{self::B?} self::B::staticVariable2 = self::f<self::B?>() : #t4{self::B};
+  self::B v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
+  self::B v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
+  self::C v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
+  self::B v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int) → self::B};
+  self::B v7 = let final self::B #t5 = self::B::staticVariable in let final self::B #t6 = self::B::staticVariable = #t5.{self::B::-}(1){(core::int) → self::B} in #t5;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart
index 237f648..0333989 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart
new file mode 100644
index 0000000..4b8caca
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart
@@ -0,0 +1,71 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+
+int topLevelInt = 0;
+int? topLevelInt2;
+num topLevelNum = 0;
+num? topLevelNum2;
+double topLevelDouble = 0;
+double? topLevelDouble2;
+
+void test1() {
+  var /*@type=int*/ v1 = topLevelInt = getInt();
+
+  var /*@type=int*/ v4 = topLevelInt2 ??= getInt();
+
+  var /*@type=int*/ v7 = topLevelInt /*@target=num.+*/ += getInt();
+
+  var /*@type=int*/ v10 = /*@target=num.+*/ ++topLevelInt;
+
+  var /*@type=int*/ v11 = /*@type=int*/ topLevelInt /*@type=int*/ /*@target=num.+*/ ++;
+}
+
+void test2() {
+  var /*@type=int*/ v1 = topLevelNum = getInt();
+
+  var /*@type=num*/ v2 = topLevelNum = getNum();
+
+  var /*@type=double*/ v3 = topLevelNum = getDouble();
+
+  var /*@type=num*/ v4 = topLevelNum2 ??= getInt();
+
+  var /*@type=num*/ v5 = topLevelNum2 ??= getNum();
+
+  var /*@type=num*/ v6 = topLevelNum2 ??= getDouble();
+
+  var /*@type=num*/ v7 = topLevelNum /*@target=num.+*/ += getInt();
+
+  var /*@type=num*/ v8 = topLevelNum /*@target=num.+*/ += getNum();
+
+  var /*@type=double*/ v9 = topLevelNum /*@target=num.+*/ += getDouble();
+
+  var /*@type=num*/ v10 = /*@target=num.+*/ ++topLevelNum;
+
+  var /*@type=num*/ v11 = /*@type=num*/ topLevelNum /*@type=num*/ /*@target=num.+*/ ++;
+}
+
+void test3() {
+  var /*@type=double*/ v3 = topLevelDouble = getDouble();
+
+  var /*@type=double*/ v6 = topLevelDouble2 ??= getDouble();
+
+  var /*@type=double*/ v7 = topLevelDouble /*@target=double.+*/ += getInt();
+
+  var /*@type=double*/ v8 = topLevelDouble /*@target=double.+*/ += getNum();
+
+  var /*@type=double*/ v9 = topLevelDouble /*@target=double.+*/ += getDouble();
+
+  var /*@type=double*/ v10 = /*@target=double.+*/ ++topLevelDouble;
+
+  var /*@type=double*/ v11 = /*@type=double*/ topLevelDouble /*@type=double*/ /*@target=double.+*/ ++;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.textual_outline.expect
new file mode 100644
index 0000000..a9a31ea
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+library test;
+
+int getInt() => 0;
+num getNum() => 0;
+double getDouble() => 0.0;
+int topLevelInt = 0;
+int? topLevelInt2;
+num topLevelNum = 0;
+num? topLevelNum2;
+double topLevelDouble = 0;
+double? topLevelDouble2;
+void test1() {}
+void test2() {}
+void test3() {}
+main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2d4dbdf
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+library test;
+
+double? topLevelDouble2;
+double getDouble() => 0.0;
+double topLevelDouble = 0;
+int? topLevelInt2;
+int getInt() => 0;
+int topLevelInt = 0;
+main() {}
+num? topLevelNum2;
+num getNum() => 0;
+num topLevelNum = 0;
+void test1() {}
+void test2() {}
+void test3() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.weak.expect
new file mode 100644
index 0000000..4aa81b0
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.weak.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static field core::int topLevelInt = 0;
+static field core::int? topLevelInt2;
+static field core::num topLevelNum = 0;
+static field core::num? topLevelNum2;
+static field core::double topLevelDouble = 0.0;
+static field core::double? topLevelDouble2;
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method test1() → void {
+  core::int v1 = self::topLevelInt = self::getInt();
+  core::int v4 = let final core::int? #t1 = self::topLevelInt2 in #t1 == null ?{core::int} self::topLevelInt2 = self::getInt() : #t1{core::int};
+  core::int v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num) → core::int};
+  core::int v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num) → core::int};
+  core::int v11 = let final core::int #t2 = self::topLevelInt in let final core::int #t3 = self::topLevelInt = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+}
+static method test2() → void {
+  core::int v1 = self::topLevelNum = self::getInt();
+  core::num v2 = self::topLevelNum = self::getNum();
+  core::double v3 = self::topLevelNum = self::getDouble();
+  core::num v4 = let final core::num? #t4 = self::topLevelNum2 in #t4 == null ?{core::num} self::topLevelNum2 = self::getInt() : #t4{core::num};
+  core::num v5 = let final core::num? #t5 = self::topLevelNum2 in #t5 == null ?{core::num} self::topLevelNum2 = self::getNum() : #t5{core::num};
+  core::num v6 = let final core::num? #t6 = self::topLevelNum2 in #t6 == null ?{core::num} self::topLevelNum2 = self::getDouble() : #t6{core::num};
+  core::num v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num) → core::num};
+  core::num v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num) → core::num};
+  core::double v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num) → core::double};
+  core::num v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num) → core::num};
+  core::num v11 = let final core::num #t7 = self::topLevelNum in let final core::num #t8 = self::topLevelNum = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+}
+static method test3() → void {
+  core::double v3 = self::topLevelDouble = self::getDouble();
+  core::double v6 = let final core::double? #t9 = self::topLevelDouble2 in #t9 == null ?{core::double} self::topLevelDouble2 = self::getDouble() : #t9{core::double};
+  core::double v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num) → core::double};
+  core::double v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num) → core::double};
+  core::double v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num) → core::double};
+  core::double v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num) → core::double};
+  core::double v11 = let final core::double #t10 = self::topLevelDouble in let final core::double #t11 = self::topLevelDouble = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.weak.modular.expect
new file mode 100644
index 0000000..4aa81b0
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static field core::int topLevelInt = 0;
+static field core::int? topLevelInt2;
+static field core::num topLevelNum = 0;
+static field core::num? topLevelNum2;
+static field core::double topLevelDouble = 0.0;
+static field core::double? topLevelDouble2;
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method test1() → void {
+  core::int v1 = self::topLevelInt = self::getInt();
+  core::int v4 = let final core::int? #t1 = self::topLevelInt2 in #t1 == null ?{core::int} self::topLevelInt2 = self::getInt() : #t1{core::int};
+  core::int v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num) → core::int};
+  core::int v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num) → core::int};
+  core::int v11 = let final core::int #t2 = self::topLevelInt in let final core::int #t3 = self::topLevelInt = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+}
+static method test2() → void {
+  core::int v1 = self::topLevelNum = self::getInt();
+  core::num v2 = self::topLevelNum = self::getNum();
+  core::double v3 = self::topLevelNum = self::getDouble();
+  core::num v4 = let final core::num? #t4 = self::topLevelNum2 in #t4 == null ?{core::num} self::topLevelNum2 = self::getInt() : #t4{core::num};
+  core::num v5 = let final core::num? #t5 = self::topLevelNum2 in #t5 == null ?{core::num} self::topLevelNum2 = self::getNum() : #t5{core::num};
+  core::num v6 = let final core::num? #t6 = self::topLevelNum2 in #t6 == null ?{core::num} self::topLevelNum2 = self::getDouble() : #t6{core::num};
+  core::num v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num) → core::num};
+  core::num v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num) → core::num};
+  core::double v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num) → core::double};
+  core::num v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num) → core::num};
+  core::num v11 = let final core::num #t7 = self::topLevelNum in let final core::num #t8 = self::topLevelNum = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+}
+static method test3() → void {
+  core::double v3 = self::topLevelDouble = self::getDouble();
+  core::double v6 = let final core::double? #t9 = self::topLevelDouble2 in #t9 == null ?{core::double} self::topLevelDouble2 = self::getDouble() : #t9{core::double};
+  core::double v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num) → core::double};
+  core::double v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num) → core::double};
+  core::double v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num) → core::double};
+  core::double v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num) → core::double};
+  core::double v11 = let final core::double #t10 = self::topLevelDouble in let final core::double #t11 = self::topLevelDouble = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.weak.outline.expect
new file mode 100644
index 0000000..8cba366
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.weak.outline.expect
@@ -0,0 +1,24 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static field core::int topLevelInt;
+static field core::int? topLevelInt2;
+static field core::num topLevelNum;
+static field core::num? topLevelNum2;
+static field core::double topLevelDouble;
+static field core::double? topLevelDouble2;
+static method getInt() → core::int
+  ;
+static method getNum() → core::num
+  ;
+static method getDouble() → core::double
+  ;
+static method test1() → void
+  ;
+static method test2() → void
+  ;
+static method test3() → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.weak.transformed.expect
new file mode 100644
index 0000000..4aa81b0
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards2.dart.weak.transformed.expect
@@ -0,0 +1,46 @@
+library test /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static field core::int topLevelInt = 0;
+static field core::int? topLevelInt2;
+static field core::num topLevelNum = 0;
+static field core::num? topLevelNum2;
+static field core::double topLevelDouble = 0.0;
+static field core::double? topLevelDouble2;
+static method getInt() → core::int
+  return 0;
+static method getNum() → core::num
+  return 0;
+static method getDouble() → core::double
+  return 0.0;
+static method test1() → void {
+  core::int v1 = self::topLevelInt = self::getInt();
+  core::int v4 = let final core::int? #t1 = self::topLevelInt2 in #t1 == null ?{core::int} self::topLevelInt2 = self::getInt() : #t1{core::int};
+  core::int v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num) → core::int};
+  core::int v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num) → core::int};
+  core::int v11 = let final core::int #t2 = self::topLevelInt in let final core::int #t3 = self::topLevelInt = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
+}
+static method test2() → void {
+  core::int v1 = self::topLevelNum = self::getInt();
+  core::num v2 = self::topLevelNum = self::getNum();
+  core::double v3 = self::topLevelNum = self::getDouble();
+  core::num v4 = let final core::num? #t4 = self::topLevelNum2 in #t4 == null ?{core::num} self::topLevelNum2 = self::getInt() : #t4{core::num};
+  core::num v5 = let final core::num? #t5 = self::topLevelNum2 in #t5 == null ?{core::num} self::topLevelNum2 = self::getNum() : #t5{core::num};
+  core::num v6 = let final core::num? #t6 = self::topLevelNum2 in #t6 == null ?{core::num} self::topLevelNum2 = self::getDouble() : #t6{core::num};
+  core::num v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num) → core::num};
+  core::num v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num) → core::num};
+  core::double v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num) → core::double};
+  core::num v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num) → core::num};
+  core::num v11 = let final core::num #t7 = self::topLevelNum in let final core::num #t8 = self::topLevelNum = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
+}
+static method test3() → void {
+  core::double v3 = self::topLevelDouble = self::getDouble();
+  core::double v6 = let final core::double? #t9 = self::topLevelDouble2 in #t9 == null ?{core::double} self::topLevelDouble2 = self::getDouble() : #t9{core::double};
+  core::double v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num) → core::double};
+  core::double v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num) → core::double};
+  core::double v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num) → core::double};
+  core::double v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num) → core::double};
+  core::double v11 = let final core::double #t10 = self::topLevelDouble in let final core::double #t11 = self::topLevelDouble = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart
index 77332c3..33c324d 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.textual_outline.expect
index c1b0b53..b979107 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.textual_outline_modelled.expect
index c1b0b53..b979107 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.expect
index 871301b..328147c 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,7 +13,7 @@
 //   void set x(double value);
 //            ^
 //
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Error: The type 'int' of the getter 'A.x' is not assignable to the type 'double' of the setter 'A.x'.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Error: The type 'int' of the getter 'A.x' is not a subtype of the type 'double' of the setter 'A.x'.
 //   int get x;
 //           ^
 // pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is the declaration of the setter 'A.x'.
@@ -24,25 +24,15 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract set x(core::double* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
+  abstract set x(core::double value) → void;
 }
 class B extends self::A {
   field invalid-type x = null;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.modular.expect
index 871301b..328147c 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,7 +13,7 @@
 //   void set x(double value);
 //            ^
 //
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Error: The type 'int' of the getter 'A.x' is not assignable to the type 'double' of the setter 'A.x'.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Error: The type 'int' of the getter 'A.x' is not a subtype of the type 'double' of the setter 'A.x'.
 //   int get x;
 //           ^
 // pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is the declaration of the setter 'A.x'.
@@ -24,25 +24,15 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract set x(core::double* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
+  abstract set x(core::double value) → void;
 }
 class B extends self::A {
   field invalid-type x = null;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.outline.expect
index 35488cf..d4099cf 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,7 +13,7 @@
 //   void set x(double value);
 //            ^
 //
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Error: The type 'int' of the getter 'A.x' is not assignable to the type 'double' of the setter 'A.x'.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Error: The type 'int' of the getter 'A.x' is not a subtype of the type 'double' of the setter 'A.x'.
 //   int get x;
 //           ^
 // pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is the declaration of the setter 'A.x'.
@@ -24,24 +24,14 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract get x() → core::int*;
-  abstract set x(core::double* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
+  abstract set x(core::double value) → void;
 }
 class B extends self::A {
   field invalid-type x;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.transformed.expect
index 871301b..328147c 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,7 +13,7 @@
 //   void set x(double value);
 //            ^
 //
-// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Error: The type 'int' of the getter 'A.x' is not assignable to the type 'double' of the setter 'A.x'.
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Error: The type 'int' of the getter 'A.x' is not a subtype of the type 'double' of the setter 'A.x'.
 //   int get x;
 //           ^
 // pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is the declaration of the setter 'A.x'.
@@ -24,25 +24,15 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::int*;
-  abstract set x(core::double* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
+  abstract set x(core::double value) → void;
 }
 class B extends self::A {
   field invalid-type x = null;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart
index 39da6b2..d6f3096 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart
@@ -1,7 +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.
-// @dart=2.9
+
 abstract class A {
   A get x;
   void set x(B value);
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.textual_outline.expect
index 82cf977..0edf6d2 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A {
   A get x;
   void set x(B value);
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.textual_outline_modelled.expect
index 36712bf..4747c1a 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A {
   A get x;
   B get y;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.expect
index 497e214..06ff99f 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -24,37 +24,36 @@
 //   void set y(A value);
 //            ^
 //
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Error: The type 'A' of the getter 'A.x' is not a subtype of the type 'B' of the setter 'A.x'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart'.
+//   A get x;
+//         ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is the declaration of the setter 'A.x'.
+//   void set x(B value);
+//            ^
+//
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → self::A*;
-  abstract set x(self::B* value) → void;
-  abstract get y() → self::B*;
-  abstract set y(self::A* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → self::A;
+  abstract set x(self::B value) → void;
+  abstract get y() → self::B;
+  abstract set y(self::A value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::B {
   field invalid-type x = null;
   field invalid-type y = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.modular.expect
index 497e214..06ff99f 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -24,37 +24,36 @@
 //   void set y(A value);
 //            ^
 //
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Error: The type 'A' of the getter 'A.x' is not a subtype of the type 'B' of the setter 'A.x'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart'.
+//   A get x;
+//         ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is the declaration of the setter 'A.x'.
+//   void set x(B value);
+//            ^
+//
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → self::A*;
-  abstract set x(self::B* value) → void;
-  abstract get y() → self::B*;
-  abstract set y(self::A* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → self::A;
+  abstract set x(self::B value) → void;
+  abstract get y() → self::B;
+  abstract set y(self::A value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::B {
   field invalid-type x = null;
   field invalid-type y = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.outline.expect
index abca250..357ba3e 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -24,35 +24,34 @@
 //   void set y(A value);
 //            ^
 //
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Error: The type 'A' of the getter 'A.x' is not a subtype of the type 'B' of the setter 'A.x'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart'.
+//   A get x;
+//         ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is the declaration of the setter 'A.x'.
+//   void set x(B value);
+//            ^
+//
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract get x() → self::A*;
-  abstract set x(self::B* value) → void;
-  abstract get y() → self::B*;
-  abstract set y(self::A* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → self::A;
+  abstract set x(self::B value) → void;
+  abstract get y() → self::B;
+  abstract set y(self::A value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 class C extends self::B {
   field invalid-type x;
   field invalid-type y;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.transformed.expect
index 497e214..06ff99f 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -24,37 +24,36 @@
 //   void set y(A value);
 //            ^
 //
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Error: The type 'A' of the getter 'A.x' is not a subtype of the type 'B' of the setter 'A.x'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart'.
+//   A get x;
+//         ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is the declaration of the setter 'A.x'.
+//   void set x(B value);
+//            ^
+//
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → self::A*;
-  abstract set x(self::B* value) → void;
-  abstract get y() → self::B*;
-  abstract set y(self::A* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → self::A;
+  abstract set x(self::B value) → void;
+  abstract get y() → self::B;
+  abstract set y(self::A value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::B {
   field invalid-type x = null;
   field invalid-type y = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart
index e7d9344..7ebfa01 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.textual_outline.expect
index 3cd11b9..305abb9 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.textual_outline_modelled.expect
index 3cd11b9..305abb9 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.expect
index 6282349..5fb344c 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,30 +17,20 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(core::num* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::num value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract get x() → core::int*;
+  abstract get x() → core::int;
 }
 class C extends self::B {
   field invalid-type x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.modular.expect
index 6282349..5fb344c 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,30 +17,20 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(core::num* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::num value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract get x() → core::int*;
+  abstract get x() → core::int;
 }
 class C extends self::B {
   field invalid-type x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.outline.expect
index b029148..bb1f5df 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,28 +17,18 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract set x(core::num* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::num value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract get x() → core::int*;
+  abstract get x() → core::int;
 }
 class C extends self::B {
   field invalid-type x;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.transformed.expect
index 6282349..5fb344c 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,30 +17,20 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(core::num* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::num value) → void;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract get x() → core::int*;
+  abstract get x() → core::int;
 }
 class C extends self::B {
   field invalid-type x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart
index fb0921a..3b525b8 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 abstract class A {
-  num get x;
+  int get x;
 }
 
 abstract class B extends A {
-  void set x(int value);
+  void set x(num value);
 }
 
 // The getter in B doesn't screen the setter in A, so inference sees two
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.textual_outline.expect
index 7dfa297..650c096 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
-  num get x;
+  int get x;
 }
 
 abstract class B extends A {
-  void set x(int value);
+  void set x(num value);
 }
 
 class C extends B {
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.textual_outline_modelled.expect
index 7dfa297..650c096 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 abstract class A {
-  num get x;
+  int get x;
 }
 
 abstract class B extends A {
-  void set x(int value);
+  void set x(num value);
 }
 
 class C extends B {
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.expect
index 001d19d..3dfbe02 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,40 +7,30 @@
 //   var x;
 //       ^
 // pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the overridden members.
-//   num get x;
+//   int get x;
 //           ^
 // pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the overridden members.
-//   void set x(int value);
+//   void set x(num value);
 //            ^
 //
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract set x(core::int* value) → void;
+  abstract set x(core::num value) → void;
 }
 class C extends self::B {
   field invalid-type x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.modular.expect
index 001d19d..3dfbe02 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,40 +7,30 @@
 //   var x;
 //       ^
 // pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the overridden members.
-//   num get x;
+//   int get x;
 //           ^
 // pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the overridden members.
-//   void set x(int value);
+//   void set x(num value);
 //            ^
 //
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract set x(core::int* value) → void;
+  abstract set x(core::num value) → void;
 }
 class C extends self::B {
   field invalid-type x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.outline.expect
index 9d11e0e..786adc0 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,38 +7,28 @@
 //   var x;
 //       ^
 // pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the overridden members.
-//   num get x;
+//   int get x;
 //           ^
 // pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the overridden members.
-//   void set x(int value);
+//   void set x(num value);
 //            ^
 //
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract set x(core::int* value) → void;
+  abstract set x(core::num value) → void;
 }
 class C extends self::B {
   field invalid-type x;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.transformed.expect
index 001d19d..3dfbe02 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,40 +7,30 @@
 //   var x;
 //       ^
 // pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the overridden members.
-//   num get x;
+//   int get x;
 //           ^
 // pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the overridden members.
-//   void set x(int value);
+//   void set x(num value);
 //            ^
 //
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get x() → core::num*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get x() → core::int;
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract set x(core::int* value) → void;
+  abstract set x(core::num value) → void;
 }
 class C extends self::B {
   field invalid-type x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart
index 22e5ba7..a4da0b2 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart
@@ -1,17 +1,17 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A {
-  B b;
+  B b = throw '';
 }
 
 class B {
-  C get c => null;
-  void set c(C value) {}
+  C? get c => null;
+  void set c(C? value) {}
 }
 
 class C {}
@@ -20,7 +20,7 @@
 
 var a = new A();
 var x = a. /*@target=A.b*/ b. /*@target=B.c*/ c;
-var y = a. /*@ type=B* */ /*@target=A.b*/ /*@target=B.c*/ b. /*@target=B.c*/ c
+var y = a. /*@type=B*/ /*@target=A.b*/ /*@target=B.c*/ b. /*@target=B.c*/ c
      ??= new D();
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.textual_outline.expect
index eac6ba0..9395c93 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.textual_outline.expect
@@ -1,13 +1,12 @@
-// @dart = 2.9
 library test;
 
 class A {
-  B b;
+  B b = throw '';
 }
 
 class B {
-  C get c => null;
-  void set c(C value) {}
+  C? get c => null;
+  void set c(C? value) {}
 }
 
 class C {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.textual_outline_modelled.expect
index aadf0b1..2102937 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.textual_outline_modelled.expect
@@ -1,13 +1,12 @@
-// @dart = 2.9
 library test;
 
 class A {
-  B b;
+  B b = throw '';
 }
 
 class B {
-  C get c => null;
-  void set c(C value) {}
+  C? get c => null;
+  void set c(C? value) {}
 }
 
 class C {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect
index ea950c6..a10db59 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect
@@ -1,62 +1,32 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B* b = null;
-  synthetic constructor •() → self::A*
+  field self::B b = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get c() → self::C*
+  get c() → self::C?
     return null;
-  set c(self::C* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set c(self::C? value) → void {}
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
-static field self::A* a = new self::A::•();
-static field self::C* x = self::a.{self::A::b}{self::B*}.{self::B::c}{self::C*};
-static field self::C* y = let final self::B* #t1 = self::a.{self::A::b}{self::B*} in let final self::C* #t2 = #t1.{self::B::c}{self::C*} in #t2 == null ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
+static field self::A a = new self::A::•();
+static field self::C? x = self::a.{self::A::b}{self::B}.{self::B::c}{self::C?};
+static field self::C y = let final self::B #t1 = self::a.{self::A::b}{self::B} in let final self::C? #t2 = #t1.{self::B::c}{self::C?} in #t2 == null ?{self::C} #t1.{self::B::c} = new self::D::•() : #t2{self::C};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.modular.expect
index ea950c6..a10db59 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.modular.expect
@@ -1,62 +1,32 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B* b = null;
-  synthetic constructor •() → self::A*
+  field self::B b = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get c() → self::C*
+  get c() → self::C?
     return null;
-  set c(self::C* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set c(self::C? value) → void {}
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
-static field self::A* a = new self::A::•();
-static field self::C* x = self::a.{self::A::b}{self::B*}.{self::B::c}{self::C*};
-static field self::C* y = let final self::B* #t1 = self::a.{self::A::b}{self::B*} in let final self::C* #t2 = #t1.{self::B::c}{self::C*} in #t2 == null ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
+static field self::A a = new self::A::•();
+static field self::C? x = self::a.{self::A::b}{self::B}.{self::B::c}{self::C?};
+static field self::C y = let final self::B #t1 = self::a.{self::A::b}{self::B} in let final self::C? #t2 = #t1.{self::B::c}{self::C?} in #t2 == null ?{self::C} #t1.{self::B::c} = new self::D::•() : #t2{self::C};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.outline.expect
index da2cfcc..98ea944 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.outline.expect
@@ -1,60 +1,30 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B* b;
-  synthetic constructor •() → self::A*
+  field self::B b;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get c() → self::C*
+  get c() → self::C?
     ;
-  set c(self::C* value) → void
+  set c(self::C? value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
 }
-static field self::A* a;
-static field self::C* x;
-static field self::C* y;
+static field self::A a;
+static field self::C? x;
+static field self::C y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect
index ea950c6..a10db59 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect
@@ -1,62 +1,32 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B* b = null;
-  synthetic constructor •() → self::A*
+  field self::B b = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get c() → self::C*
+  get c() → self::C?
     return null;
-  set c(self::C* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set c(self::C? value) → void {}
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
-static field self::A* a = new self::A::•();
-static field self::C* x = self::a.{self::A::b}{self::B*}.{self::B::c}{self::C*};
-static field self::C* y = let final self::B* #t1 = self::a.{self::A::b}{self::B*} in let final self::C* #t2 = #t1.{self::B::c}{self::C*} in #t2 == null ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
+static field self::A a = new self::A::•();
+static field self::C? x = self::a.{self::A::b}{self::B}.{self::B::c}{self::C?};
+static field self::C y = let final self::B #t1 = self::a.{self::A::b}{self::B} in let final self::C? #t2 = #t1.{self::B::c}{self::C?} in #t2 == null ?{self::C} #t1.{self::B::c} = new self::D::•() : #t2{self::C};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart
index 89d50fb..3e95b72 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart
@@ -1,16 +1,16 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class A {
-  B b;
+  B b = throw '';
 }
 
 class B {
-  C c;
+  C? c;
 }
 
 class C {}
@@ -19,7 +19,7 @@
 
 var a = new A();
 var x = a. /*@target=A.b*/ b. /*@target=B.c*/ c;
-var y = a. /*@ type=B* */ /*@target=A.b*/ /*@target=B.c*/ b
-    . /*@target=B.c*/ c ??= new D();
+var y = a. /*@type=B*/ /*@target=A.b*/ /*@target=B.c*/ b. /*@target=B.c*/ c ??=
+    new D();
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.textual_outline.expect
index 67bf68d..65c2ede 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class A {
-  B b;
+  B b = throw '';
 }
 
 class B {
-  C c;
+  C? c;
 }
 
 class C {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.textual_outline_modelled.expect
index fe63aea..e8117ba 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 library test;
 
 class A {
-  B b;
+  B b = throw '';
 }
 
 class B {
-  C c;
+  C? c;
 }
 
 class C {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect
index b174194..9bba819 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect
@@ -1,60 +1,30 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B* b = null;
-  synthetic constructor •() → self::A*
+  field self::B b = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field self::C* c = null;
-  synthetic constructor •() → self::B*
+  field self::C? c = null;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
-static field self::A* a = new self::A::•();
-static field self::C* x = self::a.{self::A::b}{self::B*}.{self::B::c}{self::C*};
-static field self::C* y = let final self::B* #t1 = self::a.{self::A::b}{self::B*} in let final self::C* #t2 = #t1.{self::B::c}{self::C*} in #t2 == null ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
+static field self::A a = new self::A::•();
+static field self::C? x = self::a.{self::A::b}{self::B}.{self::B::c}{self::C?};
+static field self::C y = let final self::B #t1 = self::a.{self::A::b}{self::B} in let final self::C? #t2 = #t1.{self::B::c}{self::C?} in #t2 == null ?{self::C} #t1.{self::B::c} = new self::D::•() : #t2{self::C};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.modular.expect
index b174194..9bba819 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.modular.expect
@@ -1,60 +1,30 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B* b = null;
-  synthetic constructor •() → self::A*
+  field self::B b = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field self::C* c = null;
-  synthetic constructor •() → self::B*
+  field self::C? c = null;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
-static field self::A* a = new self::A::•();
-static field self::C* x = self::a.{self::A::b}{self::B*}.{self::B::c}{self::C*};
-static field self::C* y = let final self::B* #t1 = self::a.{self::A::b}{self::B*} in let final self::C* #t2 = #t1.{self::B::c}{self::C*} in #t2 == null ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
+static field self::A a = new self::A::•();
+static field self::C? x = self::a.{self::A::b}{self::B}.{self::B::c}{self::C?};
+static field self::C y = let final self::B #t1 = self::a.{self::A::b}{self::B} in let final self::C? #t2 = #t1.{self::B::c}{self::C?} in #t2 == null ?{self::C} #t1.{self::B::c} = new self::D::•() : #t2{self::C};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.outline.expect
index 06be72a..e58b8d0d8 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.outline.expect
@@ -1,57 +1,27 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B* b;
-  synthetic constructor •() → self::A*
+  field self::B b;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field self::C* c;
-  synthetic constructor •() → self::B*
+  field self::C? c;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
 }
-static field self::A* a;
-static field self::C* x;
-static field self::C* y;
+static field self::A a;
+static field self::C? x;
+static field self::C y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect
index b174194..9bba819 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect
@@ -1,60 +1,30 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field self::B* b = null;
-  synthetic constructor •() → self::A*
+  field self::B b = throw "";
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  field self::C* c = null;
-  synthetic constructor •() → self::B*
+  field self::C? c = null;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
-static field self::A* a = new self::A::•();
-static field self::C* x = self::a.{self::A::b}{self::B*}.{self::B::c}{self::C*};
-static field self::C* y = let final self::B* #t1 = self::a.{self::A::b}{self::B*} in let final self::C* #t2 = #t1.{self::B::c}{self::C*} in #t2 == null ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
+static field self::A a = new self::A::•();
+static field self::C? x = self::a.{self::A::b}{self::B}.{self::B::c}{self::C?};
+static field self::C y = let final self::B #t1 = self::a.{self::A::b}{self::B} in let final self::C? #t2 = #t1.{self::B::c}{self::C?} in #t2 == null ?{self::C} #t1.{self::B::c} = new self::D::•() : #t2{self::C};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart
index 0bb8cd3..c0e5706 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart
@@ -1,19 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 // In the code below, there is a circularity between A.b and x.
 
 class A {
-  var b = /*@ returnType=() ->* invalid-type */ () => x;
-  var c = /*@ returnType=() ->* invalid-type */ () => x;
+  var b = /*@returnType=() -> invalid-type*/ () => x;
+  var c = /*@returnType=() -> invalid-type*/ () => x;
 }
 
 var a = new A();
 var x = /*@ returnType=invalid-type */ () => a. /*@target=A.b*/ b;
-var y = /*@ returnType=() ->* () ->* invalid-type */ () => a. /*@target=A.c*/ c;
+var y = /*@returnType=() -> () -> invalid-type*/ () => a. /*@target=A.c*/ c;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.textual_outline.expect
index 04056f2..1d3b6a2 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.textual_outline_modelled.expect
index 57a8d15..9e8f476 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.expect
index 21df0fc..5f65b99 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:7: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
-//   var b = /*@ returnType=() ->* invalid-type */ () => x;
+//   var b = /*@returnType=() -> invalid-type*/ () => x;
 //       ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field invalid-type b = () → () →* invalid-type => self::x;
-  field () →* () →* invalid-type c = () → () →* invalid-type => self::x;
-  synthetic constructor •() → self::A*
+  field invalid-type b = () → () → invalid-type => self::x;
+  field () → () → invalid-type c = () → () → invalid-type => self::x;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field () →* invalid-type x = () → invalid-type => self::a.{self::A::b}{invalid-type};
-static field () →* () →* () →* invalid-type y = () → () →* () →* invalid-type => self::a.{self::A::c}{() →* () →* invalid-type};
+static field self::A a = new self::A::•();
+static field () → invalid-type x = () → invalid-type => self::a.{self::A::b}{invalid-type};
+static field () → () → () → invalid-type y = () → () → () → invalid-type => self::a.{self::A::c}{() → () → invalid-type};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.modular.expect
index 21df0fc..5f65b99 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.modular.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:7: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
-//   var b = /*@ returnType=() ->* invalid-type */ () => x;
+//   var b = /*@returnType=() -> invalid-type*/ () => x;
 //       ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field invalid-type b = () → () →* invalid-type => self::x;
-  field () →* () →* invalid-type c = () → () →* invalid-type => self::x;
-  synthetic constructor •() → self::A*
+  field invalid-type b = () → () → invalid-type => self::x;
+  field () → () → invalid-type c = () → () → invalid-type => self::x;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field () →* invalid-type x = () → invalid-type => self::a.{self::A::b}{invalid-type};
-static field () →* () →* () →* invalid-type y = () → () →* () →* invalid-type => self::a.{self::A::c}{() →* () →* invalid-type};
+static field self::A a = new self::A::•();
+static field () → invalid-type x = () → invalid-type => self::a.{self::A::b}{invalid-type};
+static field () → () → () → invalid-type y = () → () → () → invalid-type => self::a.{self::A::c}{() → () → invalid-type};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.outline.expect
index 8ab2ccc..5fd2432 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:7: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
-//   var b = /*@ returnType=() ->* invalid-type */ () => x;
+//   var b = /*@returnType=() -> invalid-type*/ () => x;
 //       ^
 //
 import self as self;
@@ -12,22 +12,12 @@
 
 class A extends core::Object {
   field invalid-type b;
-  field () →* () →* invalid-type c;
-  synthetic constructor •() → self::A*
+  field () → () → invalid-type c;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a;
-static field () →* invalid-type x;
-static field () →* () →* () →* invalid-type y;
+static field self::A a;
+static field () → invalid-type x;
+static field () → () → () → invalid-type y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.transformed.expect
index 21df0fc..5f65b99 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.transformed.expect
@@ -1,33 +1,23 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:7: Error: Can't infer the type of 'b': circularity found during type inference.
 // Specify the type explicitly.
-//   var b = /*@ returnType=() ->* invalid-type */ () => x;
+//   var b = /*@returnType=() -> invalid-type*/ () => x;
 //       ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field invalid-type b = () → () →* invalid-type => self::x;
-  field () →* () →* invalid-type c = () → () →* invalid-type => self::x;
-  synthetic constructor •() → self::A*
+  field invalid-type b = () → () → invalid-type => self::x;
+  field () → () → invalid-type c = () → () → invalid-type => self::x;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A* a = new self::A::•();
-static field () →* invalid-type x = () → invalid-type => self::a.{self::A::b}{invalid-type};
-static field () →* () →* () →* invalid-type y = () → () →* () →* invalid-type => self::a.{self::A::c}{() →* () →* invalid-type};
+static field self::A a = new self::A::•();
+static field () → invalid-type x = () → invalid-type => self::a.{self::A::b}{invalid-type};
+static field () → () → () → invalid-type y = () → () → () → invalid-type => self::a.{self::A::c}{() → () → invalid-type};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart b/pkg/front_end/testcases/inference_new/infer_logical.dart
index 0ac3f2b..dc8f1e8 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart
@@ -1,18 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
-var x = /*@ typeArgs=bool* */ f() || /*@ typeArgs=bool* */ f();
-var y = /*@ typeArgs=bool* */ f() && /*@ typeArgs=bool* */ f();
+var x = /*@typeArgs=bool*/ f() || /*@typeArgs=bool*/ f();
+var y = /*@typeArgs=bool*/ f() && /*@typeArgs=bool*/ f();
 
 void test() {
-  var /*@ type=bool* */ x = /*@ typeArgs=bool* */ f() || /*@ typeArgs=bool* */ f();
-  var /*@ type=bool* */ y = /*@ typeArgs=bool* */ f() && /*@ typeArgs=bool* */ f();
+  var /*@type=bool*/ x = /*@typeArgs=bool*/ f() || /*@typeArgs=bool*/ f();
+  var /*@type=bool*/ y = /*@typeArgs=bool*/ f() && /*@typeArgs=bool*/ f();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.textual_outline.expect
index 8269fd0..14932d6 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 var x = f() || f();
 var y = f() && f();
 void test() {}
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.textual_outline_modelled.expect
index f6cf705..3c9f6fd 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 main() {}
 var x = f() || f();
 var y = f() && f();
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.expect
index 2b05154..d637727 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* x = self::f<core::bool*>() || self::f<core::bool*>();
-static field core::bool* y = self::f<core::bool*>() && self::f<core::bool*>();
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static field core::bool x = self::f<core::bool>() || self::f<core::bool>();
+static field core::bool y = self::f<core::bool>() && self::f<core::bool>();
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → void {
-  core::bool* x = self::f<core::bool*>() || self::f<core::bool*>();
-  core::bool* y = self::f<core::bool*>() && self::f<core::bool*>();
+  core::bool x = self::f<core::bool>() || self::f<core::bool>();
+  core::bool y = self::f<core::bool>() && self::f<core::bool>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.modular.expect
index 2b05154..d637727 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* x = self::f<core::bool*>() || self::f<core::bool*>();
-static field core::bool* y = self::f<core::bool*>() && self::f<core::bool*>();
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static field core::bool x = self::f<core::bool>() || self::f<core::bool>();
+static field core::bool y = self::f<core::bool>() && self::f<core::bool>();
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → void {
-  core::bool* x = self::f<core::bool*>() || self::f<core::bool*>();
-  core::bool* y = self::f<core::bool*>() && self::f<core::bool*>();
+  core::bool x = self::f<core::bool>() || self::f<core::bool>();
+  core::bool y = self::f<core::bool>() && self::f<core::bool>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.outline.expect
index 13732dc..0c96ed5 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* x;
-static field core::bool* y;
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static field core::bool x;
+static field core::bool y;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.transformed.expect
index 2b05154..d637727 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* x = self::f<core::bool*>() || self::f<core::bool*>();
-static field core::bool* y = self::f<core::bool*>() && self::f<core::bool*>();
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static field core::bool x = self::f<core::bool>() || self::f<core::bool>();
+static field core::bool y = self::f<core::bool>() && self::f<core::bool>();
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → void {
-  core::bool* x = self::f<core::bool*>() || self::f<core::bool*>();
-  core::bool* y = self::f<core::bool*>() && self::f<core::bool*>();
+  core::bool x = self::f<core::bool>() || self::f<core::bool>();
+  core::bool y = self::f<core::bool>() && self::f<core::bool>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart
index d5fe17c..5c8e415 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.textual_outline.expect
index 276af4e..fccbad0 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class B {
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.textual_outline_modelled.expect
index 699b12b..deba2e5 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class B {
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.expect
index 18cf625..435e9d9 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method f() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
   method f() → void {}
 }
-static field void x = new self::C::•().{self::C::f}(){() →* void};
+static field void x = new self::C::•().{self::C::f}(){() → void};
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.modular.expect
index 18cf625..435e9d9 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.modular.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method f() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
   method f() → void {}
 }
-static field void x = new self::C::•().{self::C::f}(){() →* void};
+static field void x = new self::C::•().{self::C::f}(){() → void};
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.outline.expect
index ba9bf4a..a341f62 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   method f() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method f() → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.transformed.expect
index 18cf625..435e9d9 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.transformed.expect
@@ -1,30 +1,20 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method f() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
   method f() → void {}
 }
-static field void x = new self::C::•().{self::C::f}(){() →* void};
+static field void x = new self::C::•().{self::C::f}(){() → void};
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart
index 3a6562d..74fbf45 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 
-int i;
-String s;
+int i = 0;
+String s = '';
 var x = i = s;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.textual_outline.expect
index 1330573..56699ed 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
-int i;
-String s;
+int i = 0;
+String s = '';
 var x = i = s;
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.textual_outline_modelled.expect
index 4349743..4015540 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
-String s;
-int i;
+String s = '';
+int i = 0;
 main() {}
 var x = i = s;
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.expect
index 3faad32..6cac1be 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,9 +9,9 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* i;
-static field core::String* s;
-static field core::String* x = self::i = invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:13: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+static field core::int i = 0;
+static field core::String s = "";
+static field core::String x = self::i = invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:13: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 var x = i = s;
-            ^" in self::s as{TypeError} core::int*;
+            ^" in self::s as{TypeError,ForNonNullableByDefault} core::int;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.modular.expect
index 3faad32..6cac1be 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,9 +9,9 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* i;
-static field core::String* s;
-static field core::String* x = self::i = invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:13: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+static field core::int i = 0;
+static field core::String s = "";
+static field core::String x = self::i = invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:13: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 var x = i = s;
-            ^" in self::s as{TypeError} core::int*;
+            ^" in self::s as{TypeError,ForNonNullableByDefault} core::int;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.outline.expect
index 51cd968..b009bc7 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::int* i;
-static field core::String* s;
-static field core::String* x;
+static field core::int i;
+static field core::String s;
+static field core::String x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.transformed.expect
index 3faad32..6cac1be 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,9 +9,9 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::int* i;
-static field core::String* s;
-static field core::String* x = self::i = invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:13: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+static field core::int i = 0;
+static field core::String s = "";
+static field core::String x = self::i = invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:13: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 var x = i = s;
-            ^" in self::s as{TypeError} core::int*;
+            ^" in self::s as{TypeError,ForNonNullableByDefault} core::int;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart
index 44d091e..95a8a3b 100644
--- a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart
+++ b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.textual_outline.expect
index e352ea2..38b2446 100644
--- a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var x = [null];
diff --git a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.textual_outline_modelled.expect
index a043852..9294248 100644
--- a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.expect b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.expect
index 30af47a..d89c468 100644
--- a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<Null>* x = <Null>[null];
+static field core::List<Null> x = <Null>[null];
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.modular.expect
index 30af47a..d89c468 100644
--- a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<Null>* x = <Null>[null];
+static field core::List<Null> x = <Null>[null];
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.outline.expect
index d051539..06a9fc9 100644
--- a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<Null>* x;
+static field core::List<Null> x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.transformed.expect
index e068583..1a0621fd 100644
--- a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<Null>* x = core::_GrowableList::_literal1<Null>(null);
+static field core::List<Null> x = core::_GrowableList::_literal1<Null>(null);
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart
index 49da973..4acd9c4 100644
--- a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart
+++ b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.textual_outline.expect
index 3329d4e..1954ad0 100644
--- a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 var x = {null: null};
diff --git a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.textual_outline_modelled.expect
index e7a37b5..412a917 100644
--- a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.expect b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.expect
index c5b6db9..f64b3f9 100644
--- a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::Map<Null, Null>* x = <Null, Null>{null: null};
+static field core::Map<Null, Null> x = <Null, Null>{null: null};
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.modular.expect
index c5b6db9..f64b3f9 100644
--- a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::Map<Null, Null>* x = <Null, Null>{null: null};
+static field core::Map<Null, Null> x = <Null, Null>{null: null};
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.outline.expect
index 3a23ea0..5507eea 100644
--- a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::Map<Null, Null>* x;
+static field core::Map<Null, Null> x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.transformed.expect
index c5b6db9..f64b3f9 100644
--- a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::Map<Null, Null>* x = <Null, Null>{null: null};
+static field core::Map<Null, Null> x = <Null, Null>{null: null};
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart
index 013c8c7..d1f1fe7 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.textual_outline.expect
index a3dc615..b52257c 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class I1 {
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.textual_outline_modelled.expect
index 2245528..fa895e1 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class C implements I1, I2 {}
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.expect
index 35f8118..f667eff 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.expect
@@ -1,87 +1,47 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class I1 extends core::Object {
-  synthetic constructor •() → self::I1*
+  synthetic constructor •() → self::I1
     : super core::Object::•()
     ;
-  abstract method f(core::int* i) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int i) → void;
 }
 abstract class I2 extends core::Object {
-  synthetic constructor •() → self::I2*
+  synthetic constructor •() → self::I2
     : super core::Object::•()
     ;
-  abstract method f(core::Object* o) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::Object o) → void;
 }
 abstract class C extends core::Object implements self::I1, self::I2 {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature method f(core::Object* o) → void; -> self::I2::f
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method f(core::Object o) → void; -> self::I2::f
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f(core::Object* o) → void {}
+  method f(core::Object o) → void {}
 }
 abstract class E extends core::Object implements self::I2, self::I1 {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends self::E {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::E::•()
     ;
-  method f(core::Object* o) → void {}
+  method f(core::Object o) → void {}
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}("hi"){(core::Object*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}("hi"){(core::Object) → void};
 }
-static method g2(self::E* e) → void {
-  e.{self::I2::f}("hi"){(core::Object*) →* void};
+static method g2(self::E e) → void {
+  e.{self::I2::f}("hi"){(core::Object) → void};
 }
 static method main() → dynamic {
   self::g1(new self::D::•());
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.modular.expect
index 35f8118..f667eff 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.modular.expect
@@ -1,87 +1,47 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class I1 extends core::Object {
-  synthetic constructor •() → self::I1*
+  synthetic constructor •() → self::I1
     : super core::Object::•()
     ;
-  abstract method f(core::int* i) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int i) → void;
 }
 abstract class I2 extends core::Object {
-  synthetic constructor •() → self::I2*
+  synthetic constructor •() → self::I2
     : super core::Object::•()
     ;
-  abstract method f(core::Object* o) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::Object o) → void;
 }
 abstract class C extends core::Object implements self::I1, self::I2 {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature method f(core::Object* o) → void; -> self::I2::f
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method f(core::Object o) → void; -> self::I2::f
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f(core::Object* o) → void {}
+  method f(core::Object o) → void {}
 }
 abstract class E extends core::Object implements self::I2, self::I1 {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends self::E {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::E::•()
     ;
-  method f(core::Object* o) → void {}
+  method f(core::Object o) → void {}
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}("hi"){(core::Object*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}("hi"){(core::Object) → void};
 }
-static method g2(self::E* e) → void {
-  e.{self::I2::f}("hi"){(core::Object*) →* void};
+static method g2(self::E e) → void {
+  e.{self::I2::f}("hi"){(core::Object) → void};
 }
 static method main() → dynamic {
   self::g1(new self::D::•());
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.outline.expect
index f0b94c5..7cb49e6 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.outline.expect
@@ -1,81 +1,41 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class I1 extends core::Object {
-  synthetic constructor •() → self::I1*
+  synthetic constructor •() → self::I1
     ;
-  abstract method f(core::int* i) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int i) → void;
 }
 abstract class I2 extends core::Object {
-  synthetic constructor •() → self::I2*
+  synthetic constructor •() → self::I2
     ;
-  abstract method f(core::Object* o) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::Object o) → void;
 }
 abstract class C extends core::Object implements self::I1, self::I2 {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature method f(core::Object* o) → void; -> self::I2::f
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method f(core::Object o) → void; -> self::I2::f
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  method f(core::Object* o) → void
+  method f(core::Object o) → void
     ;
 }
 abstract class E extends core::Object implements self::I2, self::I1 {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends self::E {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
-  method f(core::Object* o) → void
+  method f(core::Object o) → void
     ;
 }
-static method g1(self::C* c) → void
+static method g1(self::C c) → void
   ;
-static method g2(self::E* e) → void
+static method g2(self::E e) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.transformed.expect
index 35f8118..f667eff 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.transformed.expect
@@ -1,87 +1,47 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class I1 extends core::Object {
-  synthetic constructor •() → self::I1*
+  synthetic constructor •() → self::I1
     : super core::Object::•()
     ;
-  abstract method f(core::int* i) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::int i) → void;
 }
 abstract class I2 extends core::Object {
-  synthetic constructor •() → self::I2*
+  synthetic constructor •() → self::I2
     : super core::Object::•()
     ;
-  abstract method f(core::Object* o) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method f(core::Object o) → void;
 }
 abstract class C extends core::Object implements self::I1, self::I2 {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature method f(core::Object* o) → void; -> self::I2::f
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method f(core::Object o) → void; -> self::I2::f
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f(core::Object* o) → void {}
+  method f(core::Object o) → void {}
 }
 abstract class E extends core::Object implements self::I2, self::I1 {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends self::E {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::E::•()
     ;
-  method f(core::Object* o) → void {}
+  method f(core::Object o) → void {}
 }
-static method g1(self::C* c) → void {
-  c.{self::C::f}("hi"){(core::Object*) →* void};
+static method g1(self::C c) → void {
+  c.{self::C::f}("hi"){(core::Object) → void};
 }
-static method g2(self::E* e) → void {
-  e.{self::I2::f}("hi"){(core::Object*) →* void};
+static method g2(self::E e) → void {
+  e.{self::I2::f}("hi"){(core::Object) → void};
 }
 static method main() → dynamic {
   self::g1(new self::D::•());
diff --git a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart
index 1aeaa68..3a97531 100644
--- a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart
+++ b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 class Class {
-  T method<T>() => null;
+  T method<T>() => throw '';
 }
 
-main() {
-  Class c;
-  num Function() f = /*@type=Class**/ c?. /*@target=Class.method*/ method;
+test(Class? c) {
+  num Function()? f = /*@type=Class?*/ /*@promotedType=Class*/ c
+      ?. /*@target=Class.method*/ method;
 }
diff --git a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.textual_outline.expect
index bcce8ba..fab8f5a 100644
--- a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class Class {
-  T method<T>() => null;
+  T method<T>() => throw '';
 }
 
-main() {}
+test(Class? c) {}
diff --git a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.textual_outline_modelled.expect
index bcce8ba..fab8f5a 100644
--- a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 library test;
 
 class Class {
-  T method<T>() => null;
+  T method<T>() => throw '';
 }
 
-main() {}
+test(Class? c) {}
diff --git a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.expect b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.expect
index fa63c03..1f05490 100644
--- a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.expect
@@ -1,25 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  method method<T extends core::Object* = dynamic>() → self::Class::method::T*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method<T extends core::Object? = dynamic>() → self::Class::method::T%
+    return throw "";
 }
-static method main() → dynamic {
-  self::Class* c;
-  () →* core::num* f = let final self::Class* #t1 = c in #t1 == null ?{() →* core::num*} null : #t1.{self::Class::method}{<T extends core::Object* = dynamic>() →* T*}<core::num*>;
+static method test(self::Class? c) → dynamic {
+  () →? core::num f = let final self::Class? #t1 = c in #t1 == null ?{() →? core::num} null : #t1{self::Class}.{self::Class::method}{<T extends core::Object? = dynamic>() → T%}<core::num>;
 }
diff --git a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.modular.expect
index fa63c03..1f05490 100644
--- a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.modular.expect
@@ -1,25 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  method method<T extends core::Object* = dynamic>() → self::Class::method::T*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method<T extends core::Object? = dynamic>() → self::Class::method::T%
+    return throw "";
 }
-static method main() → dynamic {
-  self::Class* c;
-  () →* core::num* f = let final self::Class* #t1 = c in #t1 == null ?{() →* core::num*} null : #t1.{self::Class::method}{<T extends core::Object* = dynamic>() →* T*}<core::num*>;
+static method test(self::Class? c) → dynamic {
+  () →? core::num f = let final self::Class? #t1 = c in #t1 == null ?{() →? core::num} null : #t1{self::Class}.{self::Class::method}{<T extends core::Object? = dynamic>() → T%}<core::num>;
 }
diff --git a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.outline.expect
index f2eba54..f646d78 100644
--- a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  method method<T extends core::Object* = dynamic>() → self::Class::method::T*
+  method method<T extends core::Object? = dynamic>() → self::Class::method::T%
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method main() → dynamic
+static method test(self::Class? c) → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.transformed.expect
index fa63c03..1f05490 100644
--- a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.transformed.expect
@@ -1,25 +1,14 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  method method<T extends core::Object* = dynamic>() → self::Class::method::T*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method<T extends core::Object? = dynamic>() → self::Class::method::T%
+    return throw "";
 }
-static method main() → dynamic {
-  self::Class* c;
-  () →* core::num* f = let final self::Class* #t1 = c in #t1 == null ?{() →* core::num*} null : #t1.{self::Class::method}{<T extends core::Object* = dynamic>() →* T*}<core::num*>;
+static method test(self::Class? c) → dynamic {
+  () →? core::num f = let final self::Class? #t1 = c in #t1 == null ?{() →? core::num} null : #t1{self::Class}.{self::Class::method}{<T extends core::Object? = dynamic>() → T%}<core::num>;
 }
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart
index 7676f3f..2ef22f7 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart
@@ -1,20 +1,20 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {
-  C operator +(int value) => null;
-  C operator *(D value) => null;
+  C operator +(int value) => throw '';
+  C operator *(D value) => throw '';
 }
 
 class B {
-  E operator +(int value) => null;
-  E operator *(F value) => null;
+  E operator +(int value) => throw '';
+  E operator *(F value) => throw '';
 }
 
 class C extends B {}
@@ -26,33 +26,33 @@
 class F {}
 
 class G {
-  A get target => null;
+  A get target => throw '';
 
   void set target(B value) {}
 }
 
 void test1(G g) {
-  /*@ type=G* */ g. /*@target=G.target*/ /*@target=G.target*/ target
+  /*@type=G*/ g. /*@target=G.target*/ /*@target=G.target*/ target
       /*@target=A.**/ *=
-      /*@ typeArgs=D* */ f();
-  var /*@ type=C* */ x =
-      /*@ type=G* */ g. /*@target=G.target*/ /*@target=G.target*/ target
+      /*@typeArgs=D*/ f();
+  var /*@type=C*/ x =
+      /*@type=G*/ g. /*@target=G.target*/ /*@target=G.target*/ target
           /*@target=A.**/ *=
-          /*@ typeArgs=D* */ f();
+          /*@typeArgs=D*/ f();
 }
 
 void test2(G g) {
-  /*@target=A.+*/ ++ /*@ type=G* */ g
+  /*@target=A.+*/ ++ /*@type=G*/ g
       . /*@target=G.target*/ /*@target=G.target*/ target;
-  var /*@ type=C* */ x = /*@target=A.+*/ ++ /*@ type=G* */ g
+  var /*@type=C*/ x = /*@target=A.+*/ ++ /*@type=G*/ g
       . /*@target=G.target*/ /*@target=G.target*/ target;
 }
 
 void test3(G g) {
-  /*@ type=G* */ g
+  /*@type=G*/ g
       . /*@target=G.target*/ /*@target=G.target*/ target /*@target=A.+*/ ++;
-  var /*@ type=A* */ x = /*@ type=G* */ g. /*@ type=A* */ /*@target=G.target*/
-          /*@target=G.target*/ /*@ type=C* */ target
+  var /*@type=A*/ x = /*@type=G*/ g. /*@type=A*/ /*@target=G.target*/
+          /*@target=G.target*/ /*@type=C*/ target
       /*@target=A.+*/ ++;
 }
 
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.textual_outline.expect
index dfd5284..60d9189 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.textual_outline.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {
-  C operator +(int value) => null;
-  C operator *(D value) => null;
+  C operator +(int value) => throw '';
+  C operator *(D value) => throw '';
 }
 
 class B {
-  E operator +(int value) => null;
-  E operator *(F value) => null;
+  E operator +(int value) => throw '';
+  E operator *(F value) => throw '';
 }
 
 class C extends B {}
@@ -22,7 +21,7 @@
 class F {}
 
 class G {
-  A get target => null;
+  A get target => throw '';
   void set target(B value) {}
 }
 
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.textual_outline_modelled.expect
index 09bae58..1beb8d4 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.textual_outline_modelled.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {
-  C operator *(D value) => null;
-  C operator +(int value) => null;
+  C operator *(D value) => throw '';
+  C operator +(int value) => throw '';
 }
 
 class B {
-  E operator *(F value) => null;
-  E operator +(int value) => null;
+  E operator *(F value) => throw '';
+  E operator +(int value) => throw '';
 }
 
 class C extends B {}
@@ -22,7 +21,7 @@
 class F {}
 
 class G {
-  A get target => null;
+  A get target => throw '';
   void set target(B value) {}
 }
 
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.expect
index facdace..9a5929c 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/property_assign_combiner.dart:29:9: Error: The type 'A' of the getter 'G.target' is not assignable to the type 'B' of the setter 'G.target'.
+// pkg/front_end/testcases/inference_new/property_assign_combiner.dart:29:9: Error: The type 'A' of the getter 'G.target' is not a subtype of the type 'B' of the setter 'G.target'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/property_assign_combiner.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/inference_new/property_assign_combiner.dart'.
-//   A get target => null;
+//   A get target => throw '';
 //         ^^^^^^
 // pkg/front_end/testcases/inference_new/property_assign_combiner.dart:31:12: Context: This is the declaration of the setter 'G.target'.
 //   void set target(B value) {}
@@ -15,123 +15,63 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::C*
-    return null;
-  operator *(self::D* value) → self::C*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::C
+    return throw "";
+  operator *(self::D value) → self::C
+    return throw "";
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::E*
-    return null;
-  operator *(self::F* value) → self::E*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::E
+    return throw "";
+  operator *(self::F value) → self::E
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends core::Object {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  get target() → self::A*
-    return null;
-  set target(self::B* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get target() → self::A
+    return throw "";
+  set target(self::B value) → void {}
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method test1(self::G* g) → void {
-  let final self::G* #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}{self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
-  self::C* x = let final self::G* #t2 = g in #t2.{self::G::target} = #t2.{self::G::target}{self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test1(self::G g) → void {
+  let final self::G #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}{self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
+  self::C x = let final self::G #t2 = g in #t2.{self::G::target} = #t2.{self::G::target}{self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
 }
-static method test2(self::G* g) → void {
-  let final self::G* #t3 = g in #t3.{self::G::target} = #t3.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
-  self::C* x = let final self::G* #t4 = g in #t4.{self::G::target} = #t4.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
+static method test2(self::G g) → void {
+  let final self::G #t3 = g in #t3.{self::G::target} = #t3.{self::G::target}{self::A}.{self::A::+}(1){(core::int) → self::C};
+  self::C x = let final self::G #t4 = g in #t4.{self::G::target} = #t4.{self::G::target}{self::A}.{self::A::+}(1){(core::int) → self::C};
 }
-static method test3(self::G* g) → void {
-  let final self::G* #t5 = g in #t5.{self::G::target} = #t5.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
-  self::A* x = let final self::G* #t6 = g in let final self::A* #t7 = #t6.{self::G::target}{self::A*} in let final self::C* #t8 = #t6.{self::G::target} = #t7.{self::A::+}(1){(core::int*) →* self::C*} in #t7;
+static method test3(self::G g) → void {
+  let final self::G #t5 = g in #t5.{self::G::target} = #t5.{self::G::target}{self::A}.{self::A::+}(1){(core::int) → self::C};
+  self::A x = let final self::G #t6 = g in let final self::A #t7 = #t6.{self::G::target}{self::A} in let final self::C #t8 = #t6.{self::G::target} = #t7.{self::A::+}(1){(core::int) → self::C} in #t7;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.modular.expect
index facdace..9a5929c 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/property_assign_combiner.dart:29:9: Error: The type 'A' of the getter 'G.target' is not assignable to the type 'B' of the setter 'G.target'.
+// pkg/front_end/testcases/inference_new/property_assign_combiner.dart:29:9: Error: The type 'A' of the getter 'G.target' is not a subtype of the type 'B' of the setter 'G.target'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/property_assign_combiner.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/inference_new/property_assign_combiner.dart'.
-//   A get target => null;
+//   A get target => throw '';
 //         ^^^^^^
 // pkg/front_end/testcases/inference_new/property_assign_combiner.dart:31:12: Context: This is the declaration of the setter 'G.target'.
 //   void set target(B value) {}
@@ -15,123 +15,63 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::C*
-    return null;
-  operator *(self::D* value) → self::C*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::C
+    return throw "";
+  operator *(self::D value) → self::C
+    return throw "";
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::E*
-    return null;
-  operator *(self::F* value) → self::E*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::E
+    return throw "";
+  operator *(self::F value) → self::E
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends core::Object {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  get target() → self::A*
-    return null;
-  set target(self::B* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get target() → self::A
+    return throw "";
+  set target(self::B value) → void {}
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method test1(self::G* g) → void {
-  let final self::G* #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}{self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
-  self::C* x = let final self::G* #t2 = g in #t2.{self::G::target} = #t2.{self::G::target}{self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test1(self::G g) → void {
+  let final self::G #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}{self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
+  self::C x = let final self::G #t2 = g in #t2.{self::G::target} = #t2.{self::G::target}{self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
 }
-static method test2(self::G* g) → void {
-  let final self::G* #t3 = g in #t3.{self::G::target} = #t3.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
-  self::C* x = let final self::G* #t4 = g in #t4.{self::G::target} = #t4.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
+static method test2(self::G g) → void {
+  let final self::G #t3 = g in #t3.{self::G::target} = #t3.{self::G::target}{self::A}.{self::A::+}(1){(core::int) → self::C};
+  self::C x = let final self::G #t4 = g in #t4.{self::G::target} = #t4.{self::G::target}{self::A}.{self::A::+}(1){(core::int) → self::C};
 }
-static method test3(self::G* g) → void {
-  let final self::G* #t5 = g in #t5.{self::G::target} = #t5.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
-  self::A* x = let final self::G* #t6 = g in let final self::A* #t7 = #t6.{self::G::target}{self::A*} in let final self::C* #t8 = #t6.{self::G::target} = #t7.{self::A::+}(1){(core::int*) →* self::C*} in #t7;
+static method test3(self::G g) → void {
+  let final self::G #t5 = g in #t5.{self::G::target} = #t5.{self::G::target}{self::A}.{self::A::+}(1){(core::int) → self::C};
+  self::A x = let final self::G #t6 = g in let final self::A #t7 = #t6.{self::G::target}{self::A} in let final self::C #t8 = #t6.{self::G::target} = #t7.{self::A::+}(1){(core::int) → self::C} in #t7;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.outline.expect
index 1dedb62..bb9ad44 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/property_assign_combiner.dart:29:9: Error: The type 'A' of the getter 'G.target' is not assignable to the type 'B' of the setter 'G.target'.
+// pkg/front_end/testcases/inference_new/property_assign_combiner.dart:29:9: Error: The type 'A' of the getter 'G.target' is not a subtype of the type 'B' of the setter 'G.target'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/property_assign_combiner.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/inference_new/property_assign_combiner.dart'.
-//   A get target => null;
+//   A get target => throw '';
 //         ^^^^^^
 // pkg/front_end/testcases/inference_new/property_assign_combiner.dart:31:12: Context: This is the declaration of the setter 'G.target'.
 //   void set target(B value) {}
@@ -15,112 +15,52 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  operator +(core::int* value) → self::C*
+  operator +(core::int value) → self::C
     ;
-  operator *(self::D* value) → self::C*
+  operator *(self::D value) → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator +(core::int* value) → self::E*
+  operator +(core::int value) → self::E
     ;
-  operator *(self::F* value) → self::E*
+  operator *(self::F value) → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends core::Object {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     ;
-  get target() → self::A*
+  get target() → self::A
     ;
-  set target(self::B* value) → void
+  set target(self::B value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
-static method test1(self::G* g) → void
+static method test1(self::G g) → void
   ;
-static method test2(self::G* g) → void
+static method test2(self::G g) → void
   ;
-static method test3(self::G* g) → void
+static method test3(self::G g) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.transformed.expect
index facdace..9a5929c 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/property_assign_combiner.dart:29:9: Error: The type 'A' of the getter 'G.target' is not assignable to the type 'B' of the setter 'G.target'.
+// pkg/front_end/testcases/inference_new/property_assign_combiner.dart:29:9: Error: The type 'A' of the getter 'G.target' is not a subtype of the type 'B' of the setter 'G.target'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/property_assign_combiner.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/inference_new/property_assign_combiner.dart'.
-//   A get target => null;
+//   A get target => throw '';
 //         ^^^^^^
 // pkg/front_end/testcases/inference_new/property_assign_combiner.dart:31:12: Context: This is the declaration of the setter 'G.target'.
 //   void set target(B value) {}
@@ -15,123 +15,63 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::C*
-    return null;
-  operator *(self::D* value) → self::C*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::C
+    return throw "";
+  operator *(self::D value) → self::C
+    return throw "";
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::E*
-    return null;
-  operator *(self::F* value) → self::E*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::E
+    return throw "";
+  operator *(self::F value) → self::E
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends core::Object {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  get target() → self::A*
-    return null;
-  set target(self::B* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get target() → self::A
+    return throw "";
+  set target(self::B value) → void {}
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method test1(self::G* g) → void {
-  let final self::G* #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}{self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
-  self::C* x = let final self::G* #t2 = g in #t2.{self::G::target} = #t2.{self::G::target}{self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test1(self::G g) → void {
+  let final self::G #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}{self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
+  self::C x = let final self::G #t2 = g in #t2.{self::G::target} = #t2.{self::G::target}{self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
 }
-static method test2(self::G* g) → void {
-  let final self::G* #t3 = g in #t3.{self::G::target} = #t3.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
-  self::C* x = let final self::G* #t4 = g in #t4.{self::G::target} = #t4.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
+static method test2(self::G g) → void {
+  let final self::G #t3 = g in #t3.{self::G::target} = #t3.{self::G::target}{self::A}.{self::A::+}(1){(core::int) → self::C};
+  self::C x = let final self::G #t4 = g in #t4.{self::G::target} = #t4.{self::G::target}{self::A}.{self::A::+}(1){(core::int) → self::C};
 }
-static method test3(self::G* g) → void {
-  let final self::G* #t5 = g in #t5.{self::G::target} = #t5.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
-  self::A* x = let final self::G* #t6 = g in let final self::A* #t7 = #t6.{self::G::target}{self::A*} in let final self::C* #t8 = #t6.{self::G::target} = #t7.{self::A::+}(1){(core::int*) →* self::C*} in #t7;
+static method test3(self::G g) → void {
+  let final self::G #t5 = g in #t5.{self::G::target} = #t5.{self::G::target}{self::A}.{self::A::+}(1){(core::int) → self::C};
+  self::A x = let final self::G #t6 = g in let final self::A #t7 = #t6.{self::G::target}{self::A} in let final self::C #t8 = #t6.{self::G::target} = #t7.{self::A::+}(1){(core::int) → self::C} in #t7;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart
index 1c61afa..f2ffbfb 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -15,9 +15,9 @@
 var field_ref = c. /*@target=C.field*/ field;
 var getter_ref = c. /*@target=C.getter*/ getter;
 var function_ref = c. /*@target=C.function*/ function;
-var field_ref_list = /*@ typeArgs=int* */ [c. /*@target=C.field*/ field];
-var getter_ref_list = /*@ typeArgs=int* */ [c. /*@target=C.getter*/ getter];
-var function_ref_list = /*@ typeArgs=() ->* int* */ [
+var field_ref_list = /*@typeArgs=int*/ [c. /*@target=C.field*/ field];
+var getter_ref_list = /*@typeArgs=int*/ [c. /*@target=C.getter*/ getter];
+var function_ref_list = /*@typeArgs=() -> int*/ [
   c. /*@target=C.function*/ function
 ];
 
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.textual_outline.expect
index ff89627..efab0ad 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.textual_outline_modelled.expect
index e7fed9c..4e1e6c5 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 C c = new C();
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.expect
index d52af61..873c37c 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* field = 0;
-  synthetic constructor •() → self::C*
+  field core::int field = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get getter() → core::int*
+  get getter() → core::int
     return 0;
-  method function() → core::int*
+  method function() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c = new self::C::•();
-static field core::int* field_ref = self::c.{self::C::field}{core::int*};
-static field core::int* getter_ref = self::c.{self::C::getter}{core::int*};
-static field () →* core::int* function_ref = self::c.{self::C::function}{() →* core::int*};
-static field core::List<core::int*>* field_ref_list = <core::int*>[self::c.{self::C::field}{core::int*}];
-static field core::List<core::int*>* getter_ref_list = <core::int*>[self::c.{self::C::getter}{core::int*}];
-static field core::List<() →* core::int*>* function_ref_list = <() →* core::int*>[self::c.{self::C::function}{() →* core::int*}];
+static field self::C c = new self::C::•();
+static field core::int field_ref = self::c.{self::C::field}{core::int};
+static field core::int getter_ref = self::c.{self::C::getter}{core::int};
+static field () → core::int function_ref = self::c.{self::C::function}{() → core::int};
+static field core::List<core::int> field_ref_list = <core::int>[self::c.{self::C::field}{core::int}];
+static field core::List<core::int> getter_ref_list = <core::int>[self::c.{self::C::getter}{core::int}];
+static field core::List<() → core::int> function_ref_list = <() → core::int>[self::c.{self::C::function}{() → core::int}];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.modular.expect
index d52af61..873c37c 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.modular.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* field = 0;
-  synthetic constructor •() → self::C*
+  field core::int field = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get getter() → core::int*
+  get getter() → core::int
     return 0;
-  method function() → core::int*
+  method function() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c = new self::C::•();
-static field core::int* field_ref = self::c.{self::C::field}{core::int*};
-static field core::int* getter_ref = self::c.{self::C::getter}{core::int*};
-static field () →* core::int* function_ref = self::c.{self::C::function}{() →* core::int*};
-static field core::List<core::int*>* field_ref_list = <core::int*>[self::c.{self::C::field}{core::int*}];
-static field core::List<core::int*>* getter_ref_list = <core::int*>[self::c.{self::C::getter}{core::int*}];
-static field core::List<() →* core::int*>* function_ref_list = <() →* core::int*>[self::c.{self::C::function}{() →* core::int*}];
+static field self::C c = new self::C::•();
+static field core::int field_ref = self::c.{self::C::field}{core::int};
+static field core::int getter_ref = self::c.{self::C::getter}{core::int};
+static field () → core::int function_ref = self::c.{self::C::function}{() → core::int};
+static field core::List<core::int> field_ref_list = <core::int>[self::c.{self::C::field}{core::int}];
+static field core::List<core::int> getter_ref_list = <core::int>[self::c.{self::C::getter}{core::int}];
+static field core::List<() → core::int> function_ref_list = <() → core::int>[self::c.{self::C::function}{() → core::int}];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.outline.expect
index ae25f00..d1a434c 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.outline.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* field;
-  synthetic constructor •() → self::C*
+  field core::int field;
+  synthetic constructor •() → self::C
     ;
-  get getter() → core::int*
+  get getter() → core::int
     ;
-  method function() → core::int*
+  method function() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c;
-static field core::int* field_ref;
-static field core::int* getter_ref;
-static field () →* core::int* function_ref;
-static field core::List<core::int*>* field_ref_list;
-static field core::List<core::int*>* getter_ref_list;
-static field core::List<() →* core::int*>* function_ref_list;
+static field self::C c;
+static field core::int field_ref;
+static field core::int getter_ref;
+static field () → core::int function_ref;
+static field core::List<core::int> field_ref_list;
+static field core::List<core::int> getter_ref_list;
+static field core::List<() → core::int> function_ref_list;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.transformed.expect
index 6c6d71c..8a9a788 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.transformed.expect
@@ -1,32 +1,22 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* field = 0;
-  synthetic constructor •() → self::C*
+  field core::int field = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get getter() → core::int*
+  get getter() → core::int
     return 0;
-  method function() → core::int*
+  method function() → core::int
     return 0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C* c = new self::C::•();
-static field core::int* field_ref = self::c.{self::C::field}{core::int*};
-static field core::int* getter_ref = self::c.{self::C::getter}{core::int*};
-static field () →* core::int* function_ref = self::c.{self::C::function}{() →* core::int*};
-static field core::List<core::int*>* field_ref_list = core::_GrowableList::_literal1<core::int*>(self::c.{self::C::field}{core::int*});
-static field core::List<core::int*>* getter_ref_list = core::_GrowableList::_literal1<core::int*>(self::c.{self::C::getter}{core::int*});
-static field core::List<() →* core::int*>* function_ref_list = core::_GrowableList::_literal1<() →* core::int*>(self::c.{self::C::function}{() →* core::int*});
+static field self::C c = new self::C::•();
+static field core::int field_ref = self::c.{self::C::field}{core::int};
+static field core::int getter_ref = self::c.{self::C::getter}{core::int};
+static field () → core::int function_ref = self::c.{self::C::function}{() → core::int};
+static field core::List<core::int> field_ref_list = core::_GrowableList::_literal1<core::int>(self::c.{self::C::field}{core::int});
+static field core::List<core::int> getter_ref_list = core::_GrowableList::_literal1<core::int>(self::c.{self::C::getter}{core::int});
+static field core::List<() → core::int> function_ref_list = core::_GrowableList::_literal1<() → core::int>(self::c.{self::C::function}{() → core::int});
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart
index 6fc21ac..06d4883 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart
@@ -1,20 +1,20 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {
-  C operator +(int value) => null;
-  C operator *(D value) => null;
+  C operator +(int value) => throw '';
+  C operator *(D value) => throw '';
 }
 
 class B {
-  E operator +(int value) => null;
-  E operator *(F value) => null;
+  E operator +(int value) => throw '';
+  E operator *(F value) => throw '';
 }
 
 class C extends B {}
@@ -25,24 +25,24 @@
 
 class F {}
 
-A get target => null;
+A get target => throw '';
 
 void set target(B value) {}
 
 void test1() {
-  target /*@target=A.**/ *= /*@ typeArgs=D* */ f();
-  var /*@ type=C* */ x = target /*@target=A.**/ *= /*@ typeArgs=D* */ f();
+  target /*@target=A.**/ *= /*@typeArgs=D*/ f();
+  var /*@type=C*/ x = target /*@target=A.**/ *= /*@typeArgs=D*/ f();
 }
 
 void test2() {
   /*@target=A.+*/ ++target;
-  var /*@ type=C* */ x = /*@target=A.+*/ ++target;
+  var /*@type=C*/ x = /*@target=A.+*/ ++target;
 }
 
 void test3() {
   target /*@target=A.+*/ ++;
-  var /*@ type=A* */ x = /*@ type=A* */ target
-      /*@ type=C* */ /*@target=A.+*/ ++;
+  var /*@type=A*/ x = /*@type=A*/ target
+      /*@type=C*/ /*@target=A.+*/ ++;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.textual_outline.expect
index 4682e12..6df33e9 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.textual_outline.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class A {
-  C operator +(int value) => null;
-  C operator *(D value) => null;
+  C operator +(int value) => throw '';
+  C operator *(D value) => throw '';
 }
 
 class B {
-  E operator +(int value) => null;
-  E operator *(F value) => null;
+  E operator +(int value) => throw '';
+  E operator *(F value) => throw '';
 }
 
 class C extends B {}
@@ -21,7 +20,7 @@
 
 class F {}
 
-A get target => null;
+A get target => throw '';
 void set target(B value) {}
 void test1() {}
 void test2() {}
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.textual_outline_modelled.expect
index d1ab390..284bad6 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.textual_outline_modelled.expect
@@ -1,17 +1,16 @@
-// @dart = 2.9
 library test;
 
-A get target => null;
-T f<T>() => null;
+A get target => throw '';
+T f<T>() => throw '';
 
 class A {
-  C operator *(D value) => null;
-  C operator +(int value) => null;
+  C operator *(D value) => throw '';
+  C operator +(int value) => throw '';
 }
 
 class B {
-  E operator *(F value) => null;
-  E operator +(int value) => null;
+  E operator *(F value) => throw '';
+  E operator +(int value) => throw '';
 }
 
 class C extends B {}
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.expect
index 0c920ee..4d57d4a 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/static_assign_combiner.dart:28:7: Error: The type 'A' of the getter 'target' is not assignable to the type 'B' of the setter 'target'.
+// pkg/front_end/testcases/inference_new/static_assign_combiner.dart:28:7: Error: The type 'A' of the getter 'target' is not a subtype of the type 'B' of the setter 'target'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/static_assign_combiner.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/inference_new/static_assign_combiner.dart'.
-// A get target => null;
+// A get target => throw '';
 //       ^^^^^^
 // pkg/front_end/testcases/inference_new/static_assign_combiner.dart:30:10: Context: This is the declaration of the setter 'target'.
 // void set target(B value) {}
@@ -15,108 +15,58 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::C*
-    return null;
-  operator *(self::D* value) → self::C*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::C
+    return throw "";
+  operator *(self::D value) → self::C
+    return throw "";
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::E*
-    return null;
-  operator *(self::F* value) → self::E*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::E
+    return throw "";
+  operator *(self::F value) → self::E
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static get target() → self::A*
-  return null;
-static set target(self::B* value) → void {}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static get target() → self::A
+  return throw "";
+static set target(self::B value) → void {}
 static method test1() → void {
-  self::target = self::target.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
-  self::C* x = self::target = self::target.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+  self::target = self::target.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
+  self::C x = self::target = self::target.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
 }
 static method test2() → void {
-  self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
-  self::C* x = self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
+  self::target = self::target.{self::A::+}(1){(core::int) → self::C};
+  self::C x = self::target = self::target.{self::A::+}(1){(core::int) → self::C};
 }
 static method test3() → void {
-  self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
-  self::A* x = let final self::A* #t1 = self::target in let final self::C* #t2 = self::target = #t1.{self::A::+}(1){(core::int*) →* self::C*} in #t1;
+  self::target = self::target.{self::A::+}(1){(core::int) → self::C};
+  self::A x = let final self::A #t1 = self::target in let final self::C #t2 = self::target = #t1.{self::A::+}(1){(core::int) → self::C} in #t1;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.modular.expect
index 0c920ee..4d57d4a 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/static_assign_combiner.dart:28:7: Error: The type 'A' of the getter 'target' is not assignable to the type 'B' of the setter 'target'.
+// pkg/front_end/testcases/inference_new/static_assign_combiner.dart:28:7: Error: The type 'A' of the getter 'target' is not a subtype of the type 'B' of the setter 'target'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/static_assign_combiner.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/inference_new/static_assign_combiner.dart'.
-// A get target => null;
+// A get target => throw '';
 //       ^^^^^^
 // pkg/front_end/testcases/inference_new/static_assign_combiner.dart:30:10: Context: This is the declaration of the setter 'target'.
 // void set target(B value) {}
@@ -15,108 +15,58 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::C*
-    return null;
-  operator *(self::D* value) → self::C*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::C
+    return throw "";
+  operator *(self::D value) → self::C
+    return throw "";
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::E*
-    return null;
-  operator *(self::F* value) → self::E*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::E
+    return throw "";
+  operator *(self::F value) → self::E
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static get target() → self::A*
-  return null;
-static set target(self::B* value) → void {}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static get target() → self::A
+  return throw "";
+static set target(self::B value) → void {}
 static method test1() → void {
-  self::target = self::target.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
-  self::C* x = self::target = self::target.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+  self::target = self::target.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
+  self::C x = self::target = self::target.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
 }
 static method test2() → void {
-  self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
-  self::C* x = self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
+  self::target = self::target.{self::A::+}(1){(core::int) → self::C};
+  self::C x = self::target = self::target.{self::A::+}(1){(core::int) → self::C};
 }
 static method test3() → void {
-  self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
-  self::A* x = let final self::A* #t1 = self::target in let final self::C* #t2 = self::target = #t1.{self::A::+}(1){(core::int*) →* self::C*} in #t1;
+  self::target = self::target.{self::A::+}(1){(core::int) → self::C};
+  self::A x = let final self::A #t1 = self::target in let final self::C #t2 = self::target = #t1.{self::A::+}(1){(core::int) → self::C} in #t1;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.outline.expect
index bd2765e..0837a97 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/static_assign_combiner.dart:28:7: Error: The type 'A' of the getter 'target' is not assignable to the type 'B' of the setter 'target'.
+// pkg/front_end/testcases/inference_new/static_assign_combiner.dart:28:7: Error: The type 'A' of the getter 'target' is not a subtype of the type 'B' of the setter 'target'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/static_assign_combiner.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/inference_new/static_assign_combiner.dart'.
-// A get target => null;
+// A get target => throw '';
 //       ^^^^^^
 // pkg/front_end/testcases/inference_new/static_assign_combiner.dart:30:10: Context: This is the declaration of the setter 'target'.
 // void set target(B value) {}
@@ -15,92 +15,42 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  operator +(core::int* value) → self::C*
+  operator +(core::int value) → self::C
     ;
-  operator *(self::D* value) → self::C*
+  operator *(self::D value) → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator +(core::int* value) → self::E*
+  operator +(core::int value) → self::E
     ;
-  operator *(self::F* value) → self::E*
+  operator *(self::F value) → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
-static get target() → self::A*
+static get target() → self::A
   ;
-static set target(self::B* value) → void
+static set target(self::B value) → void
   ;
 static method test1() → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.transformed.expect
index 0c920ee..4d57d4a 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/static_assign_combiner.dart:28:7: Error: The type 'A' of the getter 'target' is not assignable to the type 'B' of the setter 'target'.
+// pkg/front_end/testcases/inference_new/static_assign_combiner.dart:28:7: Error: The type 'A' of the getter 'target' is not a subtype of the type 'B' of the setter 'target'.
 //  - 'A' is from 'pkg/front_end/testcases/inference_new/static_assign_combiner.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/inference_new/static_assign_combiner.dart'.
-// A get target => null;
+// A get target => throw '';
 //       ^^^^^^
 // pkg/front_end/testcases/inference_new/static_assign_combiner.dart:30:10: Context: This is the declaration of the setter 'target'.
 // void set target(B value) {}
@@ -15,108 +15,58 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::C*
-    return null;
-  operator *(self::D* value) → self::C*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::C
+    return throw "";
+  operator *(self::D value) → self::C
+    return throw "";
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator +(core::int* value) → self::E*
-    return null;
-  operator *(self::F* value) → self::E*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator +(core::int value) → self::E
+    return throw "";
+  operator *(self::F value) → self::E
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static get target() → self::A*
-  return null;
-static set target(self::B* value) → void {}
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static get target() → self::A
+  return throw "";
+static set target(self::B value) → void {}
 static method test1() → void {
-  self::target = self::target.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
-  self::C* x = self::target = self::target.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+  self::target = self::target.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
+  self::C x = self::target = self::target.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
 }
 static method test2() → void {
-  self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
-  self::C* x = self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
+  self::target = self::target.{self::A::+}(1){(core::int) → self::C};
+  self::C x = self::target = self::target.{self::A::+}(1){(core::int) → self::C};
 }
 static method test3() → void {
-  self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
-  self::A* x = let final self::A* #t1 = self::target in let final self::C* #t2 = self::target = #t1.{self::A::+}(1){(core::int*) →* self::C*} in #t1;
+  self::target = self::target.{self::A::+}(1){(core::int) → self::C};
+  self::A x = let final self::A #t1 = self::target in let final self::C #t2 = self::target = #t1.{self::A::+}(1){(core::int) → self::C} in #t1;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart
index 0ab4f9a..b212931 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
@@ -14,7 +14,7 @@
 // circularity, and for error recovery their type is set to `dynamic`.
 // Thereafter, z infers without problems.
 
-var x = /*@ returnType=() ->* invalid-type */ () => f() ? y : z;
+var x = /*@returnType=() -> invalid-type*/ () => f() ? y : z;
 var y = /*@ returnType=invalid-type */ () => x;
 var z = /*@ returnType=invalid-type */ () => x;
 
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.textual_outline.expect
index a20ce2a..d4c04a6 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 bool f() => null;
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.textual_outline_modelled.expect
index a5de498..667ba69 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 bool f() => null;
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.expect
index 276a1c2..2183990 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.expect
@@ -1,18 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@ returnType=() ->* invalid-type */ () => f() ? y : z;
+// var x = /*@returnType=() -> invalid-type*/ () => f() ? y : z;
 //     ^
 //
+// pkg/front_end/testcases/inference_new/strongly_connected_component.dart:8:13: Error: The value 'null' can't be returned from a function with return type 'bool' because 'bool' is not nullable.
+// bool f() => null;
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
-static field invalid-type x = () → () →* invalid-type => self::f() ?{() →* invalid-type} self::y : self::z;
-static field () →* invalid-type y = () → invalid-type => self::x;
-static field () →* invalid-type z = () → invalid-type => self::x;
-static method f() → core::bool*
-  return null;
+static field invalid-type x = () → () → invalid-type => self::f() ?{() → invalid-type} self::y : self::z;
+static field () → invalid-type y = () → invalid-type => self::x;
+static field () → invalid-type z = () → invalid-type => self::x;
+static method f() → core::bool
+  return invalid-expression "pkg/front_end/testcases/inference_new/strongly_connected_component.dart:8:13: Error: The value 'null' can't be returned from a function with return type 'bool' because 'bool' is not nullable.
+bool f() => null;
+            ^" in null as{TypeError,ForNonNullableByDefault} core::bool;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.modular.expect
index 276a1c2..2183990 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.modular.expect
@@ -1,18 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@ returnType=() ->* invalid-type */ () => f() ? y : z;
+// var x = /*@returnType=() -> invalid-type*/ () => f() ? y : z;
 //     ^
 //
+// pkg/front_end/testcases/inference_new/strongly_connected_component.dart:8:13: Error: The value 'null' can't be returned from a function with return type 'bool' because 'bool' is not nullable.
+// bool f() => null;
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
-static field invalid-type x = () → () →* invalid-type => self::f() ?{() →* invalid-type} self::y : self::z;
-static field () →* invalid-type y = () → invalid-type => self::x;
-static field () →* invalid-type z = () → invalid-type => self::x;
-static method f() → core::bool*
-  return null;
+static field invalid-type x = () → () → invalid-type => self::f() ?{() → invalid-type} self::y : self::z;
+static field () → invalid-type y = () → invalid-type => self::x;
+static field () → invalid-type z = () → invalid-type => self::x;
+static method f() → core::bool
+  return invalid-expression "pkg/front_end/testcases/inference_new/strongly_connected_component.dart:8:13: Error: The value 'null' can't be returned from a function with return type 'bool' because 'bool' is not nullable.
+bool f() => null;
+            ^" in null as{TypeError,ForNonNullableByDefault} core::bool;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.outline.expect
index e14b203..099227e 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.outline.expect
@@ -1,19 +1,19 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@ returnType=() ->* invalid-type */ () => f() ? y : z;
+// var x = /*@returnType=() -> invalid-type*/ () => f() ? y : z;
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
 static field invalid-type x;
-static field () →* invalid-type y;
-static field () →* invalid-type z;
-static method f() → core::bool*
+static field () → invalid-type y;
+static field () → invalid-type z;
+static method f() → core::bool
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.transformed.expect
index 276a1c2..476d367 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.transformed.expect
@@ -1,18 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:5: Error: Can't infer the type of 'x': circularity found during type inference.
 // Specify the type explicitly.
-// var x = /*@ returnType=() ->* invalid-type */ () => f() ? y : z;
+// var x = /*@returnType=() -> invalid-type*/ () => f() ? y : z;
 //     ^
 //
+// pkg/front_end/testcases/inference_new/strongly_connected_component.dart:8:13: Error: The value 'null' can't be returned from a function with return type 'bool' because 'bool' is not nullable.
+// bool f() => null;
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
-static field invalid-type x = () → () →* invalid-type => self::f() ?{() →* invalid-type} self::y : self::z;
-static field () →* invalid-type y = () → invalid-type => self::x;
-static field () →* invalid-type z = () → invalid-type => self::x;
-static method f() → core::bool*
-  return null;
+static field invalid-type x = () → () → invalid-type => self::f() ?{() → invalid-type} self::y : self::z;
+static field () → invalid-type y = () → invalid-type => self::x;
+static field () → invalid-type z = () → invalid-type => self::x;
+static method f() → core::bool
+  return invalid-expression "pkg/front_end/testcases/inference_new/strongly_connected_component.dart:8:13: Error: The value 'null' can't be returned from a function with return type 'bool' because 'bool' is not nullable.
+bool f() => null;
+            ^" in null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart b/pkg/front_end/testcases/inference_new/super_index_get.dart
index e947140..1776fc6 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart
@@ -1,22 +1,22 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B {
-  num operator [](int x) => null;
+  num operator [](int x) => throw '';
 }
 
 class C extends B {
-  int operator [](Object x) => null;
+  int operator [](Object x) => throw '';
   void h() {
-    var /*@ type=num* */ x = super /*@target=B.[]*/ [/*@ typeArgs=int* */ f()];
+    var /*@type=num*/ x = super /*@target=B.[]*/ [/*@typeArgs=int*/ f()];
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.textual_outline.expect
index b9815ee..748940d 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.textual_outline.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B {
-  num operator [](int x) => null;
+  num operator [](int x) => throw '';
 }
 
 class C extends B {
-  int operator [](Object x) => null;
+  int operator [](Object x) => throw '';
   void h() {}
 }
 
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.textual_outline_modelled.expect
index b9815ee..748940d 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.textual_outline_modelled.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B {
-  num operator [](int x) => null;
+  num operator [](int x) => throw '';
 }
 
 class C extends B {
-  int operator [](Object x) => null;
+  int operator [](Object x) => throw '';
   void h() {}
 }
 
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.expect
index 2910dae..1087bd1 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.expect
@@ -1,36 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator [](core::int* x) → core::num*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int x) → core::num
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  operator [](core::Object* x) → core::int*
-    return null;
+  operator [](core::Object x) → core::int
+    return throw "";
   method h() → void {
-    core::num* x = super.{self::B::[]}(self::f<core::int*>());
+    core::num x = super.{self::B::[]}(self::f<core::int>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.modular.expect
index 2910dae..1087bd1 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.modular.expect
@@ -1,36 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator [](core::int* x) → core::num*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int x) → core::num
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  operator [](core::Object* x) → core::int*
-    return null;
+  operator [](core::Object x) → core::int
+    return throw "";
   method h() → void {
-    core::num* x = super.{self::B::[]}(self::f<core::int*>());
+    core::num x = super.{self::B::[]}(self::f<core::int>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.outline.expect
index 63eb56f..e41ca19 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.outline.expect
@@ -1,34 +1,24 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator [](core::int* x) → core::num*
+  operator [](core::int x) → core::num
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  operator [](core::Object* x) → core::int*
+  operator [](core::Object x) → core::int
     ;
   method h() → void
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.transformed.expect
index 2910dae..1087bd1 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.transformed.expect
@@ -1,36 +1,26 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator [](core::int* x) → core::num*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](core::int x) → core::num
+    return throw "";
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  operator [](core::Object* x) → core::int*
-    return null;
+  operator [](core::Object x) → core::int
+    return throw "";
   method h() → void {
-    core::num* x = super.{self::B::[]}(self::f<core::int*>());
+    core::num x = super.{self::B::[]}(self::f<core::int>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart
index ada714a..8f3116d 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart
@@ -1,27 +1,27 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class D<T> {}
 
 class E<T> extends D<T> {}
 
 class B<T> {
-  D<T> operator [](E<T> x) => null;
+  D<T> operator [](E<T> x) => throw '';
 }
 
 class C<U> extends B<Future<U>> {
-  E<Future<U>> operator [](Object x) => null;
+  E<Future<U>> operator [](Object x) => throw '';
   void h() {
-    var /*@ type=D<Future<C::U*>*>* */ x =
-        super /*@target=B.[]*/ [/*@ typeArgs=E<Future<C::U*>*>* */ f()];
+    var /*@type=D<Future<C::U%>>*/ x =
+        super /*@target=B.[]*/ [/*@typeArgs=E<Future<C::U%>>*/ f()];
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.textual_outline.expect
index 4208381..99e8ca2 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.textual_outline.expect
@@ -1,20 +1,19 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class D<T> {}
 
 class E<T> extends D<T> {}
 
 class B<T> {
-  D<T> operator [](E<T> x) => null;
+  D<T> operator [](E<T> x) => throw '';
 }
 
 class C<U> extends B<Future<U>> {
-  E<Future<U>> operator [](Object x) => null;
+  E<Future<U>> operator [](Object x) => throw '';
   void h() {}
 }
 
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.textual_outline_modelled.expect
index e2bc3de..b9ba970 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.textual_outline_modelled.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 library test;
 
 import 'dart:async';
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class B<T> {
-  D<T> operator [](E<T> x) => null;
+  D<T> operator [](E<T> x) => throw '';
 }
 
 class C<U> extends B<Future<U>> {
-  E<Future<U>> operator [](Object x) => null;
+  E<Future<U>> operator [](Object x) => throw '';
   void h() {}
 }
 
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.expect
index b2841e6..f9823b6 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.expect
@@ -1,57 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     : super self::D::•()
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  operator [](covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](covariant-by-class self::E<self::B::T%> x) → self::D<self::B::T%>
+    return throw "";
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  operator [](covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
-    return null;
+  operator [](covariant-by-class core::Object x) → self::E<asy::Future<self::C::U%>>
+    return throw "";
   method h() → void {
-    self::D<asy::Future<self::C::U*>*>* x = super.{self::B::[]}(self::f<self::E<asy::Future<self::C::U*>*>*>());
+    self::D<asy::Future<self::C::U%>> x = super.{self::B::[]}(self::f<self::E<asy::Future<self::C::U%>>>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.modular.expect
index b2841e6..f9823b6 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.modular.expect
@@ -1,57 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     : super self::D::•()
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  operator [](covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](covariant-by-class self::E<self::B::T%> x) → self::D<self::B::T%>
+    return throw "";
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  operator [](covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
-    return null;
+  operator [](covariant-by-class core::Object x) → self::E<asy::Future<self::C::U%>>
+    return throw "";
   method h() → void {
-    self::D<asy::Future<self::C::U*>*>* x = super.{self::B::[]}(self::f<self::E<asy::Future<self::C::U*>*>*>());
+    self::D<asy::Future<self::C::U%>> x = super.{self::B::[]}(self::f<self::E<asy::Future<self::C::U%>>>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.outline.expect
index 968cab6..a02d190 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.outline.expect
@@ -1,53 +1,33 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     ;
-  operator [](covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  operator [](covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
+  operator [](covariant-by-class self::E<self::B::T%> x) → self::D<self::B::T%>
+    ;
+}
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
+    ;
+  operator [](covariant-by-class core::Object x) → self::E<asy::Future<self::C::U%>>
     ;
   method h() → void
     ;
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.transformed.expect
index b2841e6..f9823b6 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.transformed.expect
@@ -1,57 +1,37 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-class D<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
+  synthetic constructor •() → self::E<self::E::T%>
     : super self::D::•()
     ;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  operator [](covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator [](covariant-by-class self::E<self::B::T%> x) → self::D<self::B::T%>
+    return throw "";
 }
-class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
-  synthetic constructor •() → self::C<self::C::U*>*
+class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
+  synthetic constructor •() → self::C<self::C::U%>
     : super self::B::•()
     ;
-  operator [](covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
-    return null;
+  operator [](covariant-by-class core::Object x) → self::E<asy::Future<self::C::U%>>
+    return throw "";
   method h() → void {
-    self::D<asy::Future<self::C::U*>*>* x = super.{self::B::[]}(self::f<self::E<asy::Future<self::C::U*>*>*>());
+    self::D<asy::Future<self::C::U%>> x = super.{self::B::[]}(self::f<self::E<asy::Future<self::C::U%>>>());
   }
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/switch.dart b/pkg/front_end/testcases/inference_new/switch.dart
index c4ffee2..628f35c 100644
--- a/pkg/front_end/testcases/inference_new/switch.dart
+++ b/pkg/front_end/testcases/inference_new/switch.dart
@@ -1,11 +1,11 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C<T> {
   const C();
@@ -13,11 +13,11 @@
 
 void test(C<int> x) {
   switch (x) {
-    case const /*@ typeArgs=int* */ C():
-      var /*@ type=int* */ y = 0;
+    case const /*@typeArgs=int*/ C():
+      var /*@type=int*/ y = 0;
       break;
     default:
-      var /*@ type=int* */ y = 0;
+      var /*@type=int*/ y = 0;
       break;
   }
 }
diff --git a/pkg/front_end/testcases/inference_new/switch.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/switch.dart.textual_outline.expect
index 85572a1..cc208af 100644
--- a/pkg/front_end/testcases/inference_new/switch.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/switch.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C<T> {
   const C();
diff --git a/pkg/front_end/testcases/inference_new/switch.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/switch.dart.textual_outline_modelled.expect
index 85039a8..3dfa739 100644
--- a/pkg/front_end/testcases/inference_new/switch.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/switch.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 class C<T> {
   const C();
diff --git a/pkg/front_end/testcases/inference_new/switch.dart.weak.expect b/pkg/front_end/testcases/inference_new/switch.dart.weak.expect
index 6e55000..7c4f04f 100644
--- a/pkg/front_end/testcases/inference_new/switch.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/switch.dart.weak.expect
@@ -1,37 +1,27 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method test(self::C<core::int*>* x) → void {
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test(self::C<core::int> x) → void {
   #L1:
   switch(x) {
     #L2:
     case #C1:
       {
-        core::int* y = 0;
+        core::int y = 0;
         break #L1;
       }
     #L3:
     default:
       {
-        core::int* y = 0;
+        core::int y = 0;
         break #L1;
       }
   }
diff --git a/pkg/front_end/testcases/inference_new/switch.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/switch.dart.weak.modular.expect
index 6e55000..7c4f04f 100644
--- a/pkg/front_end/testcases/inference_new/switch.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/switch.dart.weak.modular.expect
@@ -1,37 +1,27 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method test(self::C<core::int*>* x) → void {
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test(self::C<core::int> x) → void {
   #L1:
   switch(x) {
     #L2:
     case #C1:
       {
-        core::int* y = 0;
+        core::int y = 0;
         break #L1;
       }
     #L3:
     default:
       {
-        core::int* y = 0;
+        core::int y = 0;
         break #L1;
       }
   }
diff --git a/pkg/front_end/testcases/inference_new/switch.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/switch.dart.weak.outline.expect
index b91e7db..388552b 100644
--- a/pkg/front_end/testcases/inference_new/switch.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/switch.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
-static method test(self::C<core::int*>* x) → void
+static method test(self::C<core::int> x) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/switch.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/switch.dart.weak.transformed.expect
index 6e55000..7c4f04f 100644
--- a/pkg/front_end/testcases/inference_new/switch.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/switch.dart.weak.transformed.expect
@@ -1,37 +1,27 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
-static method test(self::C<core::int*>* x) → void {
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
+static method test(self::C<core::int> x) → void {
   #L1:
   switch(x) {
     #L2:
     case #C1:
       {
-        core::int* y = 0;
+        core::int y = 0;
         break #L1;
       }
     #L3:
     default:
       {
-        core::int* y = 0;
+        core::int y = 0;
         break #L1;
       }
   }
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart
index e415a1f..361da3e 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.textual_outline.expect
index 6d54939..7486465 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class A {}
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.textual_outline_modelled.expect
index c8f1be4..16dd2e3e 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 G bar() => new H();
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.expect
index 69cac39..54f308d 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.expect
@@ -1,104 +1,54 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 abstract class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract method foo() → self::A*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo() → self::A;
 }
 abstract class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract method foo() → self::B*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo() → self::B;
 }
 abstract class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract method foo() → core::Object*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo() → core::Object;
 }
 abstract class G extends core::Object implements self::D, self::E, self::F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  abstract member-signature method foo() → self::B*; -> self::E::foo
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method foo() → self::B; -> self::E::foo
 }
 class H extends self::G {
-  synthetic constructor •() → self::H*
+  synthetic constructor •() → self::H
     : super self::G::•()
     ;
-  method foo() → self::C*
+  method foo() → self::C
     return new self::C::•();
 }
-static field self::B* x = self::bar().{self::G::foo}(){() →* self::B*};
-static method bar() → self::G*
+static field self::B x = self::bar().{self::G::foo}(){() → self::B};
+static method bar() → self::G
   return new self::H::•();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.modular.expect
index 69cac39..54f308d 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.modular.expect
@@ -1,104 +1,54 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 abstract class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract method foo() → self::A*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo() → self::A;
 }
 abstract class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract method foo() → self::B*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo() → self::B;
 }
 abstract class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract method foo() → core::Object*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo() → core::Object;
 }
 abstract class G extends core::Object implements self::D, self::E, self::F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  abstract member-signature method foo() → self::B*; -> self::E::foo
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method foo() → self::B; -> self::E::foo
 }
 class H extends self::G {
-  synthetic constructor •() → self::H*
+  synthetic constructor •() → self::H
     : super self::G::•()
     ;
-  method foo() → self::C*
+  method foo() → self::C
     return new self::C::•();
 }
-static field self::B* x = self::bar().{self::G::foo}(){() →* self::B*};
-static method bar() → self::G*
+static field self::B x = self::bar().{self::G::foo}(){() → self::B};
+static method bar() → self::G
   return new self::H::•();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.outline.expect
index b2a5eac..8afc3b6 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.outline.expect
@@ -1,97 +1,47 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 abstract class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  abstract method foo() → self::A*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo() → self::A;
 }
 abstract class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  abstract method foo() → self::B*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo() → self::B;
 }
 abstract class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
-  abstract method foo() → core::Object*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo() → core::Object;
 }
 abstract class G extends core::Object implements self::D, self::E, self::F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     ;
-  abstract member-signature method foo() → self::B*; -> self::E::foo
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method foo() → self::B; -> self::E::foo
 }
 class H extends self::G {
-  synthetic constructor •() → self::H*
+  synthetic constructor •() → self::H
     ;
-  method foo() → self::C*
+  method foo() → self::C
     ;
 }
-static field self::B* x;
-static method bar() → self::G*
+static field self::B x;
+static method bar() → self::G
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.transformed.expect
index 69cac39..54f308d 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.transformed.expect
@@ -1,104 +1,54 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 abstract class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract method foo() → self::A*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo() → self::A;
 }
 abstract class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract method foo() → self::B*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo() → self::B;
 }
 abstract class F extends core::Object {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract method foo() → core::Object*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo() → core::Object;
 }
 abstract class G extends core::Object implements self::D, self::E, self::F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  abstract member-signature method foo() → self::B*; -> self::E::foo
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method foo() → self::B; -> self::E::foo
 }
 class H extends self::G {
-  synthetic constructor •() → self::H*
+  synthetic constructor •() → self::H
     : super self::G::•()
     ;
-  method foo() → self::C*
+  method foo() → self::C
     return new self::C::•();
 }
-static field self::B* x = self::bar().{self::G::foo}(){() →* self::B*};
-static method bar() → self::G*
+static field self::B x = self::bar().{self::G::foo}(){() → self::B};
+static method bar() → self::G
   return new self::H::•();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart
index f36a1e6..937495a5 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
-var v = (f) /*@ typeArgs=int* */ (/*@ returnType=int* */ () {
+var v = (f) /*@typeArgs=int*/ (/*@returnType=int*/ () {
   return 1;
 });
 
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline.expect
index d2782bc..7e89a23 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline_modelled.expect
index 46f2e5d..f4b01cf 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect
index 26fdda1..f47bc68 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<core::int> v = #C1<core::int>(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+}){(() → core::int) → core::List<core::int>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect
index 26fdda1..f47bc68 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<core::int> v = #C1<core::int>(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+}){(() → core::int) → core::List<core::int>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.outline.expect
index f0dd2fa..794a198 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v;
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+static field core::List<core::int> v;
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect
index 2f8644bb..a83c306 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<core::int> v = #C1<core::int>(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
+}){(() → core::int) → core::List<core::int>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return core::_GrowableList::_literal1<self::f::T%>(g(){() → self::f::T%});
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart
index f36a1e6..937495a5 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
-var v = (f) /*@ typeArgs=int* */ (/*@ returnType=int* */ () {
+var v = (f) /*@typeArgs=int*/ (/*@returnType=int*/ () {
   return 1;
 });
 
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline.expect
index d2782bc..7e89a23 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline_modelled.expect
index 46f2e5d..f4b01cf 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 List<T> f<T>(T g()) => <T>[g()];
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect
index 26fdda1..f47bc68 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<core::int> v = #C1<core::int>(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+}){(() → core::int) → core::List<core::int>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect
index 26fdda1..f47bc68 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<core::int> v = #C1<core::int>(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g(){() →* self::f::T*}];
+}){(() → core::int) → core::List<core::int>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return <self::f::T%>[g(){() → self::f::T%}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.outline.expect
index f0dd2fa..794a198 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v;
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+static field core::List<core::int> v;
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect
index 2f8644bb..a83c306 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+static field core::List<core::int> v = #C1<core::int>(() → core::int {
   return 1;
-}){(() →* core::int*) →* core::List<core::int*>*};
-static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
+}){(() → core::int) → core::List<core::int>};
+static method f<T extends core::Object? = dynamic>(() → self::f::T% g) → core::List<self::f::T%>
+  return core::_GrowableList::_literal1<self::f::T%>(g(){() → self::f::T%});
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart
index 49a1e1d..c6c4138 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
 T run<T>(T f()) {
   print("running");
-  var /*@ type=run::T* */ t = f();
+  var /*@type=run::T%*/ t = f();
   print("done running");
   return t;
 }
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.textual_outline.expect
index 6b28b21..2536526 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 T run<T>(T f()) {}
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.textual_outline_modelled.expect
index 3f4a0dc..1e8174f 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 T run<T>(T f()) {}
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.expect
index 96e59b9..d8bf5cf 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static field void y = self::run<void>(#C1);
-static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T* {
+static method run<T extends core::Object? = dynamic>(() → self::run::T% f) → self::run::T% {
   core::print("running");
-  self::run::T* t = f(){() →* self::run::T*};
+  self::run::T% t = f(){() → self::run::T%};
   core::print("done running");
   return t;
 }
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.modular.expect
index 96e59b9..d8bf5cf 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static field void y = self::run<void>(#C1);
-static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T* {
+static method run<T extends core::Object? = dynamic>(() → self::run::T% f) → self::run::T% {
   core::print("running");
-  self::run::T* t = f(){() →* self::run::T*};
+  self::run::T% t = f(){() → self::run::T%};
   core::print("done running");
   return t;
 }
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.outline.expect
index 46dad28..da72055 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static field void y;
-static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T*
+static method run<T extends core::Object? = dynamic>(() → self::run::T% f) → self::run::T%
   ;
 static method printRunning() → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.transformed.expect
index 96e59b9..d8bf5cf 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static field void y = self::run<void>(#C1);
-static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T* {
+static method run<T extends core::Object? = dynamic>(() → self::run::T% f) → self::run::T% {
   core::print("running");
-  self::run::T* t = f(){() →* self::run::T*};
+  self::run::T% t = f(){() → self::run::T%};
   core::print("done running");
   return t;
 }
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart b/pkg/front_end/testcases/inference_new/while_loop.dart
index 153dbd1..f5cef81 100644
--- a/pkg/front_end/testcases/inference_new/while_loop.dart
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 
 void test() {
-  while (/*@ typeArgs=bool* */ f()) {
-    var /*@ type=int* */ x = 0;
+  while (/*@typeArgs=bool*/ f()) {
+    var /*@type=int*/ x = 0;
   }
 }
 
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart.textual_outline.expect b/pkg/front_end/testcases/inference_new/while_loop.dart.textual_outline.expect
index c1725cf..0afd8e8 100644
--- a/pkg/front_end/testcases/inference_new/while_loop.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart.textual_outline.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 void test() {}
 main() {}
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference_new/while_loop.dart.textual_outline_modelled.expect
index f75a9d3..c8d2993 100644
--- a/pkg/front_end/testcases/inference_new/while_loop.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 library test;
 
-T f<T>() => null;
+T f<T>() => throw '';
 main() {}
 void test() {}
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart.weak.expect b/pkg/front_end/testcases/inference_new/while_loop.dart.weak.expect
index 7469e19..9a66570 100644
--- a/pkg/front_end/testcases/inference_new/while_loop.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart.weak.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → void {
-  while (self::f<core::bool*>()) {
-    core::int* x = 0;
+  while (self::f<core::bool>()) {
+    core::int x = 0;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/while_loop.dart.weak.modular.expect
index 7469e19..9a66570 100644
--- a/pkg/front_end/testcases/inference_new/while_loop.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → void {
-  while (self::f<core::bool*>()) {
-    core::int* x = 0;
+  while (self::f<core::bool>()) {
+    core::int x = 0;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/while_loop.dart.weak.outline.expect
index dfd99e1..247b913 100644
--- a/pkg/front_end/testcases/inference_new/while_loop.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/while_loop.dart.weak.transformed.expect
index 7469e19..9a66570 100644
--- a/pkg/front_end/testcases/inference_new/while_loop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → void {
-  while (self::f<core::bool*>()) {
-    core::int* x = 0;
+  while (self::f<core::bool>()) {
+    core::int x = 0;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart
index 419c25f..293a967 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that all three steps of the instantiate-to-bound algorithm
 // implementation, that is, substitution of variables in strongly connected
 // components, substitution of dependencies in the acyclic remainder of the type
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline.expect
index 74f29ec..a476c9a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<X, Y> {}
 
 class C<X, Y> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline_modelled.expect
index 74f29ec..a476c9a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<X, Y> {}
 
 class C<X, Y> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.expect
index 336e446..d65d92b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.expect
@@ -1,52 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*, Z extends (self::D::Y*) →* self::D::X* = (Null) →* self::B<dynamic, dynamic>*, W extends core::num*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*, self::D::Z*, self::D::W*>*
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>, Z extends (self::D::Y) → self::D::X = (Never) → self::B<dynamic, dynamic>, W extends core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y, self::D::Z, self::D::W>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, (Null) →* self::B<dynamic, dynamic>*, core::num*>* d;
+  self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, (Never) → self::B<dynamic, dynamic>, core::num> d;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.modular.expect
index 336e446..d65d92b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.modular.expect
@@ -1,52 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*, Z extends (self::D::Y*) →* self::D::X* = (Null) →* self::B<dynamic, dynamic>*, W extends core::num*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*, self::D::Z*, self::D::W*>*
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>, Z extends (self::D::Y) → self::D::X = (Never) → self::B<dynamic, dynamic>, W extends core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y, self::D::Z, self::D::W>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, (Null) →* self::B<dynamic, dynamic>*, core::num*>* d;
+  self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, (Never) → self::B<dynamic, dynamic>, core::num> d;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.outline.expect
index dfe429a..92b29da 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.outline.expect
@@ -1,48 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*, Z extends (self::D::Y*) →* self::D::X* = (Null) →* self::B<dynamic, dynamic>*, W extends core::num*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*, self::D::Z*, self::D::W*>*
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>, Z extends (self::D::Y) → self::D::X = (Never) → self::B<dynamic, dynamic>, W extends core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y, self::D::Z, self::D::W>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.transformed.expect
index 336e446..d65d92b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.transformed.expect
@@ -1,52 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*, Z extends (self::D::Y*) →* self::D::X* = (Null) →* self::B<dynamic, dynamic>*, W extends core::num*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*, self::D::Z*, self::D::W*>*
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>, Z extends (self::D::Y) → self::D::X = (Never) → self::B<dynamic, dynamic>, W extends core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y, self::D::Z, self::D::W>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, (Null) →* self::B<dynamic, dynamic>*, core::num*>* d;
+  self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, (Never) → self::B<dynamic, dynamic>, core::num> d;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart
index 175695d..9ce7fd2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides missing type arguments to
 // raw interface types found in bodies of methods in cases where those types
 // refer to classes imported from compiled dill files.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.textual_outline.expect
index a112d3e..1f89431 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:collection';
 
 class A {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.textual_outline_modelled.expect
index a112d3e..1f89431 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:collection';
 
 class A {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.expect
index 7de5b6d..43c4e90 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
@@ -6,23 +6,13 @@
 import "dart:collection";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    col::LinkedListEntry<col::LinkedListEntry<dynamic>>* bar;
+    col::LinkedListEntry<col::LinkedListEntry<dynamic>> bar;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  col::LinkedListEntry<col::LinkedListEntry<dynamic>>* bar;
+  col::LinkedListEntry<col::LinkedListEntry<dynamic>> bar;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.modular.expect
index 7de5b6d..43c4e90 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
@@ -6,23 +6,13 @@
 import "dart:collection";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    col::LinkedListEntry<col::LinkedListEntry<dynamic>>* bar;
+    col::LinkedListEntry<col::LinkedListEntry<dynamic>> bar;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  col::LinkedListEntry<col::LinkedListEntry<dynamic>>* bar;
+  col::LinkedListEntry<col::LinkedListEntry<dynamic>> bar;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.outline.expect
index 2d2b792..8dec0c3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:collection";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.transformed.expect
index 7de5b6d..43c4e90 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
@@ -6,23 +6,13 @@
 import "dart:collection";
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    col::LinkedListEntry<col::LinkedListEntry<dynamic>>* bar;
+    col::LinkedListEntry<col::LinkedListEntry<dynamic>> bar;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  col::LinkedListEntry<col::LinkedListEntry<dynamic>>* bar;
+  col::LinkedListEntry<col::LinkedListEntry<dynamic>> bar;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart
index 0ee2811..a97c04f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides type arguments to raw
 // interface types that are themselves used as type arguments of literal lists
 // found in method bodies.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.textual_outline.expect
index 699bfa1..c610622 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 class B {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.textual_outline_modelled.expect
index 699bfa1..c610622 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 class B {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.expect
index ff8c02f..7518bf0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    core::List<self::A<core::num*>*>* a = <self::A<core::num*>*>[];
+    core::List<self::A<core::num>> a = <self::A<core::num>>[];
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::List<self::A<core::num*>*>* a = <self::A<core::num*>*>[];
+  core::List<self::A<core::num>> a = <self::A<core::num>>[];
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.modular.expect
index ff8c02f..7518bf0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.modular.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    core::List<self::A<core::num*>*>* a = <self::A<core::num*>*>[];
+    core::List<self::A<core::num>> a = <self::A<core::num>>[];
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::List<self::A<core::num*>*>* a = <self::A<core::num*>*>[];
+  core::List<self::A<core::num>> a = <self::A<core::num>>[];
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.outline.expect
index 4188002..3804621 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.outline.expect
@@ -1,36 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.transformed.expect
index e273fa4..a129a66 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.transformed.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    core::List<self::A<core::num*>*>* a = core::_GrowableList::•<self::A<core::num*>*>(0);
+    core::List<self::A<core::num>> a = core::_GrowableList::•<self::A<core::num>>(0);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::List<self::A<core::num*>*>* a = core::_GrowableList::•<self::A<core::num*>*>(0);
+  core::List<self::A<core::num>> a = core::_GrowableList::•<self::A<core::num>>(0);
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart
index fbb12f5..9fd0356 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound leaves interface types that have
 // their type arguments defined by the programmer intact in cases when those
 // interface types are used as type arguments of literal lists that are found in
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.textual_outline.expect
index cb20c91..276f316 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {}
 
 class B<U> {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.textual_outline_modelled.expect
index cb20c91..276f316 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {}
 
 class B<U> {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.expect
index 186472b..423da6d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<U extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::U*>*
+class B<U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::U%>
     : super core::Object::•()
     ;
   method fun() → dynamic {
-    core::List<self::A<self::B::U*>*>* foo = <self::A<self::B::U*>*>[];
-    core::List<self::A<core::num*>*>* bar = <self::A<core::num*>*>[];
+    core::List<self::A<self::B::U%>> foo = <self::A<self::B::U%>>[];
+    core::List<self::A<core::num>> bar = <self::A<core::num>>[];
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.modular.expect
index 186472b..423da6d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.modular.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<U extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::U*>*
+class B<U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::U%>
     : super core::Object::•()
     ;
   method fun() → dynamic {
-    core::List<self::A<self::B::U*>*>* foo = <self::A<self::B::U*>*>[];
-    core::List<self::A<core::num*>*>* bar = <self::A<core::num*>*>[];
+    core::List<self::A<self::B::U%>> foo = <self::A<self::B::U%>>[];
+    core::List<self::A<core::num>> bar = <self::A<core::num>>[];
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.outline.expect
index fd7b97f..acf89bd 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.outline.expect
@@ -1,36 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<U extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::U*>*
+class B<U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::U%>
     ;
   method fun() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.transformed.expect
index 55af917..fea4461 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.transformed.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<U extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::U*>*
+class B<U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::U%>
     : super core::Object::•()
     ;
   method fun() → dynamic {
-    core::List<self::A<self::B::U*>*>* foo = core::_GrowableList::•<self::A<self::B::U*>*>(0);
-    core::List<self::A<core::num*>*>* bar = core::_GrowableList::•<self::A<core::num*>*>(0);
+    core::List<self::A<self::B::U%>> foo = core::_GrowableList::•<self::A<self::B::U%>>(0);
+    core::List<self::A<core::num>> bar = core::_GrowableList::•<self::A<core::num>>(0);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart
index 3fea35a..eb85003 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides type arguments to raw
 // interface types that are themselves used as type arguments of literal maps
 // found in method bodies.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.textual_outline.expect
index 699bfa1..c610622 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 class B {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.textual_outline_modelled.expect
index 699bfa1..c610622 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 class B {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.expect
index 28c2e96..1a4be89 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    core::Map<self::A<core::num*>*, self::A<core::num*>*>* a = <self::A<core::num*>*, self::A<core::num*>*>{};
+    core::Map<self::A<core::num>, self::A<core::num>> a = <self::A<core::num>, self::A<core::num>>{};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::Map<self::A<core::num*>*, self::A<core::num*>*>* a = <self::A<core::num*>*, self::A<core::num*>*>{};
+  core::Map<self::A<core::num>, self::A<core::num>> a = <self::A<core::num>, self::A<core::num>>{};
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.modular.expect
index 28c2e96..1a4be89 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.modular.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    core::Map<self::A<core::num*>*, self::A<core::num*>*>* a = <self::A<core::num*>*, self::A<core::num*>*>{};
+    core::Map<self::A<core::num>, self::A<core::num>> a = <self::A<core::num>, self::A<core::num>>{};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::Map<self::A<core::num*>*, self::A<core::num*>*>* a = <self::A<core::num*>*, self::A<core::num*>*>{};
+  core::Map<self::A<core::num>, self::A<core::num>> a = <self::A<core::num>, self::A<core::num>>{};
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.outline.expect
index 4188002..3804621 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.outline.expect
@@ -1,36 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.transformed.expect
index 28c2e96..1a4be89 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.transformed.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    core::Map<self::A<core::num*>*, self::A<core::num*>*>* a = <self::A<core::num*>*, self::A<core::num*>*>{};
+    core::Map<self::A<core::num>, self::A<core::num>> a = <self::A<core::num>, self::A<core::num>>{};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::Map<self::A<core::num*>*, self::A<core::num*>*>* a = <self::A<core::num*>*, self::A<core::num*>*>{};
+  core::Map<self::A<core::num>, self::A<core::num>> a = <self::A<core::num>, self::A<core::num>>{};
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart
index ed2c095..3044ab3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides `dynamic` as the type
 // argument for those positions in type argument lists of interface types that
 // have the bound omitted in the corresponding type parameter, regardless of
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.textual_outline.expect
index 7f87d0e..ed3c7fe 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:collection';
 
 class A<T> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.textual_outline_modelled.expect
index 7f87d0e..ed3c7fe 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:collection';
 
 class A<T> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.expect
index 5aa8724..690f805 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.expect
@@ -1,45 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 import "dart:collection";
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method fun() → dynamic {
-    self::A<dynamic>* a;
-    col::DoubleLinkedQueue<dynamic>* c;
+    self::A<dynamic> a;
+    col::DoubleLinkedQueue<dynamic> c;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A<dynamic>* a;
-  col::DoubleLinkedQueue<dynamic>* c;
+  self::A<dynamic> a;
+  col::DoubleLinkedQueue<dynamic> c;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.modular.expect
index 5aa8724..690f805 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.modular.expect
@@ -1,45 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 import "dart:collection";
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method fun() → dynamic {
-    self::A<dynamic>* a;
-    col::DoubleLinkedQueue<dynamic>* c;
+    self::A<dynamic> a;
+    col::DoubleLinkedQueue<dynamic> c;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A<dynamic>* a;
-  col::DoubleLinkedQueue<dynamic>* c;
+  self::A<dynamic> a;
+  col::DoubleLinkedQueue<dynamic> c;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.outline.expect
index e225d7c..e66434c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:collection";
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method fun() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.transformed.expect
index 5aa8724..690f805 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.transformed.expect
@@ -1,45 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 import "dart:collection";
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method fun() → dynamic {
-    self::A<dynamic>* a;
-    col::DoubleLinkedQueue<dynamic>* c;
+    self::A<dynamic> a;
+    col::DoubleLinkedQueue<dynamic> c;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A<dynamic>* a;
-  col::DoubleLinkedQueue<dynamic>* c;
+  self::A<dynamic> a;
+  col::DoubleLinkedQueue<dynamic> c;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart
index b62a475..511a961 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound produces correct super-bounded
 // types from raw interface types that refer to F-bounded classes and are found
 // in method bodies.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.textual_outline.expect
index b0978ef..2b6461d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends A<T>> {}
 
 class B {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.textual_outline_modelled.expect
index b0978ef..2b6461d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends A<T>> {}
 
 class B {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.expect
index 9b5f2f8..4ff9f1b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends self::A<self::A::T> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    self::A<self::A<dynamic>*>* a;
+    self::A<self::A<dynamic>> a;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A<self::A<dynamic>*>* a;
+  self::A<self::A<dynamic>> a;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.modular.expect
index 9b5f2f8..4ff9f1b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.modular.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends self::A<self::A::T> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    self::A<self::A<dynamic>*>* a;
+    self::A<self::A<dynamic>> a;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A<self::A<dynamic>*>* a;
+  self::A<self::A<dynamic>> a;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.outline.expect
index 08bfd0b..e5e520a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.outline.expect
@@ -1,36 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends self::A<self::A::T> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.transformed.expect
index 9b5f2f8..4ff9f1b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.transformed.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends self::A<self::A::T> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    self::A<self::A<dynamic>*>* a;
+    self::A<self::A<dynamic>> a;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A<self::A<dynamic>*>* a;
+  self::A<self::A<dynamic>> a;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart
index b344f6a..77ea47d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides type arguments to raw
 // typedef types that are themselves used as type arguments of literal lists and
 // are found in method bodies.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.textual_outline.expect
index 8d42d56..bc2eead 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef A<T extends num>(T p);
 
 class B {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.textual_outline_modelled.expect
index 25185b9..30c7151 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B {
   foo() {}
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.expect
index 19c0496..9549520 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    core::List<(core::num*) →* dynamic>* a = <(core::num*) →* dynamic>[];
+    core::List<(core::num) → dynamic> a = <(core::num) → dynamic>[];
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::List<(core::num*) →* dynamic>* a = <(core::num*) →* dynamic>[];
+  core::List<(core::num) → dynamic> a = <(core::num) → dynamic>[];
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.modular.expect
index 19c0496..9549520 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    core::List<(core::num*) →* dynamic>* a = <(core::num*) →* dynamic>[];
+    core::List<(core::num) → dynamic> a = <(core::num) → dynamic>[];
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::List<(core::num*) →* dynamic>* a = <(core::num*) →* dynamic>[];
+  core::List<(core::num) → dynamic> a = <(core::num) → dynamic>[];
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.outline.expect
index 79e9ce6..b13e034 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.transformed.expect
index 1c268dc..fb1d4a8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    core::List<(core::num*) →* dynamic>* a = core::_GrowableList::•<(core::num*) →* dynamic>(0);
+    core::List<(core::num) → dynamic> a = core::_GrowableList::•<(core::num) → dynamic>(0);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::List<(core::num*) →* dynamic>* a = core::_GrowableList::•<(core::num*) →* dynamic>(0);
+  core::List<(core::num) → dynamic> a = core::_GrowableList::•<(core::num) → dynamic>(0);
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart
index 54ccb8f..954d5e6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound leaves typedef types that have
 // their arguments defined by the programmer intact in cases when those typedef
 // types are used as type arguments of literal lists and are found in method
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.textual_outline.expect
index e769498..edfd3bd 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef A<T>(T p);
 
 class B<U> {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.textual_outline_modelled.expect
index 44981e3..c142ab4 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<U> {
   fun() {}
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.expect
index cf2c35d..4d0c12d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-class B<U extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::U*>*
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+class B<U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::U%>
     : super core::Object::•()
     ;
   method fun() → dynamic {
-    core::List<(self::B::U*) →* dynamic>* foo = <(self::B::U*) →* dynamic>[];
-    core::List<(core::num*) →* dynamic>* bar = <(core::num*) →* dynamic>[];
+    core::List<(self::B::U%) → dynamic> foo = <(self::B::U%) → dynamic>[];
+    core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::List<(core::num*) →* dynamic>* bar = <(core::num*) →* dynamic>[];
+  core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.modular.expect
index cf2c35d..4d0c12d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-class B<U extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::U*>*
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+class B<U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::U%>
     : super core::Object::•()
     ;
   method fun() → dynamic {
-    core::List<(self::B::U*) →* dynamic>* foo = <(self::B::U*) →* dynamic>[];
-    core::List<(core::num*) →* dynamic>* bar = <(core::num*) →* dynamic>[];
+    core::List<(self::B::U%) → dynamic> foo = <(self::B::U%) → dynamic>[];
+    core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::List<(core::num*) →* dynamic>* bar = <(core::num*) →* dynamic>[];
+  core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.outline.expect
index 4157d61..44f237a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-class B<U extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::U*>*
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+class B<U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::U%>
     ;
   method fun() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.transformed.expect
index f92729b..a94763d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-class B<U extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::U*>*
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+class B<U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::U%>
     : super core::Object::•()
     ;
   method fun() → dynamic {
-    core::List<(self::B::U*) →* dynamic>* foo = core::_GrowableList::•<(self::B::U*) →* dynamic>(0);
-    core::List<(core::num*) →* dynamic>* bar = core::_GrowableList::•<(core::num*) →* dynamic>(0);
+    core::List<(self::B::U%) → dynamic> foo = core::_GrowableList::•<(self::B::U%) → dynamic>(0);
+    core::List<(core::num) → dynamic> bar = core::_GrowableList::•<(core::num) → dynamic>(0);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::List<(core::num*) →* dynamic>* bar = core::_GrowableList::•<(core::num*) →* dynamic>(0);
+  core::List<(core::num) → dynamic> bar = core::_GrowableList::•<(core::num) → dynamic>(0);
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart
index 53ae25d..506f564 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides type arguments to raw
 // typedef types that are themselves used as type arguments in literal maps
 // found in method bodies.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.textual_outline.expect
index 8d42d56..bc2eead 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef A<T extends num>(T p);
 
 class B {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.textual_outline_modelled.expect
index 25185b9..30c7151 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B {
   foo() {}
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.expect
index 82bfe94..f43edf8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a = <(core::num*) →* dynamic, (core::num*) →* dynamic>{};
+    core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a = <(core::num*) →* dynamic, (core::num*) →* dynamic>{};
+  core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.modular.expect
index 82bfe94..f43edf8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a = <(core::num*) →* dynamic, (core::num*) →* dynamic>{};
+    core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a = <(core::num*) →* dynamic, (core::num*) →* dynamic>{};
+  core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.outline.expect
index 79e9ce6..b13e034 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.transformed.expect
index 82bfe94..f43edf8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a = <(core::num*) →* dynamic, (core::num*) →* dynamic>{};
+    core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a = <(core::num*) →* dynamic, (core::num*) →* dynamic>{};
+  core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart
index ee423c68..ab623d6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides `dynamic` as the type
 // argument for those positions in type argument lists of typedef types that
 // have the bound omitted in the corresponding type parameters.  Only those
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.textual_outline.expect
index e048d6e..a5935b8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef A<T>(T p);
 
 class C {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.textual_outline_modelled.expect
index 98ca1f7..9881ae4 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   foo() {}
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.expect
index f6435f7..5e69689 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    (dynamic) →* dynamic a;
+    (dynamic) → dynamic a;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  (dynamic) →* dynamic a;
+  (dynamic) → dynamic a;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.modular.expect
index f6435f7..5e69689 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    (dynamic) →* dynamic a;
+    (dynamic) → dynamic a;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  (dynamic) →* dynamic a;
+  (dynamic) → dynamic a;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.outline.expect
index fb314c8..a6656085 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.transformed.expect
index f6435f7..5e69689 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    (dynamic) →* dynamic a;
+    (dynamic) → dynamic a;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  (dynamic) →* dynamic a;
+  (dynamic) → dynamic a;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart
index dc3448f..36f36a9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound produces correct super-bounded
 // types from raw typedef types that refer to F-bounded typedefs and are found
 // in method bodies.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.textual_outline.expect
index 90f469f..0fdd67a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef A<T>(T p);
 typedef B<U extends A<U>>(U p);
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.textual_outline_modelled.expect
index 8101382..e05e4bd 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   foo() {}
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.expect
index d4a97aa..dfa4ea9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-typedef B<contravariant U extends (U*) →* dynamic = (dynamic) →* dynamic> = (U*) →* dynamic;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+typedef B<contravariant U extends (U) → dynamic = (dynamic) → dynamic> = (U) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    ((dynamic) →* dynamic) →* dynamic b;
+    ((dynamic) → dynamic) → dynamic b;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  ((dynamic) →* dynamic) →* dynamic b;
+  ((dynamic) → dynamic) → dynamic b;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.modular.expect
index d4a97aa..dfa4ea9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-typedef B<contravariant U extends (U*) →* dynamic = (dynamic) →* dynamic> = (U*) →* dynamic;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+typedef B<contravariant U extends (U) → dynamic = (dynamic) → dynamic> = (U) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    ((dynamic) →* dynamic) →* dynamic b;
+    ((dynamic) → dynamic) → dynamic b;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  ((dynamic) →* dynamic) →* dynamic b;
+  ((dynamic) → dynamic) → dynamic b;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.outline.expect
index 29654c5..9b0752c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-typedef B<contravariant U extends (U*) →* dynamic = (dynamic) →* dynamic> = (U*) →* dynamic;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+typedef B<contravariant U extends (U) → dynamic = (dynamic) → dynamic> = (U) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.transformed.expect
index d4a97aa..dfa4ea9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-typedef B<contravariant U extends (U*) →* dynamic = (dynamic) →* dynamic> = (U*) →* dynamic;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+typedef B<contravariant U extends (U) → dynamic = (dynamic) → dynamic> = (U) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method foo() → dynamic {
-    ((dynamic) →* dynamic) →* dynamic b;
+    ((dynamic) → dynamic) → dynamic b;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  ((dynamic) →* dynamic) →* dynamic b;
+  ((dynamic) → dynamic) → dynamic b;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart
index 0df9ee8..43d99d7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 // This test checks that contravariant occurrences of a type variable in the
 // bounds of the other type variables from the same declaration that are not
 // being transitively depended on by that variable are replaced with Null.
 
 class C<X extends num, Y extends void Function(X)> {}
 
-C c;
+C c = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.textual_outline.expect
index bf98dcd..4a76ee2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 class C<X extends num, Y extends void Function(X)> {}
 
-C c;
+C c = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.textual_outline_modelled.expect
index f4942e67..e612e7f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
-C c;
+C c = throw '';
 
 class C<X extends num, Y extends void Function(X)> {}
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.expect
index 98dbd20..d2e2d0d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num*, Y extends (self::C::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::num, Y extends (self::C::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<core::num*, (Null) →* void>* c;
+static field self::C<core::num, (Never) → void> c = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.modular.expect
index 98dbd20..d2e2d0d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num*, Y extends (self::C::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::num, Y extends (self::C::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<core::num*, (Null) →* void>* c;
+static field self::C<core::num, (Never) → void> c = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.outline.expect
index 4906673..b5bbb8e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num*, Y extends (self::C::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::num, Y extends (self::C::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X, self::C::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<core::num*, (Null) →* void>* c;
+static field self::C<core::num, (Never) → void> c;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.transformed.expect
index 98dbd20..d2e2d0d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num*, Y extends (self::C::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::num, Y extends (self::C::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<core::num*, (Null) →* void>* c;
+static field self::C<core::num, (Never) → void> c = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart
index 5dba617..d6aab8e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that contravariant occurrences of a type variable in the
 // bounds of the other type variables from the same declaration that are not
 // being transitively depended on by that variable are replaced with Null, in
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.textual_outline.expect
index d2983a5..e4cafc7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C<X extends num, Y extends void Function(X)> {}
 
 var lc = <C>[];
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.textual_outline_modelled.expect
index b9ffc63..1572ad5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C<X extends num, Y extends void Function(X)> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.expect
index a7c105a..745fcff 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num*, Y extends (self::C::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::num, Y extends (self::C::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C<core::num*, (Null) →* void>*>* lc = <self::C<core::num*, (Null) →* void>*>[];
-static field core::Map<self::C<core::num*, (Null) →* void>*, self::C<core::num*, (Null) →* void>*>* mc = <self::C<core::num*, (Null) →* void>*, self::C<core::num*, (Null) →* void>*>{};
+static field core::List<self::C<core::num, (Never) → void>> lc = <self::C<core::num, (Never) → void>>[];
+static field core::Map<self::C<core::num, (Never) → void>, self::C<core::num, (Never) → void>> mc = <self::C<core::num, (Never) → void>, self::C<core::num, (Never) → void>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.modular.expect
index a7c105a..745fcff 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.modular.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num*, Y extends (self::C::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::num, Y extends (self::C::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C<core::num*, (Null) →* void>*>* lc = <self::C<core::num*, (Null) →* void>*>[];
-static field core::Map<self::C<core::num*, (Null) →* void>*, self::C<core::num*, (Null) →* void>*>* mc = <self::C<core::num*, (Null) →* void>*, self::C<core::num*, (Null) →* void>*>{};
+static field core::List<self::C<core::num, (Never) → void>> lc = <self::C<core::num, (Never) → void>>[];
+static field core::Map<self::C<core::num, (Never) → void>, self::C<core::num, (Never) → void>> mc = <self::C<core::num, (Never) → void>, self::C<core::num, (Never) → void>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.outline.expect
index e263f73..8b765b5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num*, Y extends (self::C::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::num, Y extends (self::C::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X, self::C::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C<core::num*, (Null) →* void>*>* lc;
-static field core::Map<self::C<core::num*, (Null) →* void>*, self::C<core::num*, (Null) →* void>*>* mc;
+static field core::List<self::C<core::num, (Never) → void>> lc;
+static field core::Map<self::C<core::num, (Never) → void>, self::C<core::num, (Never) → void>> mc;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.transformed.expect
index 92a4252..863970a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.transformed.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<X extends core::num*, Y extends (self::C::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::num, Y extends (self::C::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C<core::num*, (Null) →* void>*>* lc = core::_GrowableList::•<self::C<core::num*, (Null) →* void>*>(0);
-static field core::Map<self::C<core::num*, (Null) →* void>*, self::C<core::num*, (Null) →* void>*>* mc = <self::C<core::num*, (Null) →* void>*, self::C<core::num*, (Null) →* void>*>{};
+static field core::List<self::C<core::num, (Never) → void>> lc = core::_GrowableList::•<self::C<core::num, (Never) → void>>(0);
+static field core::Map<self::C<core::num, (Never) → void>, self::C<core::num, (Never) → void>> mc = <self::C<core::num, (Never) → void>, self::C<core::num, (Never) → void>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart
index c4cd0c4..44277f9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart
@@ -1,17 +1,17 @@
 // 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.
-// @dart=2.9
+
 // This test checks that contravariant occurrences of mutually dependent type
 // variables in the bounds of all of these type variables are replaced with
 // Null.
 
 class D<X extends void Function(X, Y), Y extends void Function(X, Y)> {}
 
-D d;
+D d = throw '';
 
 class E<X extends void Function(X)> {}
 
-E e;
+E e = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.textual_outline.expect
index 7ece5b40..9882a70 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 class D<X extends void Function(X, Y), Y extends void Function(X, Y)> {}
 
-D d;
+D d = throw '';
 
 class E<X extends void Function(X)> {}
 
-E e;
+E e = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.textual_outline_modelled.expect
index 6688dd7..2d273c8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
-D d;
-E e;
+D d = throw '';
+E e = throw '';
 
 class D<X extends void Function(X, Y), Y extends void Function(X, Y)> {}
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.expect
index e4ecd94..d8c3c47 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.expect
@@ -1,37 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void, Y extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends (self::D::X, self::D::Y) → void = (Never, Never) → void, Y extends (self::D::X, self::D::Y) → void = (Never, Never) → void> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<(Null, Null) →* void, (Null, Null) →* void>* d;
-static field self::E<(Null) →* void>* e;
+static field self::D<(Never, Never) → void, (Never, Never) → void> d = throw "";
+static field self::E<(Never) → void> e = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.modular.expect
index e4ecd94..d8c3c47 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.modular.expect
@@ -1,37 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void, Y extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends (self::D::X, self::D::Y) → void = (Never, Never) → void, Y extends (self::D::X, self::D::Y) → void = (Never, Never) → void> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<(Null, Null) →* void, (Null, Null) →* void>* d;
-static field self::E<(Null) →* void>* e;
+static field self::D<(Never, Never) → void, (Never, Never) → void> d = throw "";
+static field self::E<(Never) → void> e = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.outline.expect
index e4a28c9..0be5686 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.outline.expect
@@ -1,36 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void, Y extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends (self::D::X, self::D::Y) → void = (Never, Never) → void, Y extends (self::D::X, self::D::Y) → void = (Never, Never) → void> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<(Null, Null) →* void, (Null, Null) →* void>* d;
-static field self::E<(Null) →* void>* e;
+static field self::D<(Never, Never) → void, (Never, Never) → void> d;
+static field self::E<(Never) → void> e;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.transformed.expect
index e4ecd94..d8c3c47 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.transformed.expect
@@ -1,37 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void, Y extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends (self::D::X, self::D::Y) → void = (Never, Never) → void, Y extends (self::D::X, self::D::Y) → void = (Never, Never) → void> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<(Null, Null) →* void, (Null, Null) →* void>* d;
-static field self::E<(Null) →* void>* e;
+static field self::D<(Never, Never) → void, (Never, Never) → void> d = throw "";
+static field self::E<(Never) → void> e = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart
index fbb857c..3c4aee8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that contravariant occurrences of mutually dependent type
 // variables in the bounds of all of these type variables are replaced with
 // Null, in the case when the raw type is used as a type argument of a list or
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.textual_outline.expect
index 297808d..0e699bf 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class D<X extends void Function(X, Y), Y extends void Function(X, Y)> {}
 
 var ld = <D>[];
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.textual_outline_modelled.expect
index e3650f5..c05a14c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class D<X extends void Function(X, Y), Y extends void Function(X, Y)> {}
 
 class E<X extends void Function(X)> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.expect
index eaaf4d5..ac17639 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void, Y extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends (self::D::X, self::D::Y) → void = (Never, Never) → void, Y extends (self::D::X, self::D::Y) → void = (Never, Never) → void> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::D<(Null, Null) →* void, (Null, Null) →* void>*>* ld = <self::D<(Null, Null) →* void, (Null, Null) →* void>*>[];
-static field core::Map<self::D<(Null, Null) →* void, (Null, Null) →* void>*, self::D<(Null, Null) →* void, (Null, Null) →* void>*>* md = <self::D<(Null, Null) →* void, (Null, Null) →* void>*, self::D<(Null, Null) →* void, (Null, Null) →* void>*>{};
-static field core::List<self::E<(Null) →* void>*>* le = <self::E<(Null) →* void>*>[];
-static field core::Map<self::E<(Null) →* void>*, self::E<(Null) →* void>*>* me = <self::E<(Null) →* void>*, self::E<(Null) →* void>*>{};
+static field core::List<self::D<(Never, Never) → void, (Never, Never) → void>> ld = <self::D<(Never, Never) → void, (Never, Never) → void>>[];
+static field core::Map<self::D<(Never, Never) → void, (Never, Never) → void>, self::D<(Never, Never) → void, (Never, Never) → void>> md = <self::D<(Never, Never) → void, (Never, Never) → void>, self::D<(Never, Never) → void, (Never, Never) → void>>{};
+static field core::List<self::E<(Never) → void>> le = <self::E<(Never) → void>>[];
+static field core::Map<self::E<(Never) → void>, self::E<(Never) → void>> me = <self::E<(Never) → void>, self::E<(Never) → void>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.modular.expect
index eaaf4d5..ac17639 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.modular.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void, Y extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends (self::D::X, self::D::Y) → void = (Never, Never) → void, Y extends (self::D::X, self::D::Y) → void = (Never, Never) → void> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::D<(Null, Null) →* void, (Null, Null) →* void>*>* ld = <self::D<(Null, Null) →* void, (Null, Null) →* void>*>[];
-static field core::Map<self::D<(Null, Null) →* void, (Null, Null) →* void>*, self::D<(Null, Null) →* void, (Null, Null) →* void>*>* md = <self::D<(Null, Null) →* void, (Null, Null) →* void>*, self::D<(Null, Null) →* void, (Null, Null) →* void>*>{};
-static field core::List<self::E<(Null) →* void>*>* le = <self::E<(Null) →* void>*>[];
-static field core::Map<self::E<(Null) →* void>*, self::E<(Null) →* void>*>* me = <self::E<(Null) →* void>*, self::E<(Null) →* void>*>{};
+static field core::List<self::D<(Never, Never) → void, (Never, Never) → void>> ld = <self::D<(Never, Never) → void, (Never, Never) → void>>[];
+static field core::Map<self::D<(Never, Never) → void, (Never, Never) → void>, self::D<(Never, Never) → void, (Never, Never) → void>> md = <self::D<(Never, Never) → void, (Never, Never) → void>, self::D<(Never, Never) → void, (Never, Never) → void>>{};
+static field core::List<self::E<(Never) → void>> le = <self::E<(Never) → void>>[];
+static field core::Map<self::E<(Never) → void>, self::E<(Never) → void>> me = <self::E<(Never) → void>, self::E<(Never) → void>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.outline.expect
index 40367c2..dd225f1 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void, Y extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends (self::D::X, self::D::Y) → void = (Never, Never) → void, Y extends (self::D::X, self::D::Y) → void = (Never, Never) → void> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::D<(Null, Null) →* void, (Null, Null) →* void>*>* ld;
-static field core::Map<self::D<(Null, Null) →* void, (Null, Null) →* void>*, self::D<(Null, Null) →* void, (Null, Null) →* void>*>* md;
-static field core::List<self::E<(Null) →* void>*>* le;
-static field core::Map<self::E<(Null) →* void>*, self::E<(Null) →* void>*>* me;
+static field core::List<self::D<(Never, Never) → void, (Never, Never) → void>> ld;
+static field core::Map<self::D<(Never, Never) → void, (Never, Never) → void>, self::D<(Never, Never) → void, (Never, Never) → void>> md;
+static field core::List<self::E<(Never) → void>> le;
+static field core::Map<self::E<(Never) → void>, self::E<(Never) → void>> me;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.transformed.expect
index c874a62..85dffdf 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.transformed.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<X extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void, Y extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends (self::D::X, self::D::Y) → void = (Never, Never) → void, Y extends (self::D::X, self::D::Y) → void = (Never, Never) → void> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* void = (Null) →* void> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → void = (Never) → void> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::D<(Null, Null) →* void, (Null, Null) →* void>*>* ld = core::_GrowableList::•<self::D<(Null, Null) →* void, (Null, Null) →* void>*>(0);
-static field core::Map<self::D<(Null, Null) →* void, (Null, Null) →* void>*, self::D<(Null, Null) →* void, (Null, Null) →* void>*>* md = <self::D<(Null, Null) →* void, (Null, Null) →* void>*, self::D<(Null, Null) →* void, (Null, Null) →* void>*>{};
-static field core::List<self::E<(Null) →* void>*>* le = core::_GrowableList::•<self::E<(Null) →* void>*>(0);
-static field core::Map<self::E<(Null) →* void>*, self::E<(Null) →* void>*>* me = <self::E<(Null) →* void>*, self::E<(Null) →* void>*>{};
+static field core::List<self::D<(Never, Never) → void, (Never, Never) → void>> ld = core::_GrowableList::•<self::D<(Never, Never) → void, (Never, Never) → void>>(0);
+static field core::Map<self::D<(Never, Never) → void, (Never, Never) → void>, self::D<(Never, Never) → void, (Never, Never) → void>> md = <self::D<(Never, Never) → void, (Never, Never) → void>, self::D<(Never, Never) → void, (Never, Never) → void>>{};
+static field core::List<self::E<(Never) → void>> le = core::_GrowableList::•<self::E<(Never) → void>>(0);
+static field core::Map<self::E<(Never) → void>, self::E<(Never) → void>> me = <self::E<(Never) → void>, self::E<(Never) → void>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart
index ad70003..3780a90 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that covariant occurrences of a type variable in the bounds
 // of the other type variables from the same declaration that are not being
 // transitively depended on by that type variable are replaced with the bound of
@@ -11,18 +11,18 @@
 
 class C<X, Y extends A<X>> {}
 
-C c;
+C c = throw '';
 
 class D<X extends num, Y extends A<X>> {}
 
-D d;
+D d = throw '';
 
 class E<X, Y extends X Function()> {}
 
-E e;
+E e = throw '';
 
 class F<X extends num, Y extends X Function()> {}
 
-F f;
+F f = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.textual_outline.expect
index b73c1a2..f83d746 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.textual_outline.expect
@@ -1,19 +1,18 @@
-// @dart = 2.9
 class A<X> {}
 
 class C<X, Y extends A<X>> {}
 
-C c;
+C c = throw '';
 
 class D<X extends num, Y extends A<X>> {}
 
-D d;
+D d = throw '';
 
 class E<X, Y extends X Function()> {}
 
-E e;
+E e = throw '';
 
 class F<X extends num, Y extends X Function()> {}
 
-F f;
+F f = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.textual_outline_modelled.expect
index 284982d..7e2b8da 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
-C c;
-D d;
-E e;
-F f;
+C c = throw '';
+D d = throw '';
+E e = throw '';
+F f = throw '';
 
 class A<X> {}
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.expect
index 5fa1f9e..518e7e8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.expect
@@ -1,84 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends self::A<self::C::X%> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends self::A<self::D::X*>* = self::A<core::num*>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends self::A<self::D::X> = self::A<core::num>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends core::Object? = dynamic, Y extends () → self::E::X% = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X%, self::E::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
+class F<X extends core::num, Y extends () → self::F::X = () → core::num> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X, self::F::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<dynamic, self::A<dynamic>*>* c;
-static field self::D<core::num*, self::A<core::num*>*>* d;
-static field self::E<dynamic, () →* dynamic>* e;
-static field self::F<core::num*, () →* core::num*>* f;
+static field self::C<dynamic, self::A<dynamic>> c = throw "";
+static field self::D<core::num, self::A<core::num>> d = throw "";
+static field self::E<dynamic, () → dynamic> e = throw "";
+static field self::F<core::num, () → core::num> f = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.modular.expect
index 5fa1f9e..518e7e8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.modular.expect
@@ -1,84 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends self::A<self::C::X%> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends self::A<self::D::X*>* = self::A<core::num*>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends self::A<self::D::X> = self::A<core::num>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends core::Object? = dynamic, Y extends () → self::E::X% = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X%, self::E::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
+class F<X extends core::num, Y extends () → self::F::X = () → core::num> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X, self::F::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<dynamic, self::A<dynamic>*>* c;
-static field self::D<core::num*, self::A<core::num*>*>* d;
-static field self::E<dynamic, () →* dynamic>* e;
-static field self::F<core::num*, () →* core::num*>* f;
+static field self::C<dynamic, self::A<dynamic>> c = throw "";
+static field self::D<core::num, self::A<core::num>> d = throw "";
+static field self::E<dynamic, () → dynamic> e = throw "";
+static field self::F<core::num, () → core::num> f = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.outline.expect
index 24c0e8a..00c898a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.outline.expect
@@ -1,80 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends self::A<self::C::X%> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends self::A<self::D::X*>* = self::A<core::num*>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends self::A<self::D::X> = self::A<core::num>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends core::Object? = dynamic, Y extends () → self::E::X% = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X%, self::E::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
+class F<X extends core::num, Y extends () → self::F::X = () → core::num> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X, self::F::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<dynamic, self::A<dynamic>*>* c;
-static field self::D<core::num*, self::A<core::num*>*>* d;
-static field self::E<dynamic, () →* dynamic>* e;
-static field self::F<core::num*, () →* core::num*>* f;
+static field self::C<dynamic, self::A<dynamic>> c;
+static field self::D<core::num, self::A<core::num>> d;
+static field self::E<dynamic, () → dynamic> e;
+static field self::F<core::num, () → core::num> f;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.transformed.expect
index 5fa1f9e..518e7e8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.transformed.expect
@@ -1,84 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends self::A<self::C::X%> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends self::A<self::D::X*>* = self::A<core::num*>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends self::A<self::D::X> = self::A<core::num>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends core::Object? = dynamic, Y extends () → self::E::X% = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X%, self::E::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
+class F<X extends core::num, Y extends () → self::F::X = () → core::num> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X, self::F::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<dynamic, self::A<dynamic>*>* c;
-static field self::D<core::num*, self::A<core::num*>*>* d;
-static field self::E<dynamic, () →* dynamic>* e;
-static field self::F<core::num*, () →* core::num*>* f;
+static field self::C<dynamic, self::A<dynamic>> c = throw "";
+static field self::D<core::num, self::A<core::num>> d = throw "";
+static field self::E<dynamic, () → dynamic> e = throw "";
+static field self::F<core::num, () → core::num> f = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart
index cd16323..86fa97d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that covariant occurrences of a type variable in the bounds
 // of the other type variables from the same declaration that are not being
 // transitively depended on by that type variable are replaced with the bound of
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.textual_outline.expect
index c0dad6b..498ba79 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X> {}
 
 class C<X, Y extends A<X>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.textual_outline_modelled.expect
index b051960..5ae4099 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X> {}
 
 class C<X, Y extends A<X>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.expect
index 6957306..e0a8184 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.expect
@@ -1,88 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends self::A<self::C::X%> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends self::A<self::D::X*>* = self::A<core::num*>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends self::A<self::D::X> = self::A<core::num>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends core::Object? = dynamic, Y extends () → self::E::X% = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X%, self::E::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
+class F<X extends core::num, Y extends () → self::F::X = () → core::num> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X, self::F::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C<dynamic, self::A<dynamic>*>*>* lc = <self::C<dynamic, self::A<dynamic>*>*>[];
-static field core::Map<self::C<dynamic, self::A<dynamic>*>*, self::C<dynamic, self::A<dynamic>*>*>* mc = <self::C<dynamic, self::A<dynamic>*>*, self::C<dynamic, self::A<dynamic>*>*>{};
-static field core::List<self::D<core::num*, self::A<core::num*>*>*>* ld = <self::D<core::num*, self::A<core::num*>*>*>[];
-static field core::Map<self::D<core::num*, self::A<core::num*>*>*, self::D<core::num*, self::A<core::num*>*>*>* md = <self::D<core::num*, self::A<core::num*>*>*, self::D<core::num*, self::A<core::num*>*>*>{};
-static field core::List<self::E<dynamic, () →* dynamic>*>* le = <self::E<dynamic, () →* dynamic>*>[];
-static field core::Map<self::E<dynamic, () →* dynamic>*, self::E<dynamic, () →* dynamic>*>* me = <self::E<dynamic, () →* dynamic>*, self::E<dynamic, () →* dynamic>*>{};
-static field core::List<self::F<core::num*, () →* core::num*>*>* lf = <self::F<core::num*, () →* core::num*>*>[];
-static field core::Map<self::F<core::num*, () →* core::num*>*, self::F<core::num*, () →* core::num*>*>* mf = <self::F<core::num*, () →* core::num*>*, self::F<core::num*, () →* core::num*>*>{};
+static field core::List<self::C<dynamic, self::A<dynamic>>> lc = <self::C<dynamic, self::A<dynamic>>>[];
+static field core::Map<self::C<dynamic, self::A<dynamic>>, self::C<dynamic, self::A<dynamic>>> mc = <self::C<dynamic, self::A<dynamic>>, self::C<dynamic, self::A<dynamic>>>{};
+static field core::List<self::D<core::num, self::A<core::num>>> ld = <self::D<core::num, self::A<core::num>>>[];
+static field core::Map<self::D<core::num, self::A<core::num>>, self::D<core::num, self::A<core::num>>> md = <self::D<core::num, self::A<core::num>>, self::D<core::num, self::A<core::num>>>{};
+static field core::List<self::E<dynamic, () → dynamic>> le = <self::E<dynamic, () → dynamic>>[];
+static field core::Map<self::E<dynamic, () → dynamic>, self::E<dynamic, () → dynamic>> me = <self::E<dynamic, () → dynamic>, self::E<dynamic, () → dynamic>>{};
+static field core::List<self::F<core::num, () → core::num>> lf = <self::F<core::num, () → core::num>>[];
+static field core::Map<self::F<core::num, () → core::num>, self::F<core::num, () → core::num>> mf = <self::F<core::num, () → core::num>, self::F<core::num, () → core::num>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.modular.expect
index 6957306..e0a8184 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.modular.expect
@@ -1,88 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends self::A<self::C::X%> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends self::A<self::D::X*>* = self::A<core::num*>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends self::A<self::D::X> = self::A<core::num>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends core::Object? = dynamic, Y extends () → self::E::X% = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X%, self::E::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
+class F<X extends core::num, Y extends () → self::F::X = () → core::num> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X, self::F::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C<dynamic, self::A<dynamic>*>*>* lc = <self::C<dynamic, self::A<dynamic>*>*>[];
-static field core::Map<self::C<dynamic, self::A<dynamic>*>*, self::C<dynamic, self::A<dynamic>*>*>* mc = <self::C<dynamic, self::A<dynamic>*>*, self::C<dynamic, self::A<dynamic>*>*>{};
-static field core::List<self::D<core::num*, self::A<core::num*>*>*>* ld = <self::D<core::num*, self::A<core::num*>*>*>[];
-static field core::Map<self::D<core::num*, self::A<core::num*>*>*, self::D<core::num*, self::A<core::num*>*>*>* md = <self::D<core::num*, self::A<core::num*>*>*, self::D<core::num*, self::A<core::num*>*>*>{};
-static field core::List<self::E<dynamic, () →* dynamic>*>* le = <self::E<dynamic, () →* dynamic>*>[];
-static field core::Map<self::E<dynamic, () →* dynamic>*, self::E<dynamic, () →* dynamic>*>* me = <self::E<dynamic, () →* dynamic>*, self::E<dynamic, () →* dynamic>*>{};
-static field core::List<self::F<core::num*, () →* core::num*>*>* lf = <self::F<core::num*, () →* core::num*>*>[];
-static field core::Map<self::F<core::num*, () →* core::num*>*, self::F<core::num*, () →* core::num*>*>* mf = <self::F<core::num*, () →* core::num*>*, self::F<core::num*, () →* core::num*>*>{};
+static field core::List<self::C<dynamic, self::A<dynamic>>> lc = <self::C<dynamic, self::A<dynamic>>>[];
+static field core::Map<self::C<dynamic, self::A<dynamic>>, self::C<dynamic, self::A<dynamic>>> mc = <self::C<dynamic, self::A<dynamic>>, self::C<dynamic, self::A<dynamic>>>{};
+static field core::List<self::D<core::num, self::A<core::num>>> ld = <self::D<core::num, self::A<core::num>>>[];
+static field core::Map<self::D<core::num, self::A<core::num>>, self::D<core::num, self::A<core::num>>> md = <self::D<core::num, self::A<core::num>>, self::D<core::num, self::A<core::num>>>{};
+static field core::List<self::E<dynamic, () → dynamic>> le = <self::E<dynamic, () → dynamic>>[];
+static field core::Map<self::E<dynamic, () → dynamic>, self::E<dynamic, () → dynamic>> me = <self::E<dynamic, () → dynamic>, self::E<dynamic, () → dynamic>>{};
+static field core::List<self::F<core::num, () → core::num>> lf = <self::F<core::num, () → core::num>>[];
+static field core::Map<self::F<core::num, () → core::num>, self::F<core::num, () → core::num>> mf = <self::F<core::num, () → core::num>, self::F<core::num, () → core::num>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.outline.expect
index 8fc64c5..beaaf9f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.outline.expect
@@ -1,84 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends self::A<self::C::X%> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends self::A<self::D::X*>* = self::A<core::num*>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends self::A<self::D::X> = self::A<core::num>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends core::Object? = dynamic, Y extends () → self::E::X% = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X%, self::E::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
+class F<X extends core::num, Y extends () → self::F::X = () → core::num> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X, self::F::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C<dynamic, self::A<dynamic>*>*>* lc;
-static field core::Map<self::C<dynamic, self::A<dynamic>*>*, self::C<dynamic, self::A<dynamic>*>*>* mc;
-static field core::List<self::D<core::num*, self::A<core::num*>*>*>* ld;
-static field core::Map<self::D<core::num*, self::A<core::num*>*>*, self::D<core::num*, self::A<core::num*>*>*>* md;
-static field core::List<self::E<dynamic, () →* dynamic>*>* le;
-static field core::Map<self::E<dynamic, () →* dynamic>*, self::E<dynamic, () →* dynamic>*>* me;
-static field core::List<self::F<core::num*, () →* core::num*>*>* lf;
-static field core::Map<self::F<core::num*, () →* core::num*>*, self::F<core::num*, () →* core::num*>*>* mf;
+static field core::List<self::C<dynamic, self::A<dynamic>>> lc;
+static field core::Map<self::C<dynamic, self::A<dynamic>>, self::C<dynamic, self::A<dynamic>>> mc;
+static field core::List<self::D<core::num, self::A<core::num>>> ld;
+static field core::Map<self::D<core::num, self::A<core::num>>, self::D<core::num, self::A<core::num>>> md;
+static field core::List<self::E<dynamic, () → dynamic>> le;
+static field core::Map<self::E<dynamic, () → dynamic>, self::E<dynamic, () → dynamic>> me;
+static field core::List<self::F<core::num, () → core::num>> lf;
+static field core::Map<self::F<core::num, () → core::num>, self::F<core::num, () → core::num>> mf;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.transformed.expect
index e6f8f2a..bc8162b1 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.transformed.expect
@@ -1,88 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends self::A<self::C::X%> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends self::A<self::D::X*>* = self::A<core::num*>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends self::A<self::D::X> = self::A<core::num>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends core::Object? = dynamic, Y extends () → self::E::X% = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X%, self::E::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
+class F<X extends core::num, Y extends () → self::F::X = () → core::num> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X, self::F::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C<dynamic, self::A<dynamic>*>*>* lc = core::_GrowableList::•<self::C<dynamic, self::A<dynamic>*>*>(0);
-static field core::Map<self::C<dynamic, self::A<dynamic>*>*, self::C<dynamic, self::A<dynamic>*>*>* mc = <self::C<dynamic, self::A<dynamic>*>*, self::C<dynamic, self::A<dynamic>*>*>{};
-static field core::List<self::D<core::num*, self::A<core::num*>*>*>* ld = core::_GrowableList::•<self::D<core::num*, self::A<core::num*>*>*>(0);
-static field core::Map<self::D<core::num*, self::A<core::num*>*>*, self::D<core::num*, self::A<core::num*>*>*>* md = <self::D<core::num*, self::A<core::num*>*>*, self::D<core::num*, self::A<core::num*>*>*>{};
-static field core::List<self::E<dynamic, () →* dynamic>*>* le = core::_GrowableList::•<self::E<dynamic, () →* dynamic>*>(0);
-static field core::Map<self::E<dynamic, () →* dynamic>*, self::E<dynamic, () →* dynamic>*>* me = <self::E<dynamic, () →* dynamic>*, self::E<dynamic, () →* dynamic>*>{};
-static field core::List<self::F<core::num*, () →* core::num*>*>* lf = core::_GrowableList::•<self::F<core::num*, () →* core::num*>*>(0);
-static field core::Map<self::F<core::num*, () →* core::num*>*, self::F<core::num*, () →* core::num*>*>* mf = <self::F<core::num*, () →* core::num*>*, self::F<core::num*, () →* core::num*>*>{};
+static field core::List<self::C<dynamic, self::A<dynamic>>> lc = core::_GrowableList::•<self::C<dynamic, self::A<dynamic>>>(0);
+static field core::Map<self::C<dynamic, self::A<dynamic>>, self::C<dynamic, self::A<dynamic>>> mc = <self::C<dynamic, self::A<dynamic>>, self::C<dynamic, self::A<dynamic>>>{};
+static field core::List<self::D<core::num, self::A<core::num>>> ld = core::_GrowableList::•<self::D<core::num, self::A<core::num>>>(0);
+static field core::Map<self::D<core::num, self::A<core::num>>, self::D<core::num, self::A<core::num>>> md = <self::D<core::num, self::A<core::num>>, self::D<core::num, self::A<core::num>>>{};
+static field core::List<self::E<dynamic, () → dynamic>> le = core::_GrowableList::•<self::E<dynamic, () → dynamic>>(0);
+static field core::Map<self::E<dynamic, () → dynamic>, self::E<dynamic, () → dynamic>> me = <self::E<dynamic, () → dynamic>, self::E<dynamic, () → dynamic>>{};
+static field core::List<self::F<core::num, () → core::num>> lf = core::_GrowableList::•<self::F<core::num, () → core::num>>(0);
+static field core::Map<self::F<core::num, () → core::num>, self::F<core::num, () → core::num>> mf = <self::F<core::num, () → core::num>, self::F<core::num, () → core::num>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart
index 4458c58..b095be0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that covariant occurrences of mutually dependent type
 // variables in the bounds of all of these type variables are replaced with
 // `dynamic`.
@@ -12,14 +12,14 @@
 
 class D<X extends B<X, Y>, Y extends C<X, Y>> {}
 
-D d;
+D d = throw '';
 
 class E<X extends B<X, Y>, Y extends X Function()> {}
 
-E e;
+E e = throw '';
 
 class F<X extends X Function()> {}
 
-F f;
+F f = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.textual_outline.expect
index 2d9ea29..3deef45 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.textual_outline.expect
@@ -1,17 +1,16 @@
-// @dart = 2.9
 class B<X, Y> {}
 
 class C<X, Y> {}
 
 class D<X extends B<X, Y>, Y extends C<X, Y>> {}
 
-D d;
+D d = throw '';
 
 class E<X extends B<X, Y>, Y extends X Function()> {}
 
-E e;
+E e = throw '';
 
 class F<X extends X Function()> {}
 
-F f;
+F f = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.textual_outline_modelled.expect
index 710b59b..bb105d8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
-D d;
-E e;
-F f;
+D d = throw '';
+E e = throw '';
+F f = throw '';
 
 class B<X, Y> {}
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.expect
index e5e5db0..be3048c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.expect
@@ -1,83 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends self::B<self::E::X*, self::E::Y*>* = self::B<dynamic, dynamic>*, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends self::B<self::E::X, self::E::Y> = self::B<dynamic, dynamic>, Y extends () → self::E::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X, self::E::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends () →* self::F::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*>*
+class F<X extends () → self::F::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* d;
-static field self::E<self::B<dynamic, dynamic>*, () →* dynamic>* e;
-static field self::F<() →* dynamic>* f;
+static field self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>> d = throw "";
+static field self::E<self::B<dynamic, dynamic>, () → dynamic> e = throw "";
+static field self::F<() → dynamic> f = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.modular.expect
index e5e5db0..be3048c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.modular.expect
@@ -1,83 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends self::B<self::E::X*, self::E::Y*>* = self::B<dynamic, dynamic>*, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends self::B<self::E::X, self::E::Y> = self::B<dynamic, dynamic>, Y extends () → self::E::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X, self::E::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends () →* self::F::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*>*
+class F<X extends () → self::F::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* d;
-static field self::E<self::B<dynamic, dynamic>*, () →* dynamic>* e;
-static field self::F<() →* dynamic>* f;
+static field self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>> d = throw "";
+static field self::E<self::B<dynamic, dynamic>, () → dynamic> e = throw "";
+static field self::F<() → dynamic> f = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.outline.expect
index e1e033d..0136001 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.outline.expect
@@ -1,79 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends self::B<self::E::X*, self::E::Y*>* = self::B<dynamic, dynamic>*, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends self::B<self::E::X, self::E::Y> = self::B<dynamic, dynamic>, Y extends () → self::E::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X, self::E::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends () →* self::F::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*>*
+class F<X extends () → self::F::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* d;
-static field self::E<self::B<dynamic, dynamic>*, () →* dynamic>* e;
-static field self::F<() →* dynamic>* f;
+static field self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>> d;
+static field self::E<self::B<dynamic, dynamic>, () → dynamic> e;
+static field self::F<() → dynamic> f;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.transformed.expect
index e5e5db0..be3048c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.transformed.expect
@@ -1,83 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends self::B<self::E::X*, self::E::Y*>* = self::B<dynamic, dynamic>*, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends self::B<self::E::X, self::E::Y> = self::B<dynamic, dynamic>, Y extends () → self::E::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X, self::E::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends () →* self::F::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*>*
+class F<X extends () → self::F::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* d;
-static field self::E<self::B<dynamic, dynamic>*, () →* dynamic>* e;
-static field self::F<() →* dynamic>* f;
+static field self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>> d = throw "";
+static field self::E<self::B<dynamic, dynamic>, () → dynamic> e = throw "";
+static field self::F<() → dynamic> f = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart
index 2ce7f11..29f3ee2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that covariant occurrences of mutually dependent type
 // variables in the bounds of all of these type variables are replaced with
 // `dynamic`, in case when the raw type is used as a type argument of a list or
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.textual_outline.expect
index 7ec3207..bd6e734 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<X, Y> {}
 
 class C<X, Y> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.textual_outline_modelled.expect
index 830e511..eb9c16e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<X, Y> {}
 
 class C<X, Y> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.expect
index b532365..0ff0d79 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.expect
@@ -1,86 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends self::B<self::E::X*, self::E::Y*>* = self::B<dynamic, dynamic>*, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends self::B<self::E::X, self::E::Y> = self::B<dynamic, dynamic>, Y extends () → self::E::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X, self::E::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends () →* self::F::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*>*
+class F<X extends () → self::F::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* ld = <self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>[];
-static field core::Map<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* md = <self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>{};
-static field core::List<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* le = <self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>[];
-static field core::Map<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*, self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* me = <self::E<self::B<dynamic, dynamic>*, () →* dynamic>*, self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>{};
-static field core::List<self::F<() →* dynamic>*>* lf = <self::F<() →* dynamic>*>[];
-static field core::Map<self::F<() →* dynamic>*, self::F<() →* dynamic>*>* mf = <self::F<() →* dynamic>*, self::F<() →* dynamic>*>{};
+static field core::List<self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>> ld = <self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>>[];
+static field core::Map<self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>> md = <self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>>{};
+static field core::List<self::E<self::B<dynamic, dynamic>, () → dynamic>> le = <self::E<self::B<dynamic, dynamic>, () → dynamic>>[];
+static field core::Map<self::E<self::B<dynamic, dynamic>, () → dynamic>, self::E<self::B<dynamic, dynamic>, () → dynamic>> me = <self::E<self::B<dynamic, dynamic>, () → dynamic>, self::E<self::B<dynamic, dynamic>, () → dynamic>>{};
+static field core::List<self::F<() → dynamic>> lf = <self::F<() → dynamic>>[];
+static field core::Map<self::F<() → dynamic>, self::F<() → dynamic>> mf = <self::F<() → dynamic>, self::F<() → dynamic>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.modular.expect
index b532365..0ff0d79 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.modular.expect
@@ -1,86 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends self::B<self::E::X*, self::E::Y*>* = self::B<dynamic, dynamic>*, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends self::B<self::E::X, self::E::Y> = self::B<dynamic, dynamic>, Y extends () → self::E::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X, self::E::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends () →* self::F::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*>*
+class F<X extends () → self::F::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* ld = <self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>[];
-static field core::Map<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* md = <self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>{};
-static field core::List<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* le = <self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>[];
-static field core::Map<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*, self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* me = <self::E<self::B<dynamic, dynamic>*, () →* dynamic>*, self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>{};
-static field core::List<self::F<() →* dynamic>*>* lf = <self::F<() →* dynamic>*>[];
-static field core::Map<self::F<() →* dynamic>*, self::F<() →* dynamic>*>* mf = <self::F<() →* dynamic>*, self::F<() →* dynamic>*>{};
+static field core::List<self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>> ld = <self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>>[];
+static field core::Map<self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>> md = <self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>>{};
+static field core::List<self::E<self::B<dynamic, dynamic>, () → dynamic>> le = <self::E<self::B<dynamic, dynamic>, () → dynamic>>[];
+static field core::Map<self::E<self::B<dynamic, dynamic>, () → dynamic>, self::E<self::B<dynamic, dynamic>, () → dynamic>> me = <self::E<self::B<dynamic, dynamic>, () → dynamic>, self::E<self::B<dynamic, dynamic>, () → dynamic>>{};
+static field core::List<self::F<() → dynamic>> lf = <self::F<() → dynamic>>[];
+static field core::Map<self::F<() → dynamic>, self::F<() → dynamic>> mf = <self::F<() → dynamic>, self::F<() → dynamic>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.outline.expect
index ed30299..6ade84a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.outline.expect
@@ -1,82 +1,32 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends self::B<self::E::X*, self::E::Y*>* = self::B<dynamic, dynamic>*, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends self::B<self::E::X, self::E::Y> = self::B<dynamic, dynamic>, Y extends () → self::E::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X, self::E::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends () →* self::F::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*>*
+class F<X extends () → self::F::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* ld;
-static field core::Map<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* md;
-static field core::List<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* le;
-static field core::Map<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*, self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* me;
-static field core::List<self::F<() →* dynamic>*>* lf;
-static field core::Map<self::F<() →* dynamic>*, self::F<() →* dynamic>*>* mf;
+static field core::List<self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>> ld;
+static field core::Map<self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>> md;
+static field core::List<self::E<self::B<dynamic, dynamic>, () → dynamic>> le;
+static field core::Map<self::E<self::B<dynamic, dynamic>, () → dynamic>, self::E<self::B<dynamic, dynamic>, () → dynamic>> me;
+static field core::List<self::F<() → dynamic>> lf;
+static field core::Map<self::F<() → dynamic>, self::F<() → dynamic>> mf;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.transformed.expect
index 555394a..11e12da 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.transformed.expect
@@ -1,86 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends self::B<self::D::X, self::D::Y> = self::B<dynamic, dynamic>, Y extends self::C<self::D::X, self::D::Y> = self::C<dynamic, dynamic>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends self::B<self::E::X*, self::E::Y*>* = self::B<dynamic, dynamic>*, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+class E<X extends self::B<self::E::X, self::E::Y> = self::B<dynamic, dynamic>, Y extends () → self::E::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X, self::E::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<X extends () →* self::F::X* = () →* dynamic> extends core::Object {
-  synthetic constructor •() → self::F<self::F::X*>*
+class F<X extends () → self::F::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* ld = core::_GrowableList::•<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>(0);
-static field core::Map<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* md = <self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>{};
-static field core::List<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* le = core::_GrowableList::•<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>(0);
-static field core::Map<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*, self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* me = <self::E<self::B<dynamic, dynamic>*, () →* dynamic>*, self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>{};
-static field core::List<self::F<() →* dynamic>*>* lf = core::_GrowableList::•<self::F<() →* dynamic>*>(0);
-static field core::Map<self::F<() →* dynamic>*, self::F<() →* dynamic>*>* mf = <self::F<() →* dynamic>*, self::F<() →* dynamic>*>{};
+static field core::List<self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>> ld = core::_GrowableList::•<self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>>(0);
+static field core::Map<self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>> md = <self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, self::D<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>>{};
+static field core::List<self::E<self::B<dynamic, dynamic>, () → dynamic>> le = core::_GrowableList::•<self::E<self::B<dynamic, dynamic>, () → dynamic>>(0);
+static field core::Map<self::E<self::B<dynamic, dynamic>, () → dynamic>, self::E<self::B<dynamic, dynamic>, () → dynamic>> me = <self::E<self::B<dynamic, dynamic>, () → dynamic>, self::E<self::B<dynamic, dynamic>, () → dynamic>>{};
+static field core::List<self::F<() → dynamic>> lf = core::_GrowableList::•<self::F<() → dynamic>>(0);
+static field core::Map<self::F<() → dynamic>, self::F<() → dynamic>> mf = <self::F<() → dynamic>, self::F<() → dynamic>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart
index ee1d838..98e40a9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that covariant and contravariant occurrences of the same
 // type variable in the bounds of the other type variables from the same
 // declaration that are not being transitively depended on by that variable are
@@ -11,10 +11,10 @@
 
 class C<X, Y extends X Function(X)> {}
 
-C c;
+C c = throw '';
 
 class D<X extends num, Y extends X Function(X)> {}
 
-D d;
+D d = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.textual_outline.expect
index 72cb315b..35af3d1 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.textual_outline.expect
@@ -1,11 +1,10 @@
-// @dart = 2.9
 class A<X> {}
 
 class C<X, Y extends X Function(X)> {}
 
-C c;
+C c = throw '';
 
 class D<X extends num, Y extends X Function(X)> {}
 
-D d;
+D d = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.textual_outline_modelled.expect
index 1ca1686..f246f14 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
-C c;
-D d;
+C c = throw '';
+D d = throw '';
 
 class A<X> {}
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.expect
index e5f74ce..d994ba9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.expect
@@ -1,52 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends (self::C::X%) → self::C::X% = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends (self::D::X*) →* self::D::X* = (Null) →* core::num*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends (self::D::X) → self::D::X = (Never) → core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<dynamic, (Null) →* dynamic>* c;
-static field self::D<core::num*, (Null) →* core::num*>* d;
+static field self::C<dynamic, (Never) → dynamic> c = throw "";
+static field self::D<core::num, (Never) → core::num> d = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.modular.expect
index e5f74ce..d994ba9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.modular.expect
@@ -1,52 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends (self::C::X%) → self::C::X% = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends (self::D::X*) →* self::D::X* = (Null) →* core::num*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends (self::D::X) → self::D::X = (Never) → core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<dynamic, (Null) →* dynamic>* c;
-static field self::D<core::num*, (Null) →* core::num*>* d;
+static field self::C<dynamic, (Never) → dynamic> c = throw "";
+static field self::D<core::num, (Never) → core::num> d = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.outline.expect
index 6f49703c..284ebd1 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.outline.expect
@@ -1,50 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends (self::C::X%) → self::C::X% = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends (self::D::X*) →* self::D::X* = (Null) →* core::num*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends (self::D::X) → self::D::X = (Never) → core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<dynamic, (Null) →* dynamic>* c;
-static field self::D<core::num*, (Null) →* core::num*>* d;
+static field self::C<dynamic, (Never) → dynamic> c;
+static field self::D<core::num, (Never) → core::num> d;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.transformed.expect
index e5f74ce..d994ba9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.transformed.expect
@@ -1,52 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends (self::C::X%) → self::C::X% = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends (self::D::X*) →* self::D::X* = (Null) →* core::num*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends (self::D::X) → self::D::X = (Never) → core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<dynamic, (Null) →* dynamic>* c;
-static field self::D<core::num*, (Null) →* core::num*>* d;
+static field self::C<dynamic, (Never) → dynamic> c = throw "";
+static field self::D<core::num, (Never) → core::num> d = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart
index 9847562..bbfa488 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that covariant and contravariant occurrences of the same
 // type variable in the bounds of the other type variables from the same
 // declaration that are not being transitively depended on by that variable are
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.textual_outline.expect
index 769a041..fc6b50f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X> {}
 
 class C<X, Y extends X Function(X)> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.textual_outline_modelled.expect
index a56fed6f..dd05869 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X> {}
 
 class C<X, Y extends X Function(X)> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.expect
index 2cf489e..908964a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.expect
@@ -1,54 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends (self::C::X%) → self::C::X% = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends (self::D::X*) →* self::D::X* = (Null) →* core::num*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends (self::D::X) → self::D::X = (Never) → core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C<dynamic, (Null) →* dynamic>*>* lc = <self::C<dynamic, (Null) →* dynamic>*>[];
-static field core::Map<self::C<dynamic, (Null) →* dynamic>*, self::C<dynamic, (Null) →* dynamic>*>* mc = <self::C<dynamic, (Null) →* dynamic>*, self::C<dynamic, (Null) →* dynamic>*>{};
-static field core::List<self::D<core::num*, (Null) →* core::num*>*>* ld = <self::D<core::num*, (Null) →* core::num*>*>[];
-static field core::Map<self::D<core::num*, (Null) →* core::num*>*, self::D<core::num*, (Null) →* core::num*>*>* md = <self::D<core::num*, (Null) →* core::num*>*, self::D<core::num*, (Null) →* core::num*>*>{};
+static field core::List<self::C<dynamic, (Never) → dynamic>> lc = <self::C<dynamic, (Never) → dynamic>>[];
+static field core::Map<self::C<dynamic, (Never) → dynamic>, self::C<dynamic, (Never) → dynamic>> mc = <self::C<dynamic, (Never) → dynamic>, self::C<dynamic, (Never) → dynamic>>{};
+static field core::List<self::D<core::num, (Never) → core::num>> ld = <self::D<core::num, (Never) → core::num>>[];
+static field core::Map<self::D<core::num, (Never) → core::num>, self::D<core::num, (Never) → core::num>> md = <self::D<core::num, (Never) → core::num>, self::D<core::num, (Never) → core::num>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.modular.expect
index 2cf489e..908964a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.modular.expect
@@ -1,54 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends (self::C::X%) → self::C::X% = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends (self::D::X*) →* self::D::X* = (Null) →* core::num*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends (self::D::X) → self::D::X = (Never) → core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C<dynamic, (Null) →* dynamic>*>* lc = <self::C<dynamic, (Null) →* dynamic>*>[];
-static field core::Map<self::C<dynamic, (Null) →* dynamic>*, self::C<dynamic, (Null) →* dynamic>*>* mc = <self::C<dynamic, (Null) →* dynamic>*, self::C<dynamic, (Null) →* dynamic>*>{};
-static field core::List<self::D<core::num*, (Null) →* core::num*>*>* ld = <self::D<core::num*, (Null) →* core::num*>*>[];
-static field core::Map<self::D<core::num*, (Null) →* core::num*>*, self::D<core::num*, (Null) →* core::num*>*>* md = <self::D<core::num*, (Null) →* core::num*>*, self::D<core::num*, (Null) →* core::num*>*>{};
+static field core::List<self::C<dynamic, (Never) → dynamic>> lc = <self::C<dynamic, (Never) → dynamic>>[];
+static field core::Map<self::C<dynamic, (Never) → dynamic>, self::C<dynamic, (Never) → dynamic>> mc = <self::C<dynamic, (Never) → dynamic>, self::C<dynamic, (Never) → dynamic>>{};
+static field core::List<self::D<core::num, (Never) → core::num>> ld = <self::D<core::num, (Never) → core::num>>[];
+static field core::Map<self::D<core::num, (Never) → core::num>, self::D<core::num, (Never) → core::num>> md = <self::D<core::num, (Never) → core::num>, self::D<core::num, (Never) → core::num>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.outline.expect
index b8ba08d..3364ab8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.outline.expect
@@ -1,52 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends (self::C::X%) → self::C::X% = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends (self::D::X*) →* self::D::X* = (Null) →* core::num*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends (self::D::X) → self::D::X = (Never) → core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C<dynamic, (Null) →* dynamic>*>* lc;
-static field core::Map<self::C<dynamic, (Null) →* dynamic>*, self::C<dynamic, (Null) →* dynamic>*>* mc;
-static field core::List<self::D<core::num*, (Null) →* core::num*>*>* ld;
-static field core::Map<self::D<core::num*, (Null) →* core::num*>*, self::D<core::num*, (Null) →* core::num*>*>* md;
+static field core::List<self::C<dynamic, (Never) → dynamic>> lc;
+static field core::Map<self::C<dynamic, (Never) → dynamic>, self::C<dynamic, (Never) → dynamic>> mc;
+static field core::List<self::D<core::num, (Never) → core::num>> ld;
+static field core::Map<self::D<core::num, (Never) → core::num>, self::D<core::num, (Never) → core::num>> md;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.transformed.expect
index a96c10c..bdc99f7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.transformed.expect
@@ -1,54 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends (self::C::X%) → self::C::X% = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends core::num*, Y extends (self::D::X*) →* self::D::X* = (Null) →* core::num*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends core::num, Y extends (self::D::X) → self::D::X = (Never) → core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C<dynamic, (Null) →* dynamic>*>* lc = core::_GrowableList::•<self::C<dynamic, (Null) →* dynamic>*>(0);
-static field core::Map<self::C<dynamic, (Null) →* dynamic>*, self::C<dynamic, (Null) →* dynamic>*>* mc = <self::C<dynamic, (Null) →* dynamic>*, self::C<dynamic, (Null) →* dynamic>*>{};
-static field core::List<self::D<core::num*, (Null) →* core::num*>*>* ld = core::_GrowableList::•<self::D<core::num*, (Null) →* core::num*>*>(0);
-static field core::Map<self::D<core::num*, (Null) →* core::num*>*, self::D<core::num*, (Null) →* core::num*>*>* md = <self::D<core::num*, (Null) →* core::num*>*, self::D<core::num*, (Null) →* core::num*>*>{};
+static field core::List<self::C<dynamic, (Never) → dynamic>> lc = core::_GrowableList::•<self::C<dynamic, (Never) → dynamic>>(0);
+static field core::Map<self::C<dynamic, (Never) → dynamic>, self::C<dynamic, (Never) → dynamic>> mc = <self::C<dynamic, (Never) → dynamic>, self::C<dynamic, (Never) → dynamic>>{};
+static field core::List<self::D<core::num, (Never) → core::num>> ld = core::_GrowableList::•<self::D<core::num, (Never) → core::num>>(0);
+static field core::Map<self::D<core::num, (Never) → core::num>, self::D<core::num, (Never) → core::num>> md = <self::D<core::num, (Never) → core::num>, self::D<core::num, (Never) → core::num>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart
index 4b09046..8425634 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides missing type arguments to
 // raw interface types that refer to classes imported from compiled dill files.
 
 import 'dart:collection';
 
-LinkedListEntry y;
+LinkedListEntry y = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.textual_outline.expect
index e8bd1bf..0719cde 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 import 'dart:collection';
 
-LinkedListEntry y;
+LinkedListEntry y = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.textual_outline_modelled.expect
index e8bd1bf..0719cde 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 import 'dart:collection';
 
-LinkedListEntry y;
+LinkedListEntry y = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.expect
index 175fa49..8a0db2b5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:collection" as col;
 
 import "dart:collection";
 
-static field col::LinkedListEntry<col::LinkedListEntry<dynamic>>* y;
+static field col::LinkedListEntry<col::LinkedListEntry<dynamic>> y = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.modular.expect
index 175fa49..8a0db2b5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:collection" as col;
 
 import "dart:collection";
 
-static field col::LinkedListEntry<col::LinkedListEntry<dynamic>>* y;
+static field col::LinkedListEntry<col::LinkedListEntry<dynamic>> y = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.outline.expect
index 510b6e2..bd70c87 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:collection" as col;
 
 import "dart:collection";
 
-static field col::LinkedListEntry<col::LinkedListEntry<dynamic>>* y;
+static field col::LinkedListEntry<col::LinkedListEntry<dynamic>> y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.transformed.expect
index 175fa49..8a0db2b5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:collection" as col;
 
 import "dart:collection";
 
-static field col::LinkedListEntry<col::LinkedListEntry<dynamic>>* y;
+static field col::LinkedListEntry<col::LinkedListEntry<dynamic>> y = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart
index bac8aea..4e50e29 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that type inference uses type arguments provided by
 // instantiate to bound in type annotations to infer the type arguments of the
 // corresponding constructor invocations.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.textual_outline.expect
index 2a64c01..e078af5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.textual_outline_modelled.expect
index 2a64c01..e078af5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.expect
index 5da171e..449a91e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A<core::num*>* a = new self::A::•<core::num*>();
+  self::A<core::num> a = new self::A::•<core::num>();
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.modular.expect
index 5da171e..449a91e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.modular.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A<core::num*>* a = new self::A::•<core::num*>();
+  self::A<core::num> a = new self::A::•<core::num>();
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.outline.expect
index 408de03..5509e65 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.transformed.expect
index 5da171e..449a91e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.transformed.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A<core::num*>* a = new self::A::•<core::num*>();
+  self::A<core::num> a = new self::A::•<core::num>();
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart
index 175c2eb..00dae45 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that type inference invokes instantiate to bound to provide
 // type arguments to constructor invocations in cases when nothing constrains
 // the arguments or the invocation.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.textual_outline.expect
index 2a64c01..e078af5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.textual_outline_modelled.expect
index 2a64c01..e078af5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.expect
index 13d0abf..2aeb1df 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::A::•<core::num*>();
+  new self::A::•<core::num>();
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.modular.expect
index 13d0abf..2aeb1df 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.modular.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::A::•<core::num*>();
+  new self::A::•<core::num>();
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.outline.expect
index 408de03..5509e65 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.transformed.expect
index 13d0abf..2aeb1df 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.transformed.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::A::•<core::num*>();
+  new self::A::•<core::num>();
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart
index 8dc9d73..60d5f7d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound could be run on partially defined
 // type arguments supplied by type inference.
 
 class A<T> {}
 
 class B<T extends num, S extends List<T>> extends A<T> {
-  B([T x]) {}
+  B([T? x]) {}
 }
 
 main() {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.textual_outline.expect
index 76ddc76..b1ab2c6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 class A<T> {}
 
 class B<T extends num, S extends List<T>> extends A<T> {
-  B([T x]) {}
+  B([T? x]) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.textual_outline_modelled.expect
index 76ddc76..b1ab2c6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 class A<T> {}
 
 class B<T extends num, S extends List<T>> extends A<T> {
-  B([T x]) {}
+  B([T? x]) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.expect
index f971b81..fd745ff 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.expect
@@ -1,30 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::num*, S extends core::List<self::B::T*>* = core::List<core::num*>*> extends self::A<self::B::T*> {
-  constructor •([self::B::T* x = #C1]) → self::B<self::B::T*, self::B::S*>*
+class B<T extends core::num, S extends core::List<self::B::T> = core::List<core::num>> extends self::A<self::B::T> {
+  constructor •([self::B::T? x = #C1]) → self::B<self::B::T, self::B::S>
     : super self::A::•() {}
 }
 static method main() → dynamic {
-  self::B<core::num*, core::List<core::num*>*>* x;
-  self::B<core::int*, core::List<core::int*>*>* y = new self::B::•<core::int*, core::List<core::int*>*>(3);
-  self::A<core::int*>* z = new self::B::•<core::int*, core::List<core::int*>*>();
+  self::B<core::num, core::List<core::num>> x;
+  self::B<core::int, core::List<core::int>> y = new self::B::•<core::int, core::List<core::int>>(3);
+  self::A<core::int> z = new self::B::•<core::int, core::List<core::int>>();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.modular.expect
index f971b81..fd745ff 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.modular.expect
@@ -1,30 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::num*, S extends core::List<self::B::T*>* = core::List<core::num*>*> extends self::A<self::B::T*> {
-  constructor •([self::B::T* x = #C1]) → self::B<self::B::T*, self::B::S*>*
+class B<T extends core::num, S extends core::List<self::B::T> = core::List<core::num>> extends self::A<self::B::T> {
+  constructor •([self::B::T? x = #C1]) → self::B<self::B::T, self::B::S>
     : super self::A::•() {}
 }
 static method main() → dynamic {
-  self::B<core::num*, core::List<core::num*>*>* x;
-  self::B<core::int*, core::List<core::int*>*>* y = new self::B::•<core::int*, core::List<core::int*>*>(3);
-  self::A<core::int*>* z = new self::B::•<core::int*, core::List<core::int*>*>();
+  self::B<core::num, core::List<core::num>> x;
+  self::B<core::int, core::List<core::int>> y = new self::B::•<core::int, core::List<core::int>>(3);
+  self::A<core::int> z = new self::B::•<core::int, core::List<core::int>>();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.outline.expect
index 0cf94f7..101b039 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::num*, S extends core::List<self::B::T*>* = core::List<core::num*>*> extends self::A<self::B::T*> {
-  constructor •([self::B::T* x = null]) → self::B<self::B::T*, self::B::S*>*
+class B<T extends core::num, S extends core::List<self::B::T> = core::List<core::num>> extends self::A<self::B::T> {
+  constructor •([self::B::T? x = null]) → self::B<self::B::T, self::B::S>
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.transformed.expect
index f971b81..fd745ff 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.transformed.expect
@@ -1,30 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::num*, S extends core::List<self::B::T*>* = core::List<core::num*>*> extends self::A<self::B::T*> {
-  constructor •([self::B::T* x = #C1]) → self::B<self::B::T*, self::B::S*>*
+class B<T extends core::num, S extends core::List<self::B::T> = core::List<core::num>> extends self::A<self::B::T> {
+  constructor •([self::B::T? x = #C1]) → self::B<self::B::T, self::B::S>
     : super self::A::•() {}
 }
 static method main() → dynamic {
-  self::B<core::num*, core::List<core::num*>*>* x;
-  self::B<core::int*, core::List<core::int*>*>* y = new self::B::•<core::int*, core::List<core::int*>*>(3);
-  self::A<core::int*>* z = new self::B::•<core::int*, core::List<core::int*>*>();
+  self::B<core::num, core::List<core::num>> x;
+  self::B<core::int, core::List<core::int>> y = new self::B::•<core::int, core::List<core::int>>(3);
+  self::A<core::int> z = new self::B::•<core::int, core::List<core::int>>();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart
index bf65124..4bdbe0d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that super-bounded types that are produced by instantiate to
 // bound are rejected when inferred as type arguments of constructor
 // invocations.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.textual_outline.expect
index 8d9c769..d9993ef 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<T extends Comparable<T>> {}
 
 var y = new B();
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.textual_outline_modelled.expect
index a984318..58bc104 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<T extends Comparable<T>> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.expect
index 7c188466..f00a272 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.expect
@@ -1,9 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<T>' of the type variable 'T' on 'B'.
+// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<Object?>' doesn't conform to the bound 'Comparable<T>' of the type variable 'T' on 'B'.
 //  - 'Comparable' is from 'dart:core'.
+//  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 // var y = new B();
 //             ^
@@ -14,20 +15,10 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Comparable<self::B::T*>* = core::Comparable<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Comparable<self::B::T> = core::Comparable<dynamic>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<core::Comparable<dynamic>*>* y = new self::B::•<core::Comparable<dynamic>*>();
+static field self::B<core::Comparable<core::Object?>> y = new self::B::•<core::Comparable<core::Object?>>();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.modular.expect
index 7c188466..f00a272 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.modular.expect
@@ -1,9 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<T>' of the type variable 'T' on 'B'.
+// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<Object?>' doesn't conform to the bound 'Comparable<T>' of the type variable 'T' on 'B'.
 //  - 'Comparable' is from 'dart:core'.
+//  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 // var y = new B();
 //             ^
@@ -14,20 +15,10 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Comparable<self::B::T*>* = core::Comparable<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Comparable<self::B::T> = core::Comparable<dynamic>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<core::Comparable<dynamic>*>* y = new self::B::•<core::Comparable<dynamic>*>();
+static field self::B<core::Comparable<core::Object?>> y = new self::B::•<core::Comparable<core::Object?>>();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.outline.expect
index 297104d5..a30e1fe 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Comparable<self::B::T*>* = core::Comparable<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Comparable<self::B::T> = core::Comparable<dynamic>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<core::Comparable<dynamic>*>* y;
+static field self::B<core::Comparable<core::Object?>> y;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.transformed.expect
index 7c188466..f00a272 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.transformed.expect
@@ -1,9 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<T>' of the type variable 'T' on 'B'.
+// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<Object?>' doesn't conform to the bound 'Comparable<T>' of the type variable 'T' on 'B'.
 //  - 'Comparable' is from 'dart:core'.
+//  - 'Object' is from 'dart:core'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 // var y = new B();
 //             ^
@@ -14,20 +15,10 @@
 import self as self;
 import "dart:core" as core;
 
-class B<T extends core::Comparable<self::B::T*>* = core::Comparable<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Comparable<self::B::T> = core::Comparable<dynamic>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<core::Comparable<dynamic>*>* y = new self::B::•<core::Comparable<dynamic>*>();
+static field self::B<core::Comparable<core::Object?>> y = new self::B::•<core::Comparable<core::Object?>>();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart
index 29ad607..6248873 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides type arguments to raw
 // interface types that are used in the module outline.
 
 class A<T extends num> {}
 
 class B {
-  foo(A a) => null;
-  A bar() => null;
+  foo(A a) => throw '';
+  A bar() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.textual_outline.expect
index 05dd2d4..4a059a6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 class B {
-  foo(A a) => null;
-  A bar() => null;
+  foo(A a) => throw '';
+  A bar() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.textual_outline_modelled.expect
index f9af173..7a68674 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 class B {
-  A bar() => null;
-  foo(A a) => null;
+  A bar() => throw '';
+  foo(A a) => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.expect
index e04675b..8db49464 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method foo(self::A<core::num*>* a) → dynamic
-    return null;
-  method bar() → self::A<core::num*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(self::A<core::num> a) → dynamic
+    return throw "";
+  method bar() → self::A<core::num>
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.modular.expect
index e04675b..8db49464 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.modular.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method foo(self::A<core::num*>* a) → dynamic
-    return null;
-  method bar() → self::A<core::num*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(self::A<core::num> a) → dynamic
+    return throw "";
+  method bar() → self::A<core::num>
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.outline.expect
index 2886fc8..7b196cd 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method foo(self::A<core::num*>* a) → dynamic
+  method foo(self::A<core::num> a) → dynamic
     ;
-  method bar() → self::A<core::num*>*
+  method bar() → self::A<core::num>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.transformed.expect
index e04675b..8db49464 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.transformed.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method foo(self::A<core::num*>* a) → dynamic
-    return null;
-  method bar() → self::A<core::num*>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(self::A<core::num> a) → dynamic
+    return throw "";
+  method bar() → self::A<core::num>
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart
index 8cf9420..5d026c9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides type arguments to raw
 // interface types that are themselves used as type arguments of literal lists.
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.textual_outline.expect
index a6f1bb6..2e3bf3c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 var a = <A>[];
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.textual_outline_modelled.expect
index 8c591bc..9b30539 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.expect
index f1af679..0aabe89 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::A<core::num*>*>* a = <self::A<core::num*>*>[];
+static field core::List<self::A<core::num>> a = <self::A<core::num>>[];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.modular.expect
index f1af679..0aabe89 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::A<core::num*>*>* a = <self::A<core::num*>*>[];
+static field core::List<self::A<core::num>> a = <self::A<core::num>>[];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.outline.expect
index ce6b446..478087c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::A<core::num*>*>* a;
+static field core::List<self::A<core::num>> a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.transformed.expect
index 7b0f742..3a41c7a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::A<core::num*>*>* a = core::_GrowableList::•<self::A<core::num*>*>(0);
+static field core::List<self::A<core::num>> a = core::_GrowableList::•<self::A<core::num>>(0);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart
index 1c06113..ad3d94c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound leaves interface types that have
 // their type arguments defined by the programmer intact in cases when those
 // interface types are used as type arguments of literal lists.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.textual_outline.expect
index 62a71ba..fcb0347 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {}
 
 class B<S> {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.textual_outline_modelled.expect
index 62a71ba..fcb0347 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {}
 
 class B<S> {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.expect
index a42b37a..dd07baa 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.expect
@@ -1,37 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<S extends core::Object* = dynamic> extends core::Object {
-  final field core::List<self::A<self::B::S*>*>* foo = <self::A<self::B::S*>*>[];
-  final field core::List<self::A<core::num*>*>* bar = <self::A<core::num*>*>[];
-  synthetic constructor •() → self::B<self::B::S*>*
+class B<S extends core::Object? = dynamic> extends core::Object {
+  final field core::List<self::A<self::B::S%>> foo = <self::A<self::B::S%>>[];
+  final field core::List<self::A<core::num>> bar = <self::A<core::num>>[];
+  synthetic constructor •() → self::B<self::B::S%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.modular.expect
index a42b37a..dd07baa 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.modular.expect
@@ -1,37 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<S extends core::Object* = dynamic> extends core::Object {
-  final field core::List<self::A<self::B::S*>*>* foo = <self::A<self::B::S*>*>[];
-  final field core::List<self::A<core::num*>*>* bar = <self::A<core::num*>*>[];
-  synthetic constructor •() → self::B<self::B::S*>*
+class B<S extends core::Object? = dynamic> extends core::Object {
+  final field core::List<self::A<self::B::S%>> foo = <self::A<self::B::S%>>[];
+  final field core::List<self::A<core::num>> bar = <self::A<core::num>>[];
+  synthetic constructor •() → self::B<self::B::S%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.outline.expect
index 748f389..2ed8f3b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.outline.expect
@@ -1,36 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<S extends core::Object* = dynamic> extends core::Object {
-  final field core::List<self::A<self::B::S*>*>* foo;
-  final field core::List<self::A<core::num*>*>* bar;
-  synthetic constructor •() → self::B<self::B::S*>*
+class B<S extends core::Object? = dynamic> extends core::Object {
+  final field core::List<self::A<self::B::S%>> foo;
+  final field core::List<self::A<core::num>> bar;
+  synthetic constructor •() → self::B<self::B::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.transformed.expect
index 6c9f709..4ffc6e0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.transformed.expect
@@ -1,37 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<S extends core::Object* = dynamic> extends core::Object {
-  final field core::List<self::A<self::B::S*>*>* foo = core::_GrowableList::•<self::A<self::B::S*>*>(0);
-  final field core::List<self::A<core::num*>*>* bar = core::_GrowableList::•<self::A<core::num*>*>(0);
-  synthetic constructor •() → self::B<self::B::S*>*
+class B<S extends core::Object? = dynamic> extends core::Object {
+  final field core::List<self::A<self::B::S%>> foo = core::_GrowableList::•<self::A<self::B::S%>>(0);
+  final field core::List<self::A<core::num>> bar = core::_GrowableList::•<self::A<core::num>>(0);
+  synthetic constructor •() → self::B<self::B::S%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart
index 2f985bd..febfe6a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides type arguments to raw
 // interface types that are themselves used as type arguments of literal maps.
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.textual_outline.expect
index 2bb8495..3f4f92e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 var a = <A, A>{};
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.textual_outline_modelled.expect
index 827fdca..f4ec5d2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.expect
index e2fc6ab..44d400e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::Map<self::A<core::num*>*, self::A<core::num*>*>* a = <self::A<core::num*>*, self::A<core::num*>*>{};
+static field core::Map<self::A<core::num>, self::A<core::num>> a = <self::A<core::num>, self::A<core::num>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.modular.expect
index e2fc6ab..44d400e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::Map<self::A<core::num*>*, self::A<core::num*>*>* a = <self::A<core::num*>*, self::A<core::num*>*>{};
+static field core::Map<self::A<core::num>, self::A<core::num>> a = <self::A<core::num>, self::A<core::num>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.outline.expect
index 64d45b2..06dbbeb 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::Map<self::A<core::num*>*, self::A<core::num*>*>* a;
+static field core::Map<self::A<core::num>, self::A<core::num>> a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.transformed.expect
index e2fc6ab..44d400e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::Map<self::A<core::num*>*, self::A<core::num*>*>* a = <self::A<core::num*>*, self::A<core::num*>*>{};
+static field core::Map<self::A<core::num>, self::A<core::num>> a = <self::A<core::num>, self::A<core::num>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart
index 29da40e..4456381 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that the instantiate-to-bound algorithm implementation works
 // well in cases where there are multiple distinct strongly connected components
 // of the type variable dependency graph in one declaration.
@@ -15,33 +15,33 @@
 // Two loops.
 class D<X extends A<X>, Y extends A<Y>> {}
 
-D d;
+D d = throw '';
 
 class E<W extends B<W, X>, X extends C<W, X>, Y extends B<Y, Z>,
     Z extends C<Y, Z>> {}
 
-E e;
+E e = throw '';
 
 class F<V extends num, W extends B<W, X>, X extends C<W, X>, Y extends B<W, X>,
     Z extends C<Y, Z>> {}
 
-F f;
+F f = throw '';
 
 class G<V extends num, W extends B<V, X>, X extends C<W, V>, Y extends B<W, X>,
     Z extends C<Y, Z>> {}
 
-G g;
+G g = throw '';
 
 class H<S extends A<S>, T extends B<T, U>, U extends C<T, U>, V extends A<V>,
     W extends S, X extends T, Y extends U, Z extends V> {}
 
-H h;
+H h = throw '';
 
 // A square and a triangle.
 class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
     X extends Function(V), Y extends Z, Z extends T> {}
 
-I i;
+I i = throw '';
 
 // A triangle and a "bowtie."
 class J<
@@ -54,6 +54,6 @@
     Y extends Z,
     Z extends X> {}
 
-J j;
+J j = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.textual_outline.expect
index 3675488..7aa61be 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X> {}
 
 class B<X, Y> {}
@@ -7,32 +6,32 @@
 
 class D<X extends A<X>, Y extends A<Y>> {}
 
-D d;
+D d = throw '';
 
 class E<W extends B<W, X>, X extends C<W, X>, Y extends B<Y, Z>,
     Z extends C<Y, Z>> {}
 
-E e;
+E e = throw '';
 
 class F<V extends num, W extends B<W, X>, X extends C<W, X>, Y extends B<W, X>,
     Z extends C<Y, Z>> {}
 
-F f;
+F f = throw '';
 
 class G<V extends num, W extends B<V, X>, X extends C<W, V>, Y extends B<W, X>,
     Z extends C<Y, Z>> {}
 
-G g;
+G g = throw '';
 
 class H<S extends A<S>, T extends B<T, U>, U extends C<T, U>, V extends A<V>,
     W extends S, X extends T, Y extends U, Z extends V> {}
 
-H h;
+H h = throw '';
 
 class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
     X extends Function(V), Y extends Z, Z extends T> {}
 
-I i;
+I i = throw '';
 
 class J<
     S extends T Function(U),
@@ -44,5 +43,5 @@
     Y extends Z,
     Z extends X> {}
 
-J j;
+J j = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.textual_outline_modelled.expect
index 88fbdf6..37b0100 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.textual_outline_modelled.expect
@@ -1,11 +1,10 @@
-// @dart = 2.9
-D d;
-E e;
-F f;
-G g;
-H h;
-I i;
-J j;
+D d = throw '';
+E e = throw '';
+F f = throw '';
+G g = throw '';
+H h = throw '';
+I i = throw '';
+J j = throw '';
 
 class A<X> {}
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.expect
index 1576c98..5518a58 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,161 +10,61 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::A<self::D::X*>* = self::A<dynamic>*, Y extends self::A<self::D::Y*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends self::A<self::D::X> = self::A<dynamic>, Y extends self::A<self::D::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<W extends self::B<self::E::W*, self::E::X*>* = self::B<dynamic, dynamic>*, X extends self::C<self::E::W*, self::E::X*>* = self::C<dynamic, dynamic>*, Y extends self::B<self::E::Y*, self::E::Z*>* = self::B<dynamic, dynamic>*, Z extends self::C<self::E::Y*, self::E::Z*>* = self::C<dynamic, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::E<self::E::W*, self::E::X*, self::E::Y*, self::E::Z*>*
+class E<W extends self::B<self::E::W, self::E::X> = self::B<dynamic, dynamic>, X extends self::C<self::E::W, self::E::X> = self::C<dynamic, dynamic>, Y extends self::B<self::E::Y, self::E::Z> = self::B<dynamic, dynamic>, Z extends self::C<self::E::Y, self::E::Z> = self::C<dynamic, dynamic>> extends core::Object {
+  synthetic constructor •() → self::E<self::E::W, self::E::X, self::E::Y, self::E::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<V extends core::num*, W extends self::B<self::F::W*, self::F::X*>* = self::B<dynamic, dynamic>*, X extends self::C<self::F::W*, self::F::X*>* = self::C<dynamic, dynamic>*, Y extends self::B<self::F::W*, self::F::X*>* = self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, Z extends self::C<self::F::Y*, self::F::Z*>* = self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::F<self::F::V*, self::F::W*, self::F::X*, self::F::Y*, self::F::Z*>*
+class F<V extends core::num, W extends self::B<self::F::W, self::F::X> = self::B<dynamic, dynamic>, X extends self::C<self::F::W, self::F::X> = self::C<dynamic, dynamic>, Y extends self::B<self::F::W, self::F::X> = self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, Z extends self::C<self::F::Y, self::F::Z> = self::C<self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, dynamic>> extends core::Object {
+  synthetic constructor •() → self::F<self::F::V, self::F::W, self::F::X, self::F::Y, self::F::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class G<V extends core::num*, W extends self::B<self::G::V*, self::G::X*>* = self::B<core::num*, dynamic>*, X extends self::C<self::G::W*, self::G::V*>* = self::C<dynamic, core::num*>*, Y extends self::B<self::G::W*, self::G::X*>* = self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, Z extends self::C<self::G::Y*, self::G::Z*>* = self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::G<self::G::V*, self::G::W*, self::G::X*, self::G::Y*, self::G::Z*>*
+class G<V extends core::num, W extends self::B<self::G::V, self::G::X> = self::B<core::num, dynamic>, X extends self::C<self::G::W, self::G::V> = self::C<dynamic, core::num>, Y extends self::B<self::G::W, self::G::X> = self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, Z extends self::C<self::G::Y, self::G::Z> = self::C<self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, dynamic>> extends core::Object {
+  synthetic constructor •() → self::G<self::G::V, self::G::W, self::G::X, self::G::Y, self::G::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class H<S extends self::A<self::H::S*>* = self::A<dynamic>*, T extends self::B<self::H::T*, self::H::U*>* = self::B<dynamic, dynamic>*, U extends self::C<self::H::T*, self::H::U*>* = self::C<dynamic, dynamic>*, V extends self::A<self::H::V*>* = self::A<dynamic>*, W extends self::H::S* = self::A<dynamic>*, X extends self::H::T* = self::B<dynamic, dynamic>*, Y extends self::H::U* = self::C<dynamic, dynamic>*, Z extends self::H::V* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::H<self::H::S*, self::H::T*, self::H::U*, self::H::V*, self::H::W*, self::H::X*, self::H::Y*, self::H::Z*>*
+class H<S extends self::A<self::H::S> = self::A<dynamic>, T extends self::B<self::H::T, self::H::U> = self::B<dynamic, dynamic>, U extends self::C<self::H::T, self::H::U> = self::C<dynamic, dynamic>, V extends self::A<self::H::V> = self::A<dynamic>, W extends self::H::S = self::A<dynamic>, X extends self::H::T = self::B<dynamic, dynamic>, Y extends self::H::U = self::C<dynamic, dynamic>, Z extends self::H::V = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::H<self::H::S, self::H::T, self::H::U, self::H::V, self::H::W, self::H::X, self::H::Y, self::H::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class I<T extends invalid-type, U extends self::I::Y* = invalid-type, V extends (self::I::W*) →* dynamic = (Null) →* dynamic, W extends (self::I::X*) →* dynamic = (Null) →* dynamic, X extends (self::I::V*) →* dynamic = (Null) →* dynamic, Y extends self::I::Z* = invalid-type, Z extends self::I::T* = invalid-type> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*, self::I::U*, self::I::V*, self::I::W*, self::I::X*, self::I::Y*, self::I::Z*>*
+class I<T extends invalid-type, U extends self::I::Y% = invalid-type, V extends (self::I::W) → dynamic = (Never) → dynamic, W extends (self::I::X) → dynamic = (Never) → dynamic, X extends (self::I::V) → dynamic = (Never) → dynamic, Y extends self::I::Z% = invalid-type, Z extends self::I::T% = invalid-type> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%, self::I::U%, self::I::V, self::I::W, self::I::X, self::I::Y%, self::I::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class J<S extends (self::J::U*) →* self::J::T* = (Null) →* dynamic, T extends (self::J::S*) →* self::J::U* = (Null) →* dynamic, U extends (self::J::T*) →* self::J::S* = (Null) →* dynamic, V extends self::J::W* = dynamic, W extends self::J::X* = dynamic, X extends (self::J::V*) →* self::J::Y* = (Null) →* dynamic, Y extends self::J::Z* = dynamic, Z extends self::J::X* = dynamic> extends core::Object {
-  synthetic constructor •() → self::J<self::J::S*, self::J::T*, self::J::U*, self::J::V*, self::J::W*, self::J::X*, self::J::Y*, self::J::Z*>*
+class J<S extends (self::J::U) → self::J::T = (Never) → dynamic, T extends (self::J::S) → self::J::U = (Never) → dynamic, U extends (self::J::T) → self::J::S = (Never) → dynamic, V extends self::J::W = dynamic, W extends self::J::X = dynamic, X extends (self::J::V) → self::J::Y = (Never) → dynamic, Y extends self::J::Z = dynamic, Z extends self::J::X = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::S, self::J::T, self::J::U, self::J::V, self::J::W, self::J::X, self::J::Y, self::J::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<self::A<dynamic>*, self::A<dynamic>*>* d;
-static field self::E<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* e;
-static field self::F<core::num*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*>* f;
-static field self::G<core::num*, self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*, self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*>* g;
-static field self::H<self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*, self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*>* h;
-static field self::I<invalid-type, invalid-type, (Null) →* dynamic, (Null) →* dynamic, (Null) →* dynamic, invalid-type, invalid-type>* i;
-static field self::J<(Null) →* dynamic, (Null) →* dynamic, (Null) →* dynamic, dynamic, dynamic, (Null) →* dynamic, dynamic, dynamic>* j;
+static field self::D<self::A<dynamic>, self::A<dynamic>> d = throw "";
+static field self::E<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>> e = throw "";
+static field self::F<core::num, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, self::C<self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, dynamic>> f = throw "";
+static field self::G<core::num, self::B<core::num, dynamic>, self::C<dynamic, core::num>, self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, self::C<self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, dynamic>> g = throw "";
+static field self::H<self::A<dynamic>, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::A<dynamic>, self::A<dynamic>, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::A<dynamic>> h = throw "";
+static field self::I<invalid-type, invalid-type, (Never) → dynamic, (Never) → dynamic, (Never) → dynamic, invalid-type, invalid-type> i = throw "";
+static field self::J<(Never) → dynamic, (Never) → dynamic, (Never) → dynamic, dynamic, dynamic, (Never) → dynamic, dynamic, dynamic> j = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.modular.expect
index 1576c98..5518a58 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,161 +10,61 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::A<self::D::X*>* = self::A<dynamic>*, Y extends self::A<self::D::Y*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends self::A<self::D::X> = self::A<dynamic>, Y extends self::A<self::D::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<W extends self::B<self::E::W*, self::E::X*>* = self::B<dynamic, dynamic>*, X extends self::C<self::E::W*, self::E::X*>* = self::C<dynamic, dynamic>*, Y extends self::B<self::E::Y*, self::E::Z*>* = self::B<dynamic, dynamic>*, Z extends self::C<self::E::Y*, self::E::Z*>* = self::C<dynamic, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::E<self::E::W*, self::E::X*, self::E::Y*, self::E::Z*>*
+class E<W extends self::B<self::E::W, self::E::X> = self::B<dynamic, dynamic>, X extends self::C<self::E::W, self::E::X> = self::C<dynamic, dynamic>, Y extends self::B<self::E::Y, self::E::Z> = self::B<dynamic, dynamic>, Z extends self::C<self::E::Y, self::E::Z> = self::C<dynamic, dynamic>> extends core::Object {
+  synthetic constructor •() → self::E<self::E::W, self::E::X, self::E::Y, self::E::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<V extends core::num*, W extends self::B<self::F::W*, self::F::X*>* = self::B<dynamic, dynamic>*, X extends self::C<self::F::W*, self::F::X*>* = self::C<dynamic, dynamic>*, Y extends self::B<self::F::W*, self::F::X*>* = self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, Z extends self::C<self::F::Y*, self::F::Z*>* = self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::F<self::F::V*, self::F::W*, self::F::X*, self::F::Y*, self::F::Z*>*
+class F<V extends core::num, W extends self::B<self::F::W, self::F::X> = self::B<dynamic, dynamic>, X extends self::C<self::F::W, self::F::X> = self::C<dynamic, dynamic>, Y extends self::B<self::F::W, self::F::X> = self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, Z extends self::C<self::F::Y, self::F::Z> = self::C<self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, dynamic>> extends core::Object {
+  synthetic constructor •() → self::F<self::F::V, self::F::W, self::F::X, self::F::Y, self::F::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class G<V extends core::num*, W extends self::B<self::G::V*, self::G::X*>* = self::B<core::num*, dynamic>*, X extends self::C<self::G::W*, self::G::V*>* = self::C<dynamic, core::num*>*, Y extends self::B<self::G::W*, self::G::X*>* = self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, Z extends self::C<self::G::Y*, self::G::Z*>* = self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::G<self::G::V*, self::G::W*, self::G::X*, self::G::Y*, self::G::Z*>*
+class G<V extends core::num, W extends self::B<self::G::V, self::G::X> = self::B<core::num, dynamic>, X extends self::C<self::G::W, self::G::V> = self::C<dynamic, core::num>, Y extends self::B<self::G::W, self::G::X> = self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, Z extends self::C<self::G::Y, self::G::Z> = self::C<self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, dynamic>> extends core::Object {
+  synthetic constructor •() → self::G<self::G::V, self::G::W, self::G::X, self::G::Y, self::G::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class H<S extends self::A<self::H::S*>* = self::A<dynamic>*, T extends self::B<self::H::T*, self::H::U*>* = self::B<dynamic, dynamic>*, U extends self::C<self::H::T*, self::H::U*>* = self::C<dynamic, dynamic>*, V extends self::A<self::H::V*>* = self::A<dynamic>*, W extends self::H::S* = self::A<dynamic>*, X extends self::H::T* = self::B<dynamic, dynamic>*, Y extends self::H::U* = self::C<dynamic, dynamic>*, Z extends self::H::V* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::H<self::H::S*, self::H::T*, self::H::U*, self::H::V*, self::H::W*, self::H::X*, self::H::Y*, self::H::Z*>*
+class H<S extends self::A<self::H::S> = self::A<dynamic>, T extends self::B<self::H::T, self::H::U> = self::B<dynamic, dynamic>, U extends self::C<self::H::T, self::H::U> = self::C<dynamic, dynamic>, V extends self::A<self::H::V> = self::A<dynamic>, W extends self::H::S = self::A<dynamic>, X extends self::H::T = self::B<dynamic, dynamic>, Y extends self::H::U = self::C<dynamic, dynamic>, Z extends self::H::V = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::H<self::H::S, self::H::T, self::H::U, self::H::V, self::H::W, self::H::X, self::H::Y, self::H::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class I<T extends invalid-type, U extends self::I::Y* = invalid-type, V extends (self::I::W*) →* dynamic = (Null) →* dynamic, W extends (self::I::X*) →* dynamic = (Null) →* dynamic, X extends (self::I::V*) →* dynamic = (Null) →* dynamic, Y extends self::I::Z* = invalid-type, Z extends self::I::T* = invalid-type> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*, self::I::U*, self::I::V*, self::I::W*, self::I::X*, self::I::Y*, self::I::Z*>*
+class I<T extends invalid-type, U extends self::I::Y% = invalid-type, V extends (self::I::W) → dynamic = (Never) → dynamic, W extends (self::I::X) → dynamic = (Never) → dynamic, X extends (self::I::V) → dynamic = (Never) → dynamic, Y extends self::I::Z% = invalid-type, Z extends self::I::T% = invalid-type> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%, self::I::U%, self::I::V, self::I::W, self::I::X, self::I::Y%, self::I::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class J<S extends (self::J::U*) →* self::J::T* = (Null) →* dynamic, T extends (self::J::S*) →* self::J::U* = (Null) →* dynamic, U extends (self::J::T*) →* self::J::S* = (Null) →* dynamic, V extends self::J::W* = dynamic, W extends self::J::X* = dynamic, X extends (self::J::V*) →* self::J::Y* = (Null) →* dynamic, Y extends self::J::Z* = dynamic, Z extends self::J::X* = dynamic> extends core::Object {
-  synthetic constructor •() → self::J<self::J::S*, self::J::T*, self::J::U*, self::J::V*, self::J::W*, self::J::X*, self::J::Y*, self::J::Z*>*
+class J<S extends (self::J::U) → self::J::T = (Never) → dynamic, T extends (self::J::S) → self::J::U = (Never) → dynamic, U extends (self::J::T) → self::J::S = (Never) → dynamic, V extends self::J::W = dynamic, W extends self::J::X = dynamic, X extends (self::J::V) → self::J::Y = (Never) → dynamic, Y extends self::J::Z = dynamic, Z extends self::J::X = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::S, self::J::T, self::J::U, self::J::V, self::J::W, self::J::X, self::J::Y, self::J::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<self::A<dynamic>*, self::A<dynamic>*>* d;
-static field self::E<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* e;
-static field self::F<core::num*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*>* f;
-static field self::G<core::num*, self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*, self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*>* g;
-static field self::H<self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*, self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*>* h;
-static field self::I<invalid-type, invalid-type, (Null) →* dynamic, (Null) →* dynamic, (Null) →* dynamic, invalid-type, invalid-type>* i;
-static field self::J<(Null) →* dynamic, (Null) →* dynamic, (Null) →* dynamic, dynamic, dynamic, (Null) →* dynamic, dynamic, dynamic>* j;
+static field self::D<self::A<dynamic>, self::A<dynamic>> d = throw "";
+static field self::E<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>> e = throw "";
+static field self::F<core::num, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, self::C<self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, dynamic>> f = throw "";
+static field self::G<core::num, self::B<core::num, dynamic>, self::C<dynamic, core::num>, self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, self::C<self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, dynamic>> g = throw "";
+static field self::H<self::A<dynamic>, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::A<dynamic>, self::A<dynamic>, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::A<dynamic>> h = throw "";
+static field self::I<invalid-type, invalid-type, (Never) → dynamic, (Never) → dynamic, (Never) → dynamic, invalid-type, invalid-type> i = throw "";
+static field self::J<(Never) → dynamic, (Never) → dynamic, (Never) → dynamic, dynamic, dynamic, (Never) → dynamic, dynamic, dynamic> j = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.outline.expect
index e29ceb1..cb90511 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,152 +10,52 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::A<self::D::X*>* = self::A<dynamic>*, Y extends self::A<self::D::Y*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends self::A<self::D::X> = self::A<dynamic>, Y extends self::A<self::D::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<W extends self::B<self::E::W*, self::E::X*>* = self::B<dynamic, dynamic>*, X extends self::C<self::E::W*, self::E::X*>* = self::C<dynamic, dynamic>*, Y extends self::B<self::E::Y*, self::E::Z*>* = self::B<dynamic, dynamic>*, Z extends self::C<self::E::Y*, self::E::Z*>* = self::C<dynamic, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::E<self::E::W*, self::E::X*, self::E::Y*, self::E::Z*>*
+class E<W extends self::B<self::E::W, self::E::X> = self::B<dynamic, dynamic>, X extends self::C<self::E::W, self::E::X> = self::C<dynamic, dynamic>, Y extends self::B<self::E::Y, self::E::Z> = self::B<dynamic, dynamic>, Z extends self::C<self::E::Y, self::E::Z> = self::C<dynamic, dynamic>> extends core::Object {
+  synthetic constructor •() → self::E<self::E::W, self::E::X, self::E::Y, self::E::Z>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<V extends core::num*, W extends self::B<self::F::W*, self::F::X*>* = self::B<dynamic, dynamic>*, X extends self::C<self::F::W*, self::F::X*>* = self::C<dynamic, dynamic>*, Y extends self::B<self::F::W*, self::F::X*>* = self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, Z extends self::C<self::F::Y*, self::F::Z*>* = self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::F<self::F::V*, self::F::W*, self::F::X*, self::F::Y*, self::F::Z*>*
+class F<V extends core::num, W extends self::B<self::F::W, self::F::X> = self::B<dynamic, dynamic>, X extends self::C<self::F::W, self::F::X> = self::C<dynamic, dynamic>, Y extends self::B<self::F::W, self::F::X> = self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, Z extends self::C<self::F::Y, self::F::Z> = self::C<self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, dynamic>> extends core::Object {
+  synthetic constructor •() → self::F<self::F::V, self::F::W, self::F::X, self::F::Y, self::F::Z>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class G<V extends core::num*, W extends self::B<self::G::V*, self::G::X*>* = self::B<core::num*, dynamic>*, X extends self::C<self::G::W*, self::G::V*>* = self::C<dynamic, core::num*>*, Y extends self::B<self::G::W*, self::G::X*>* = self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, Z extends self::C<self::G::Y*, self::G::Z*>* = self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::G<self::G::V*, self::G::W*, self::G::X*, self::G::Y*, self::G::Z*>*
+class G<V extends core::num, W extends self::B<self::G::V, self::G::X> = self::B<core::num, dynamic>, X extends self::C<self::G::W, self::G::V> = self::C<dynamic, core::num>, Y extends self::B<self::G::W, self::G::X> = self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, Z extends self::C<self::G::Y, self::G::Z> = self::C<self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, dynamic>> extends core::Object {
+  synthetic constructor •() → self::G<self::G::V, self::G::W, self::G::X, self::G::Y, self::G::Z>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class H<S extends self::A<self::H::S*>* = self::A<dynamic>*, T extends self::B<self::H::T*, self::H::U*>* = self::B<dynamic, dynamic>*, U extends self::C<self::H::T*, self::H::U*>* = self::C<dynamic, dynamic>*, V extends self::A<self::H::V*>* = self::A<dynamic>*, W extends self::H::S* = self::A<dynamic>*, X extends self::H::T* = self::B<dynamic, dynamic>*, Y extends self::H::U* = self::C<dynamic, dynamic>*, Z extends self::H::V* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::H<self::H::S*, self::H::T*, self::H::U*, self::H::V*, self::H::W*, self::H::X*, self::H::Y*, self::H::Z*>*
+class H<S extends self::A<self::H::S> = self::A<dynamic>, T extends self::B<self::H::T, self::H::U> = self::B<dynamic, dynamic>, U extends self::C<self::H::T, self::H::U> = self::C<dynamic, dynamic>, V extends self::A<self::H::V> = self::A<dynamic>, W extends self::H::S = self::A<dynamic>, X extends self::H::T = self::B<dynamic, dynamic>, Y extends self::H::U = self::C<dynamic, dynamic>, Z extends self::H::V = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::H<self::H::S, self::H::T, self::H::U, self::H::V, self::H::W, self::H::X, self::H::Y, self::H::Z>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class I<T extends invalid-type, U extends self::I::Y* = invalid-type, V extends (self::I::W*) →* dynamic = (Null) →* dynamic, W extends (self::I::X*) →* dynamic = (Null) →* dynamic, X extends (self::I::V*) →* dynamic = (Null) →* dynamic, Y extends self::I::Z* = invalid-type, Z extends self::I::T* = invalid-type> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*, self::I::U*, self::I::V*, self::I::W*, self::I::X*, self::I::Y*, self::I::Z*>*
+class I<T extends invalid-type, U extends self::I::Y% = invalid-type, V extends (self::I::W) → dynamic = (Never) → dynamic, W extends (self::I::X) → dynamic = (Never) → dynamic, X extends (self::I::V) → dynamic = (Never) → dynamic, Y extends self::I::Z% = invalid-type, Z extends self::I::T% = invalid-type> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%, self::I::U%, self::I::V, self::I::W, self::I::X, self::I::Y%, self::I::Z%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class J<S extends (self::J::U*) →* self::J::T* = (Null) →* dynamic, T extends (self::J::S*) →* self::J::U* = (Null) →* dynamic, U extends (self::J::T*) →* self::J::S* = (Null) →* dynamic, V extends self::J::W* = dynamic, W extends self::J::X* = dynamic, X extends (self::J::V*) →* self::J::Y* = (Null) →* dynamic, Y extends self::J::Z* = dynamic, Z extends self::J::X* = dynamic> extends core::Object {
-  synthetic constructor •() → self::J<self::J::S*, self::J::T*, self::J::U*, self::J::V*, self::J::W*, self::J::X*, self::J::Y*, self::J::Z*>*
+class J<S extends (self::J::U) → self::J::T = (Never) → dynamic, T extends (self::J::S) → self::J::U = (Never) → dynamic, U extends (self::J::T) → self::J::S = (Never) → dynamic, V extends self::J::W = dynamic, W extends self::J::X = dynamic, X extends (self::J::V) → self::J::Y = (Never) → dynamic, Y extends self::J::Z = dynamic, Z extends self::J::X = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::S, self::J::T, self::J::U, self::J::V, self::J::W, self::J::X, self::J::Y, self::J::Z>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<self::A<dynamic>*, self::A<dynamic>*>* d;
-static field self::E<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* e;
-static field self::F<core::num*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*>* f;
-static field self::G<core::num*, self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*, self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*>* g;
-static field self::H<self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*, self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*>* h;
-static field self::I<invalid-type, invalid-type, (Null) →* dynamic, (Null) →* dynamic, (Null) →* dynamic, invalid-type, invalid-type>* i;
-static field self::J<(Null) →* dynamic, (Null) →* dynamic, (Null) →* dynamic, dynamic, dynamic, (Null) →* dynamic, dynamic, dynamic>* j;
+static field self::D<self::A<dynamic>, self::A<dynamic>> d;
+static field self::E<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>> e;
+static field self::F<core::num, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, self::C<self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, dynamic>> f;
+static field self::G<core::num, self::B<core::num, dynamic>, self::C<dynamic, core::num>, self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, self::C<self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, dynamic>> g;
+static field self::H<self::A<dynamic>, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::A<dynamic>, self::A<dynamic>, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::A<dynamic>> h;
+static field self::I<invalid-type, invalid-type, (Never) → dynamic, (Never) → dynamic, (Never) → dynamic, invalid-type, invalid-type> i;
+static field self::J<(Never) → dynamic, (Never) → dynamic, (Never) → dynamic, dynamic, dynamic, (Never) → dynamic, dynamic, dynamic> j;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.transformed.expect
index 1576c98..5518a58 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,161 +10,61 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<X extends self::A<self::D::X*>* = self::A<dynamic>*, Y extends self::A<self::D::Y*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+class D<X extends self::A<self::D::X> = self::A<dynamic>, Y extends self::A<self::D::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X, self::D::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<W extends self::B<self::E::W*, self::E::X*>* = self::B<dynamic, dynamic>*, X extends self::C<self::E::W*, self::E::X*>* = self::C<dynamic, dynamic>*, Y extends self::B<self::E::Y*, self::E::Z*>* = self::B<dynamic, dynamic>*, Z extends self::C<self::E::Y*, self::E::Z*>* = self::C<dynamic, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::E<self::E::W*, self::E::X*, self::E::Y*, self::E::Z*>*
+class E<W extends self::B<self::E::W, self::E::X> = self::B<dynamic, dynamic>, X extends self::C<self::E::W, self::E::X> = self::C<dynamic, dynamic>, Y extends self::B<self::E::Y, self::E::Z> = self::B<dynamic, dynamic>, Z extends self::C<self::E::Y, self::E::Z> = self::C<dynamic, dynamic>> extends core::Object {
+  synthetic constructor •() → self::E<self::E::W, self::E::X, self::E::Y, self::E::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class F<V extends core::num*, W extends self::B<self::F::W*, self::F::X*>* = self::B<dynamic, dynamic>*, X extends self::C<self::F::W*, self::F::X*>* = self::C<dynamic, dynamic>*, Y extends self::B<self::F::W*, self::F::X*>* = self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, Z extends self::C<self::F::Y*, self::F::Z*>* = self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::F<self::F::V*, self::F::W*, self::F::X*, self::F::Y*, self::F::Z*>*
+class F<V extends core::num, W extends self::B<self::F::W, self::F::X> = self::B<dynamic, dynamic>, X extends self::C<self::F::W, self::F::X> = self::C<dynamic, dynamic>, Y extends self::B<self::F::W, self::F::X> = self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, Z extends self::C<self::F::Y, self::F::Z> = self::C<self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, dynamic>> extends core::Object {
+  synthetic constructor •() → self::F<self::F::V, self::F::W, self::F::X, self::F::Y, self::F::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class G<V extends core::num*, W extends self::B<self::G::V*, self::G::X*>* = self::B<core::num*, dynamic>*, X extends self::C<self::G::W*, self::G::V*>* = self::C<dynamic, core::num*>*, Y extends self::B<self::G::W*, self::G::X*>* = self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, Z extends self::C<self::G::Y*, self::G::Z*>* = self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*> extends core::Object {
-  synthetic constructor •() → self::G<self::G::V*, self::G::W*, self::G::X*, self::G::Y*, self::G::Z*>*
+class G<V extends core::num, W extends self::B<self::G::V, self::G::X> = self::B<core::num, dynamic>, X extends self::C<self::G::W, self::G::V> = self::C<dynamic, core::num>, Y extends self::B<self::G::W, self::G::X> = self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, Z extends self::C<self::G::Y, self::G::Z> = self::C<self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, dynamic>> extends core::Object {
+  synthetic constructor •() → self::G<self::G::V, self::G::W, self::G::X, self::G::Y, self::G::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class H<S extends self::A<self::H::S*>* = self::A<dynamic>*, T extends self::B<self::H::T*, self::H::U*>* = self::B<dynamic, dynamic>*, U extends self::C<self::H::T*, self::H::U*>* = self::C<dynamic, dynamic>*, V extends self::A<self::H::V*>* = self::A<dynamic>*, W extends self::H::S* = self::A<dynamic>*, X extends self::H::T* = self::B<dynamic, dynamic>*, Y extends self::H::U* = self::C<dynamic, dynamic>*, Z extends self::H::V* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::H<self::H::S*, self::H::T*, self::H::U*, self::H::V*, self::H::W*, self::H::X*, self::H::Y*, self::H::Z*>*
+class H<S extends self::A<self::H::S> = self::A<dynamic>, T extends self::B<self::H::T, self::H::U> = self::B<dynamic, dynamic>, U extends self::C<self::H::T, self::H::U> = self::C<dynamic, dynamic>, V extends self::A<self::H::V> = self::A<dynamic>, W extends self::H::S = self::A<dynamic>, X extends self::H::T = self::B<dynamic, dynamic>, Y extends self::H::U = self::C<dynamic, dynamic>, Z extends self::H::V = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::H<self::H::S, self::H::T, self::H::U, self::H::V, self::H::W, self::H::X, self::H::Y, self::H::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class I<T extends invalid-type, U extends self::I::Y* = invalid-type, V extends (self::I::W*) →* dynamic = (Null) →* dynamic, W extends (self::I::X*) →* dynamic = (Null) →* dynamic, X extends (self::I::V*) →* dynamic = (Null) →* dynamic, Y extends self::I::Z* = invalid-type, Z extends self::I::T* = invalid-type> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*, self::I::U*, self::I::V*, self::I::W*, self::I::X*, self::I::Y*, self::I::Z*>*
+class I<T extends invalid-type, U extends self::I::Y% = invalid-type, V extends (self::I::W) → dynamic = (Never) → dynamic, W extends (self::I::X) → dynamic = (Never) → dynamic, X extends (self::I::V) → dynamic = (Never) → dynamic, Y extends self::I::Z% = invalid-type, Z extends self::I::T% = invalid-type> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%, self::I::U%, self::I::V, self::I::W, self::I::X, self::I::Y%, self::I::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class J<S extends (self::J::U*) →* self::J::T* = (Null) →* dynamic, T extends (self::J::S*) →* self::J::U* = (Null) →* dynamic, U extends (self::J::T*) →* self::J::S* = (Null) →* dynamic, V extends self::J::W* = dynamic, W extends self::J::X* = dynamic, X extends (self::J::V*) →* self::J::Y* = (Null) →* dynamic, Y extends self::J::Z* = dynamic, Z extends self::J::X* = dynamic> extends core::Object {
-  synthetic constructor •() → self::J<self::J::S*, self::J::T*, self::J::U*, self::J::V*, self::J::W*, self::J::X*, self::J::Y*, self::J::Z*>*
+class J<S extends (self::J::U) → self::J::T = (Never) → dynamic, T extends (self::J::S) → self::J::U = (Never) → dynamic, U extends (self::J::T) → self::J::S = (Never) → dynamic, V extends self::J::W = dynamic, W extends self::J::X = dynamic, X extends (self::J::V) → self::J::Y = (Never) → dynamic, Y extends self::J::Z = dynamic, Z extends self::J::X = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::S, self::J::T, self::J::U, self::J::V, self::J::W, self::J::X, self::J::Y, self::J::Z>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<self::A<dynamic>*, self::A<dynamic>*>* d;
-static field self::E<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* e;
-static field self::F<core::num*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*>* f;
-static field self::G<core::num*, self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*, self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*>* g;
-static field self::H<self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*, self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*>* h;
-static field self::I<invalid-type, invalid-type, (Null) →* dynamic, (Null) →* dynamic, (Null) →* dynamic, invalid-type, invalid-type>* i;
-static field self::J<(Null) →* dynamic, (Null) →* dynamic, (Null) →* dynamic, dynamic, dynamic, (Null) →* dynamic, dynamic, dynamic>* j;
+static field self::D<self::A<dynamic>, self::A<dynamic>> d = throw "";
+static field self::E<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>> e = throw "";
+static field self::F<core::num, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, self::C<self::B<self::B<dynamic, dynamic>, self::C<dynamic, dynamic>>, dynamic>> f = throw "";
+static field self::G<core::num, self::B<core::num, dynamic>, self::C<dynamic, core::num>, self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, self::C<self::B<self::B<core::num, dynamic>, self::C<dynamic, core::num>>, dynamic>> g = throw "";
+static field self::H<self::A<dynamic>, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::A<dynamic>, self::A<dynamic>, self::B<dynamic, dynamic>, self::C<dynamic, dynamic>, self::A<dynamic>> h = throw "";
+static field self::I<invalid-type, invalid-type, (Never) → dynamic, (Never) → dynamic, (Never) → dynamic, invalid-type, invalid-type> i = throw "";
+static field self::J<(Never) → dynamic, (Never) → dynamic, (Never) → dynamic, dynamic, dynamic, (Never) → dynamic, dynamic, dynamic> j = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart
index e2b5f71..b5ecd4c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that covariant and contravariant occurrences of the same
 // type variable from the set of mutually dependent type variables in the bounds
 // of all of these type variables are replaced with `dynamic` and Null
@@ -11,38 +11,38 @@
 
 class C1<X extends X Function(Y), Y extends X Function(Y)> {}
 
-C1 c1;
+C1 c1 = throw '';
 
 class C2<X extends X Function(Y), Y extends Y Function(X)> {}
 
-C2 c2;
+C2 c2 = throw '';
 
 class C3<X extends X Function(X, Y), Y extends X Function(X, Y)> {}
 
-C3 c3;
+C3 c3 = throw '';
 
 class C4<X extends X Function(X, Y), Y extends Y Function(X, Y)> {}
 
-C4 c4;
+C4 c4 = throw '';
 
 class D1<X extends B<X, Y>, Y extends X Function(Y)> {}
 
-D1 d1;
+D1 d1 = throw '';
 
 class D2<X extends B<X, Y>, Y extends Y Function(X)> {}
 
-D2 d2;
+D2 d2 = throw '';
 
 class D3<X extends B<X, Y>, Y extends X Function(X, Y)> {}
 
-D3 d3;
+D3 d3 = throw '';
 
 class D4<X extends B<X, Y>, Y extends Y Function(X, Y)> {}
 
-D4 d4;
+D4 d4 = throw '';
 
 class E<X extends X Function(X)> {}
 
-E e;
+E e = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.textual_outline.expect
index 96be19f..2341778 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.textual_outline.expect
@@ -1,39 +1,38 @@
-// @dart = 2.9
 class B<X, Y> {}
 
 class C1<X extends X Function(Y), Y extends X Function(Y)> {}
 
-C1 c1;
+C1 c1 = throw '';
 
 class C2<X extends X Function(Y), Y extends Y Function(X)> {}
 
-C2 c2;
+C2 c2 = throw '';
 
 class C3<X extends X Function(X, Y), Y extends X Function(X, Y)> {}
 
-C3 c3;
+C3 c3 = throw '';
 
 class C4<X extends X Function(X, Y), Y extends Y Function(X, Y)> {}
 
-C4 c4;
+C4 c4 = throw '';
 
 class D1<X extends B<X, Y>, Y extends X Function(Y)> {}
 
-D1 d1;
+D1 d1 = throw '';
 
 class D2<X extends B<X, Y>, Y extends Y Function(X)> {}
 
-D2 d2;
+D2 d2 = throw '';
 
 class D3<X extends B<X, Y>, Y extends X Function(X, Y)> {}
 
-D3 d3;
+D3 d3 = throw '';
 
 class D4<X extends B<X, Y>, Y extends Y Function(X, Y)> {}
 
-D4 d4;
+D4 d4 = throw '';
 
 class E<X extends X Function(X)> {}
 
-E e;
+E e = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.textual_outline_modelled.expect
index 9d3a4bb..a366f73 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.textual_outline_modelled.expect
@@ -1,13 +1,12 @@
-// @dart = 2.9
-C1 c1;
-C2 c2;
-C3 c3;
-C4 c4;
-D1 d1;
-D2 d2;
-D3 d3;
-D4 d4;
-E e;
+C1 c1 = throw '';
+C2 c2 = throw '';
+C3 c3 = throw '';
+C4 c4 = throw '';
+D1 d1 = throw '';
+D2 d2 = throw '';
+D3 d3 = throw '';
+D4 d4 = throw '';
+E e = throw '';
 
 class B<X, Y> {}
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.expect
index 381fd70..aa8d0b4 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.expect
@@ -1,164 +1,64 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C1<X extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic, Y extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C1<self::C1::X*, self::C1::Y*>*
+class C1<X extends (self::C1::Y) → self::C1::X = (Never) → dynamic, Y extends (self::C1::Y) → self::C1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C1<self::C1::X, self::C1::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C2<X extends (self::C2::Y*) →* self::C2::X* = (Null) →* dynamic, Y extends (self::C2::X*) →* self::C2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C2<self::C2::X*, self::C2::Y*>*
+class C2<X extends (self::C2::Y) → self::C2::X = (Never) → dynamic, Y extends (self::C2::X) → self::C2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::X, self::C2::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C3<X extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic, Y extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C3<self::C3::X*, self::C3::Y*>*
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C3<self::C3::X, self::C3::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C4<X extends (self::C4::X*, self::C4::Y*) →* self::C4::X* = (Null, Null) →* dynamic, Y extends (self::C4::X*, self::C4::Y*) →* self::C4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C4<self::C4::X*, self::C4::Y*>*
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (Never, Never) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C4<self::C4::X, self::C4::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D1<X extends self::B<self::D1::X*, self::D1::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D1::Y*) →* self::D1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D1<self::D1::X*, self::D1::Y*>*
+class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D1<self::D1::X, self::D1::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D2<X extends self::B<self::D2::X*, self::D2::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D2::X*) →* self::D2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D2<self::D2::X*, self::D2::Y*>*
+class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D2<self::D2::X, self::D2::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D3<X extends self::B<self::D3::X*, self::D3::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D3::X*, self::D3::Y*) →* self::D3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D3<self::D3::X*, self::D3::Y*>*
+class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D3<self::D3::X, self::D3::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D4<X extends self::B<self::D4::X*, self::D4::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D4::X*, self::D4::Y*) →* self::D4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D4<self::D4::X*, self::D4::Y*>*
+class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D4<self::D4::X, self::D4::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* self::E::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → self::E::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C1<(Null) →* dynamic, (Null) →* dynamic>* c1;
-static field self::C2<(Null) →* dynamic, (Null) →* dynamic>* c2;
-static field self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>* c3;
-static field self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>* c4;
-static field self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>* d1;
-static field self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>* d2;
-static field self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>* d3;
-static field self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>* d4;
-static field self::E<(Null) →* dynamic>* e;
+static field self::C1<(Never) → dynamic, (Never) → dynamic> c1 = throw "";
+static field self::C2<(Never) → dynamic, (Never) → dynamic> c2 = throw "";
+static field self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic> c3 = throw "";
+static field self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic> c4 = throw "";
+static field self::D1<self::B<dynamic, dynamic>, (Never) → dynamic> d1 = throw "";
+static field self::D2<self::B<dynamic, dynamic>, (Never) → dynamic> d2 = throw "";
+static field self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic> d3 = throw "";
+static field self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic> d4 = throw "";
+static field self::E<(Never) → dynamic> e = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.modular.expect
index 381fd70..aa8d0b4 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.modular.expect
@@ -1,164 +1,64 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C1<X extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic, Y extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C1<self::C1::X*, self::C1::Y*>*
+class C1<X extends (self::C1::Y) → self::C1::X = (Never) → dynamic, Y extends (self::C1::Y) → self::C1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C1<self::C1::X, self::C1::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C2<X extends (self::C2::Y*) →* self::C2::X* = (Null) →* dynamic, Y extends (self::C2::X*) →* self::C2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C2<self::C2::X*, self::C2::Y*>*
+class C2<X extends (self::C2::Y) → self::C2::X = (Never) → dynamic, Y extends (self::C2::X) → self::C2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::X, self::C2::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C3<X extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic, Y extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C3<self::C3::X*, self::C3::Y*>*
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C3<self::C3::X, self::C3::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C4<X extends (self::C4::X*, self::C4::Y*) →* self::C4::X* = (Null, Null) →* dynamic, Y extends (self::C4::X*, self::C4::Y*) →* self::C4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C4<self::C4::X*, self::C4::Y*>*
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (Never, Never) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C4<self::C4::X, self::C4::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D1<X extends self::B<self::D1::X*, self::D1::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D1::Y*) →* self::D1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D1<self::D1::X*, self::D1::Y*>*
+class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D1<self::D1::X, self::D1::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D2<X extends self::B<self::D2::X*, self::D2::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D2::X*) →* self::D2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D2<self::D2::X*, self::D2::Y*>*
+class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D2<self::D2::X, self::D2::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D3<X extends self::B<self::D3::X*, self::D3::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D3::X*, self::D3::Y*) →* self::D3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D3<self::D3::X*, self::D3::Y*>*
+class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D3<self::D3::X, self::D3::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D4<X extends self::B<self::D4::X*, self::D4::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D4::X*, self::D4::Y*) →* self::D4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D4<self::D4::X*, self::D4::Y*>*
+class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D4<self::D4::X, self::D4::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* self::E::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → self::E::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C1<(Null) →* dynamic, (Null) →* dynamic>* c1;
-static field self::C2<(Null) →* dynamic, (Null) →* dynamic>* c2;
-static field self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>* c3;
-static field self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>* c4;
-static field self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>* d1;
-static field self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>* d2;
-static field self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>* d3;
-static field self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>* d4;
-static field self::E<(Null) →* dynamic>* e;
+static field self::C1<(Never) → dynamic, (Never) → dynamic> c1 = throw "";
+static field self::C2<(Never) → dynamic, (Never) → dynamic> c2 = throw "";
+static field self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic> c3 = throw "";
+static field self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic> c4 = throw "";
+static field self::D1<self::B<dynamic, dynamic>, (Never) → dynamic> d1 = throw "";
+static field self::D2<self::B<dynamic, dynamic>, (Never) → dynamic> d2 = throw "";
+static field self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic> d3 = throw "";
+static field self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic> d4 = throw "";
+static field self::E<(Never) → dynamic> e = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.outline.expect
index b47cdbb..613bdb9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.outline.expect
@@ -1,155 +1,55 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C1<X extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic, Y extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C1<self::C1::X*, self::C1::Y*>*
+class C1<X extends (self::C1::Y) → self::C1::X = (Never) → dynamic, Y extends (self::C1::Y) → self::C1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C1<self::C1::X, self::C1::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C2<X extends (self::C2::Y*) →* self::C2::X* = (Null) →* dynamic, Y extends (self::C2::X*) →* self::C2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C2<self::C2::X*, self::C2::Y*>*
+class C2<X extends (self::C2::Y) → self::C2::X = (Never) → dynamic, Y extends (self::C2::X) → self::C2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::X, self::C2::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C3<X extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic, Y extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C3<self::C3::X*, self::C3::Y*>*
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C3<self::C3::X, self::C3::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C4<X extends (self::C4::X*, self::C4::Y*) →* self::C4::X* = (Null, Null) →* dynamic, Y extends (self::C4::X*, self::C4::Y*) →* self::C4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C4<self::C4::X*, self::C4::Y*>*
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (Never, Never) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C4<self::C4::X, self::C4::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D1<X extends self::B<self::D1::X*, self::D1::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D1::Y*) →* self::D1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D1<self::D1::X*, self::D1::Y*>*
+class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D1<self::D1::X, self::D1::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D2<X extends self::B<self::D2::X*, self::D2::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D2::X*) →* self::D2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D2<self::D2::X*, self::D2::Y*>*
+class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D2<self::D2::X, self::D2::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D3<X extends self::B<self::D3::X*, self::D3::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D3::X*, self::D3::Y*) →* self::D3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D3<self::D3::X*, self::D3::Y*>*
+class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D3<self::D3::X, self::D3::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D4<X extends self::B<self::D4::X*, self::D4::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D4::X*, self::D4::Y*) →* self::D4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D4<self::D4::X*, self::D4::Y*>*
+class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D4<self::D4::X, self::D4::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* self::E::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → self::E::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C1<(Null) →* dynamic, (Null) →* dynamic>* c1;
-static field self::C2<(Null) →* dynamic, (Null) →* dynamic>* c2;
-static field self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>* c3;
-static field self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>* c4;
-static field self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>* d1;
-static field self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>* d2;
-static field self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>* d3;
-static field self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>* d4;
-static field self::E<(Null) →* dynamic>* e;
+static field self::C1<(Never) → dynamic, (Never) → dynamic> c1;
+static field self::C2<(Never) → dynamic, (Never) → dynamic> c2;
+static field self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic> c3;
+static field self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic> c4;
+static field self::D1<self::B<dynamic, dynamic>, (Never) → dynamic> d1;
+static field self::D2<self::B<dynamic, dynamic>, (Never) → dynamic> d2;
+static field self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic> d3;
+static field self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic> d4;
+static field self::E<(Never) → dynamic> e;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.transformed.expect
index 381fd70..aa8d0b4 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.transformed.expect
@@ -1,164 +1,64 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C1<X extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic, Y extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C1<self::C1::X*, self::C1::Y*>*
+class C1<X extends (self::C1::Y) → self::C1::X = (Never) → dynamic, Y extends (self::C1::Y) → self::C1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C1<self::C1::X, self::C1::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C2<X extends (self::C2::Y*) →* self::C2::X* = (Null) →* dynamic, Y extends (self::C2::X*) →* self::C2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C2<self::C2::X*, self::C2::Y*>*
+class C2<X extends (self::C2::Y) → self::C2::X = (Never) → dynamic, Y extends (self::C2::X) → self::C2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::X, self::C2::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C3<X extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic, Y extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C3<self::C3::X*, self::C3::Y*>*
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C3<self::C3::X, self::C3::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C4<X extends (self::C4::X*, self::C4::Y*) →* self::C4::X* = (Null, Null) →* dynamic, Y extends (self::C4::X*, self::C4::Y*) →* self::C4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C4<self::C4::X*, self::C4::Y*>*
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (Never, Never) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C4<self::C4::X, self::C4::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D1<X extends self::B<self::D1::X*, self::D1::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D1::Y*) →* self::D1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D1<self::D1::X*, self::D1::Y*>*
+class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D1<self::D1::X, self::D1::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D2<X extends self::B<self::D2::X*, self::D2::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D2::X*) →* self::D2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D2<self::D2::X*, self::D2::Y*>*
+class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D2<self::D2::X, self::D2::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D3<X extends self::B<self::D3::X*, self::D3::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D3::X*, self::D3::Y*) →* self::D3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D3<self::D3::X*, self::D3::Y*>*
+class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D3<self::D3::X, self::D3::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D4<X extends self::B<self::D4::X*, self::D4::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D4::X*, self::D4::Y*) →* self::D4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D4<self::D4::X*, self::D4::Y*>*
+class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D4<self::D4::X, self::D4::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* self::E::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → self::E::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C1<(Null) →* dynamic, (Null) →* dynamic>* c1;
-static field self::C2<(Null) →* dynamic, (Null) →* dynamic>* c2;
-static field self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>* c3;
-static field self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>* c4;
-static field self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>* d1;
-static field self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>* d2;
-static field self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>* d3;
-static field self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>* d4;
-static field self::E<(Null) →* dynamic>* e;
+static field self::C1<(Never) → dynamic, (Never) → dynamic> c1 = throw "";
+static field self::C2<(Never) → dynamic, (Never) → dynamic> c2 = throw "";
+static field self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic> c3 = throw "";
+static field self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic> c4 = throw "";
+static field self::D1<self::B<dynamic, dynamic>, (Never) → dynamic> d1 = throw "";
+static field self::D2<self::B<dynamic, dynamic>, (Never) → dynamic> d2 = throw "";
+static field self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic> d3 = throw "";
+static field self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic> d4 = throw "";
+static field self::E<(Never) → dynamic> e = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart
index 29becd6..097cba9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that covariant and contravariant occurrences of the same
 // type variable from the set of mutually dependent type variables in the bounds
 // of all of these type variables are replaced with `dynamic` and Null
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.textual_outline.expect
index 395a3e3..4c6bc43 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<X, Y> {}
 
 class C1<X extends X Function(Y), Y extends X Function(Y)> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.textual_outline_modelled.expect
index da2b04c..df9101b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<X, Y> {}
 
 class C1<X extends X Function(Y), Y extends X Function(Y)> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.expect
index 57e2111..c9056f03 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.expect
@@ -1,173 +1,73 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C1<X extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic, Y extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C1<self::C1::X*, self::C1::Y*>*
+class C1<X extends (self::C1::Y) → self::C1::X = (Never) → dynamic, Y extends (self::C1::Y) → self::C1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C1<self::C1::X, self::C1::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C2<X extends (self::C2::Y*) →* self::C2::X* = (Null) →* dynamic, Y extends (self::C2::X*) →* self::C2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C2<self::C2::X*, self::C2::Y*>*
+class C2<X extends (self::C2::Y) → self::C2::X = (Never) → dynamic, Y extends (self::C2::X) → self::C2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::X, self::C2::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C3<X extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic, Y extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C3<self::C3::X*, self::C3::Y*>*
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C3<self::C3::X, self::C3::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C4<X extends (self::C4::X*, self::C4::Y*) →* self::C4::X* = (Null, Null) →* dynamic, Y extends (self::C4::X*, self::C4::Y*) →* self::C4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C4<self::C4::X*, self::C4::Y*>*
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (Never, Never) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C4<self::C4::X, self::C4::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D1<X extends self::B<self::D1::X*, self::D1::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D1::Y*) →* self::D1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D1<self::D1::X*, self::D1::Y*>*
+class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D1<self::D1::X, self::D1::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D2<X extends self::B<self::D2::X*, self::D2::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D2::X*) →* self::D2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D2<self::D2::X*, self::D2::Y*>*
+class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D2<self::D2::X, self::D2::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D3<X extends self::B<self::D3::X*, self::D3::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D3::X*, self::D3::Y*) →* self::D3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D3<self::D3::X*, self::D3::Y*>*
+class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D3<self::D3::X, self::D3::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D4<X extends self::B<self::D4::X*, self::D4::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D4::X*, self::D4::Y*) →* self::D4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D4<self::D4::X*, self::D4::Y*>*
+class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D4<self::D4::X, self::D4::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* self::E::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → self::E::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C1<(Null) →* dynamic, (Null) →* dynamic>*>* lc1 = <self::C1<(Null) →* dynamic, (Null) →* dynamic>*>[];
-static field core::Map<self::C1<(Null) →* dynamic, (Null) →* dynamic>*, self::C1<(Null) →* dynamic, (Null) →* dynamic>*>* mc1 = <self::C1<(Null) →* dynamic, (Null) →* dynamic>*, self::C1<(Null) →* dynamic, (Null) →* dynamic>*>{};
-static field core::List<self::C2<(Null) →* dynamic, (Null) →* dynamic>*>* lc2 = <self::C2<(Null) →* dynamic, (Null) →* dynamic>*>[];
-static field core::Map<self::C2<(Null) →* dynamic, (Null) →* dynamic>*, self::C2<(Null) →* dynamic, (Null) →* dynamic>*>* mc2 = <self::C2<(Null) →* dynamic, (Null) →* dynamic>*, self::C2<(Null) →* dynamic, (Null) →* dynamic>*>{};
-static field core::List<self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* lc3 = <self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>[];
-static field core::Map<self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* mc3 = <self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>{};
-static field core::List<self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* lc4 = <self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>[];
-static field core::Map<self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* mc4 = <self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>{};
-static field core::List<self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* ld1 = <self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>[];
-static field core::Map<self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* md1 = <self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>{};
-static field core::List<self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* ld2 = <self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>[];
-static field core::Map<self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* md2 = <self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>{};
-static field core::List<self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* ld3 = <self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>[];
-static field core::Map<self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* md3 = <self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>{};
-static field core::List<self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* ld4 = <self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>[];
-static field core::Map<self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* md4 = <self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>{};
-static field core::List<self::E<(Null) →* dynamic>*>* le = <self::E<(Null) →* dynamic>*>[];
-static field core::Map<self::E<(Null) →* dynamic>*, self::E<(Null) →* dynamic>*>* me = <self::E<(Null) →* dynamic>*, self::E<(Null) →* dynamic>*>{};
+static field core::List<self::C1<(Never) → dynamic, (Never) → dynamic>> lc1 = <self::C1<(Never) → dynamic, (Never) → dynamic>>[];
+static field core::Map<self::C1<(Never) → dynamic, (Never) → dynamic>, self::C1<(Never) → dynamic, (Never) → dynamic>> mc1 = <self::C1<(Never) → dynamic, (Never) → dynamic>, self::C1<(Never) → dynamic, (Never) → dynamic>>{};
+static field core::List<self::C2<(Never) → dynamic, (Never) → dynamic>> lc2 = <self::C2<(Never) → dynamic, (Never) → dynamic>>[];
+static field core::Map<self::C2<(Never) → dynamic, (Never) → dynamic>, self::C2<(Never) → dynamic, (Never) → dynamic>> mc2 = <self::C2<(Never) → dynamic, (Never) → dynamic>, self::C2<(Never) → dynamic, (Never) → dynamic>>{};
+static field core::List<self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>> lc3 = <self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>>[];
+static field core::Map<self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>> mc3 = <self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>>{};
+static field core::List<self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>> lc4 = <self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>>[];
+static field core::Map<self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>> mc4 = <self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>>{};
+static field core::List<self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>> ld1 = <self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>>[];
+static field core::Map<self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>> md1 = <self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>>{};
+static field core::List<self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>> ld2 = <self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>>[];
+static field core::Map<self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>> md2 = <self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>>{};
+static field core::List<self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> ld3 = <self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>>[];
+static field core::Map<self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> md3 = <self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>>{};
+static field core::List<self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> ld4 = <self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>>[];
+static field core::Map<self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> md4 = <self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>>{};
+static field core::List<self::E<(Never) → dynamic>> le = <self::E<(Never) → dynamic>>[];
+static field core::Map<self::E<(Never) → dynamic>, self::E<(Never) → dynamic>> me = <self::E<(Never) → dynamic>, self::E<(Never) → dynamic>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.modular.expect
index 57e2111..c9056f03 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.modular.expect
@@ -1,173 +1,73 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C1<X extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic, Y extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C1<self::C1::X*, self::C1::Y*>*
+class C1<X extends (self::C1::Y) → self::C1::X = (Never) → dynamic, Y extends (self::C1::Y) → self::C1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C1<self::C1::X, self::C1::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C2<X extends (self::C2::Y*) →* self::C2::X* = (Null) →* dynamic, Y extends (self::C2::X*) →* self::C2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C2<self::C2::X*, self::C2::Y*>*
+class C2<X extends (self::C2::Y) → self::C2::X = (Never) → dynamic, Y extends (self::C2::X) → self::C2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::X, self::C2::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C3<X extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic, Y extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C3<self::C3::X*, self::C3::Y*>*
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C3<self::C3::X, self::C3::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C4<X extends (self::C4::X*, self::C4::Y*) →* self::C4::X* = (Null, Null) →* dynamic, Y extends (self::C4::X*, self::C4::Y*) →* self::C4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C4<self::C4::X*, self::C4::Y*>*
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (Never, Never) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C4<self::C4::X, self::C4::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D1<X extends self::B<self::D1::X*, self::D1::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D1::Y*) →* self::D1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D1<self::D1::X*, self::D1::Y*>*
+class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D1<self::D1::X, self::D1::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D2<X extends self::B<self::D2::X*, self::D2::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D2::X*) →* self::D2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D2<self::D2::X*, self::D2::Y*>*
+class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D2<self::D2::X, self::D2::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D3<X extends self::B<self::D3::X*, self::D3::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D3::X*, self::D3::Y*) →* self::D3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D3<self::D3::X*, self::D3::Y*>*
+class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D3<self::D3::X, self::D3::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D4<X extends self::B<self::D4::X*, self::D4::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D4::X*, self::D4::Y*) →* self::D4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D4<self::D4::X*, self::D4::Y*>*
+class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D4<self::D4::X, self::D4::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* self::E::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → self::E::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C1<(Null) →* dynamic, (Null) →* dynamic>*>* lc1 = <self::C1<(Null) →* dynamic, (Null) →* dynamic>*>[];
-static field core::Map<self::C1<(Null) →* dynamic, (Null) →* dynamic>*, self::C1<(Null) →* dynamic, (Null) →* dynamic>*>* mc1 = <self::C1<(Null) →* dynamic, (Null) →* dynamic>*, self::C1<(Null) →* dynamic, (Null) →* dynamic>*>{};
-static field core::List<self::C2<(Null) →* dynamic, (Null) →* dynamic>*>* lc2 = <self::C2<(Null) →* dynamic, (Null) →* dynamic>*>[];
-static field core::Map<self::C2<(Null) →* dynamic, (Null) →* dynamic>*, self::C2<(Null) →* dynamic, (Null) →* dynamic>*>* mc2 = <self::C2<(Null) →* dynamic, (Null) →* dynamic>*, self::C2<(Null) →* dynamic, (Null) →* dynamic>*>{};
-static field core::List<self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* lc3 = <self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>[];
-static field core::Map<self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* mc3 = <self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>{};
-static field core::List<self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* lc4 = <self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>[];
-static field core::Map<self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* mc4 = <self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>{};
-static field core::List<self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* ld1 = <self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>[];
-static field core::Map<self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* md1 = <self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>{};
-static field core::List<self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* ld2 = <self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>[];
-static field core::Map<self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* md2 = <self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>{};
-static field core::List<self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* ld3 = <self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>[];
-static field core::Map<self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* md3 = <self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>{};
-static field core::List<self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* ld4 = <self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>[];
-static field core::Map<self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* md4 = <self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>{};
-static field core::List<self::E<(Null) →* dynamic>*>* le = <self::E<(Null) →* dynamic>*>[];
-static field core::Map<self::E<(Null) →* dynamic>*, self::E<(Null) →* dynamic>*>* me = <self::E<(Null) →* dynamic>*, self::E<(Null) →* dynamic>*>{};
+static field core::List<self::C1<(Never) → dynamic, (Never) → dynamic>> lc1 = <self::C1<(Never) → dynamic, (Never) → dynamic>>[];
+static field core::Map<self::C1<(Never) → dynamic, (Never) → dynamic>, self::C1<(Never) → dynamic, (Never) → dynamic>> mc1 = <self::C1<(Never) → dynamic, (Never) → dynamic>, self::C1<(Never) → dynamic, (Never) → dynamic>>{};
+static field core::List<self::C2<(Never) → dynamic, (Never) → dynamic>> lc2 = <self::C2<(Never) → dynamic, (Never) → dynamic>>[];
+static field core::Map<self::C2<(Never) → dynamic, (Never) → dynamic>, self::C2<(Never) → dynamic, (Never) → dynamic>> mc2 = <self::C2<(Never) → dynamic, (Never) → dynamic>, self::C2<(Never) → dynamic, (Never) → dynamic>>{};
+static field core::List<self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>> lc3 = <self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>>[];
+static field core::Map<self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>> mc3 = <self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>>{};
+static field core::List<self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>> lc4 = <self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>>[];
+static field core::Map<self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>> mc4 = <self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>>{};
+static field core::List<self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>> ld1 = <self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>>[];
+static field core::Map<self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>> md1 = <self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>>{};
+static field core::List<self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>> ld2 = <self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>>[];
+static field core::Map<self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>> md2 = <self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>>{};
+static field core::List<self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> ld3 = <self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>>[];
+static field core::Map<self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> md3 = <self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>>{};
+static field core::List<self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> ld4 = <self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>>[];
+static field core::Map<self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> md4 = <self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>>{};
+static field core::List<self::E<(Never) → dynamic>> le = <self::E<(Never) → dynamic>>[];
+static field core::Map<self::E<(Never) → dynamic>, self::E<(Never) → dynamic>> me = <self::E<(Never) → dynamic>, self::E<(Never) → dynamic>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.outline.expect
index eee0aab..e553491 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.outline.expect
@@ -1,164 +1,64 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C1<X extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic, Y extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C1<self::C1::X*, self::C1::Y*>*
+class C1<X extends (self::C1::Y) → self::C1::X = (Never) → dynamic, Y extends (self::C1::Y) → self::C1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C1<self::C1::X, self::C1::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C2<X extends (self::C2::Y*) →* self::C2::X* = (Null) →* dynamic, Y extends (self::C2::X*) →* self::C2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C2<self::C2::X*, self::C2::Y*>*
+class C2<X extends (self::C2::Y) → self::C2::X = (Never) → dynamic, Y extends (self::C2::X) → self::C2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::X, self::C2::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C3<X extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic, Y extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C3<self::C3::X*, self::C3::Y*>*
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C3<self::C3::X, self::C3::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C4<X extends (self::C4::X*, self::C4::Y*) →* self::C4::X* = (Null, Null) →* dynamic, Y extends (self::C4::X*, self::C4::Y*) →* self::C4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C4<self::C4::X*, self::C4::Y*>*
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (Never, Never) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C4<self::C4::X, self::C4::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D1<X extends self::B<self::D1::X*, self::D1::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D1::Y*) →* self::D1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D1<self::D1::X*, self::D1::Y*>*
+class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D1<self::D1::X, self::D1::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D2<X extends self::B<self::D2::X*, self::D2::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D2::X*) →* self::D2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D2<self::D2::X*, self::D2::Y*>*
+class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D2<self::D2::X, self::D2::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D3<X extends self::B<self::D3::X*, self::D3::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D3::X*, self::D3::Y*) →* self::D3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D3<self::D3::X*, self::D3::Y*>*
+class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D3<self::D3::X, self::D3::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D4<X extends self::B<self::D4::X*, self::D4::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D4::X*, self::D4::Y*) →* self::D4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D4<self::D4::X*, self::D4::Y*>*
+class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D4<self::D4::X, self::D4::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* self::E::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → self::E::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C1<(Null) →* dynamic, (Null) →* dynamic>*>* lc1;
-static field core::Map<self::C1<(Null) →* dynamic, (Null) →* dynamic>*, self::C1<(Null) →* dynamic, (Null) →* dynamic>*>* mc1;
-static field core::List<self::C2<(Null) →* dynamic, (Null) →* dynamic>*>* lc2;
-static field core::Map<self::C2<(Null) →* dynamic, (Null) →* dynamic>*, self::C2<(Null) →* dynamic, (Null) →* dynamic>*>* mc2;
-static field core::List<self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* lc3;
-static field core::Map<self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* mc3;
-static field core::List<self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* lc4;
-static field core::Map<self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* mc4;
-static field core::List<self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* ld1;
-static field core::Map<self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* md1;
-static field core::List<self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* ld2;
-static field core::Map<self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* md2;
-static field core::List<self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* ld3;
-static field core::Map<self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* md3;
-static field core::List<self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* ld4;
-static field core::Map<self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* md4;
-static field core::List<self::E<(Null) →* dynamic>*>* le;
-static field core::Map<self::E<(Null) →* dynamic>*, self::E<(Null) →* dynamic>*>* me;
+static field core::List<self::C1<(Never) → dynamic, (Never) → dynamic>> lc1;
+static field core::Map<self::C1<(Never) → dynamic, (Never) → dynamic>, self::C1<(Never) → dynamic, (Never) → dynamic>> mc1;
+static field core::List<self::C2<(Never) → dynamic, (Never) → dynamic>> lc2;
+static field core::Map<self::C2<(Never) → dynamic, (Never) → dynamic>, self::C2<(Never) → dynamic, (Never) → dynamic>> mc2;
+static field core::List<self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>> lc3;
+static field core::Map<self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>> mc3;
+static field core::List<self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>> lc4;
+static field core::Map<self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>> mc4;
+static field core::List<self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>> ld1;
+static field core::Map<self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>> md1;
+static field core::List<self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>> ld2;
+static field core::Map<self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>> md2;
+static field core::List<self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> ld3;
+static field core::Map<self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> md3;
+static field core::List<self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> ld4;
+static field core::Map<self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> md4;
+static field core::List<self::E<(Never) → dynamic>> le;
+static field core::Map<self::E<(Never) → dynamic>, self::E<(Never) → dynamic>> me;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.transformed.expect
index 57d3ec5..3b39227 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.transformed.expect
@@ -1,173 +1,73 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C1<X extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic, Y extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C1<self::C1::X*, self::C1::Y*>*
+class C1<X extends (self::C1::Y) → self::C1::X = (Never) → dynamic, Y extends (self::C1::Y) → self::C1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C1<self::C1::X, self::C1::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C2<X extends (self::C2::Y*) →* self::C2::X* = (Null) →* dynamic, Y extends (self::C2::X*) →* self::C2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C2<self::C2::X*, self::C2::Y*>*
+class C2<X extends (self::C2::Y) → self::C2::X = (Never) → dynamic, Y extends (self::C2::X) → self::C2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::X, self::C2::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C3<X extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic, Y extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C3<self::C3::X*, self::C3::Y*>*
+class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C3<self::C3::X, self::C3::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C4<X extends (self::C4::X*, self::C4::Y*) →* self::C4::X* = (Null, Null) →* dynamic, Y extends (self::C4::X*, self::C4::Y*) →* self::C4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::C4<self::C4::X*, self::C4::Y*>*
+class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (Never, Never) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C4<self::C4::X, self::C4::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D1<X extends self::B<self::D1::X*, self::D1::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D1::Y*) →* self::D1::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D1<self::D1::X*, self::D1::Y*>*
+class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D1<self::D1::X, self::D1::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D2<X extends self::B<self::D2::X*, self::D2::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D2::X*) →* self::D2::Y* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D2<self::D2::X*, self::D2::Y*>*
+class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D2<self::D2::X, self::D2::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D3<X extends self::B<self::D3::X*, self::D3::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D3::X*, self::D3::Y*) →* self::D3::X* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D3<self::D3::X*, self::D3::Y*>*
+class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D3<self::D3::X, self::D3::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D4<X extends self::B<self::D4::X*, self::D4::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D4::X*, self::D4::Y*) →* self::D4::Y* = (Null, Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::D4<self::D4::X*, self::D4::Y*>*
+class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (Never, Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::D4<self::D4::X, self::D4::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class E<X extends (self::E::X*) →* self::E::X* = (Null) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::E<self::E::X*>*
+class E<X extends (self::E::X) → self::E::X = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::C1<(Null) →* dynamic, (Null) →* dynamic>*>* lc1 = core::_GrowableList::•<self::C1<(Null) →* dynamic, (Null) →* dynamic>*>(0);
-static field core::Map<self::C1<(Null) →* dynamic, (Null) →* dynamic>*, self::C1<(Null) →* dynamic, (Null) →* dynamic>*>* mc1 = <self::C1<(Null) →* dynamic, (Null) →* dynamic>*, self::C1<(Null) →* dynamic, (Null) →* dynamic>*>{};
-static field core::List<self::C2<(Null) →* dynamic, (Null) →* dynamic>*>* lc2 = core::_GrowableList::•<self::C2<(Null) →* dynamic, (Null) →* dynamic>*>(0);
-static field core::Map<self::C2<(Null) →* dynamic, (Null) →* dynamic>*, self::C2<(Null) →* dynamic, (Null) →* dynamic>*>* mc2 = <self::C2<(Null) →* dynamic, (Null) →* dynamic>*, self::C2<(Null) →* dynamic, (Null) →* dynamic>*>{};
-static field core::List<self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* lc3 = core::_GrowableList::•<self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>(0);
-static field core::Map<self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* mc3 = <self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>{};
-static field core::List<self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* lc4 = core::_GrowableList::•<self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>(0);
-static field core::Map<self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* mc4 = <self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>{};
-static field core::List<self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* ld1 = core::_GrowableList::•<self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>(0);
-static field core::Map<self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* md1 = <self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>{};
-static field core::List<self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* ld2 = core::_GrowableList::•<self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>(0);
-static field core::Map<self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* md2 = <self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>{};
-static field core::List<self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* ld3 = core::_GrowableList::•<self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>(0);
-static field core::Map<self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* md3 = <self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>{};
-static field core::List<self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* ld4 = core::_GrowableList::•<self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>(0);
-static field core::Map<self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* md4 = <self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>{};
-static field core::List<self::E<(Null) →* dynamic>*>* le = core::_GrowableList::•<self::E<(Null) →* dynamic>*>(0);
-static field core::Map<self::E<(Null) →* dynamic>*, self::E<(Null) →* dynamic>*>* me = <self::E<(Null) →* dynamic>*, self::E<(Null) →* dynamic>*>{};
+static field core::List<self::C1<(Never) → dynamic, (Never) → dynamic>> lc1 = core::_GrowableList::•<self::C1<(Never) → dynamic, (Never) → dynamic>>(0);
+static field core::Map<self::C1<(Never) → dynamic, (Never) → dynamic>, self::C1<(Never) → dynamic, (Never) → dynamic>> mc1 = <self::C1<(Never) → dynamic, (Never) → dynamic>, self::C1<(Never) → dynamic, (Never) → dynamic>>{};
+static field core::List<self::C2<(Never) → dynamic, (Never) → dynamic>> lc2 = core::_GrowableList::•<self::C2<(Never) → dynamic, (Never) → dynamic>>(0);
+static field core::Map<self::C2<(Never) → dynamic, (Never) → dynamic>, self::C2<(Never) → dynamic, (Never) → dynamic>> mc2 = <self::C2<(Never) → dynamic, (Never) → dynamic>, self::C2<(Never) → dynamic, (Never) → dynamic>>{};
+static field core::List<self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>> lc3 = core::_GrowableList::•<self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>>(0);
+static field core::Map<self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>> mc3 = <self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic>>{};
+static field core::List<self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>> lc4 = core::_GrowableList::•<self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>>(0);
+static field core::Map<self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>> mc4 = <self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>, self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic>>{};
+static field core::List<self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>> ld1 = core::_GrowableList::•<self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>>(0);
+static field core::Map<self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>> md1 = <self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D1<self::B<dynamic, dynamic>, (Never) → dynamic>>{};
+static field core::List<self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>> ld2 = core::_GrowableList::•<self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>>(0);
+static field core::Map<self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>> md2 = <self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>, self::D2<self::B<dynamic, dynamic>, (Never) → dynamic>>{};
+static field core::List<self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> ld3 = core::_GrowableList::•<self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>>(0);
+static field core::Map<self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> md3 = <self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic>>{};
+static field core::List<self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> ld4 = core::_GrowableList::•<self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>>(0);
+static field core::Map<self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>> md4 = <self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>, self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic>>{};
+static field core::List<self::E<(Never) → dynamic>> le = core::_GrowableList::•<self::E<(Never) → dynamic>>(0);
+static field core::Map<self::E<(Never) → dynamic>, self::E<(Never) → dynamic>> me = <self::E<(Never) → dynamic>, self::E<(Never) → dynamic>>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart
index dd5cfb9..6bb14c5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that a compile-time error is generated when instantiate to
 // bound can't be applied due to raw types with non-simple bounds.  The
 // non-simplicity in this test is due to having another raw type in the bound
@@ -13,6 +13,6 @@
 
 class C<TypeV extends B> {}
 
-C c;
+C c = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.textual_outline.expect
index c2ee308..e93a5b6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 class A<TypeT, TypeS extends TypeT> {}
 
 class B<TypeU extends A> {}
 
 class C<TypeV extends B> {}
 
-C c;
+C c = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.textual_outline_modelled.expect
index 79ad1b7..b6eb7a7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
-C c;
+C c = throw '';
 
 class A<TypeT, TypeS extends TypeT> {}
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.expect
index c15ea34..626890a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,50 +13,20 @@
 import self as self;
 import "dart:core" as core;
 
-class A<TypeT extends core::Object* = dynamic, TypeS extends self::A::TypeT* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::TypeT*, self::A::TypeS*>*
+class A<TypeT extends core::Object? = dynamic, TypeS extends self::A::TypeT% = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::TypeT%, self::A::TypeS%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<TypeU extends self::A<dynamic, dynamic>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::TypeU*>*
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::TypeU>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<TypeV extends self::B<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::TypeV*>*
+class C<TypeV extends self::B<dynamic>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::TypeV>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<self::B<dynamic>*>* c;
+static field self::C<self::B<dynamic>> c = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.modular.expect
index c15ea34..626890a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,50 +13,20 @@
 import self as self;
 import "dart:core" as core;
 
-class A<TypeT extends core::Object* = dynamic, TypeS extends self::A::TypeT* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::TypeT*, self::A::TypeS*>*
+class A<TypeT extends core::Object? = dynamic, TypeS extends self::A::TypeT% = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::TypeT%, self::A::TypeS%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<TypeU extends self::A<dynamic, dynamic>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::TypeU*>*
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::TypeU>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<TypeV extends self::B<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::TypeV*>*
+class C<TypeV extends self::B<dynamic>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::TypeV>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<self::B<dynamic>*>* c;
+static field self::C<self::B<dynamic>> c = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.outline.expect
index b64816e..22c8388 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,48 +13,18 @@
 import self as self;
 import "dart:core" as core;
 
-class A<TypeT extends core::Object* = dynamic, TypeS extends self::A::TypeT* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::TypeT*, self::A::TypeS*>*
+class A<TypeT extends core::Object? = dynamic, TypeS extends self::A::TypeT% = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::TypeT%, self::A::TypeS%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<TypeU extends self::A<dynamic, dynamic>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::TypeU*>*
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::TypeU>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<TypeV extends self::B<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::TypeV*>*
+class C<TypeV extends self::B<dynamic>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::TypeV>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<self::B<dynamic>*>* c;
+static field self::C<self::B<dynamic>> c;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.transformed.expect
index c15ea34..626890a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,50 +13,20 @@
 import self as self;
 import "dart:core" as core;
 
-class A<TypeT extends core::Object* = dynamic, TypeS extends self::A::TypeT* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::TypeT*, self::A::TypeS*>*
+class A<TypeT extends core::Object? = dynamic, TypeS extends self::A::TypeT% = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::TypeT%, self::A::TypeS%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<TypeU extends self::A<dynamic, dynamic>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::TypeU*>*
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::TypeU>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<TypeV extends self::B<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::C<self::C::TypeV*>*
+class C<TypeV extends self::B<dynamic>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::TypeV>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::C<self::B<dynamic>*>* c;
+static field self::C<self::B<dynamic>> c = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart
index ea27509..e026660 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that a compile-time error is generated when instantiate to
 // bound can't be applied due to raw types with non-simple bounds.  The
 // non-simplicity in this test is due to dependencies between type variables.
@@ -10,6 +10,6 @@
 
 class B<TypeU extends A> {}
 
-B b;
+B b = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.textual_outline.expect
index f091f4e..fb571d9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 class A<TypeT, TypeS extends TypeT> {}
 
 class B<TypeU extends A> {}
 
-B b;
+B b = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.textual_outline_modelled.expect
index bafa4e3..323c659 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
-B b;
+B b = throw '';
 
 class A<TypeT, TypeS extends TypeT> {}
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.expect
index a052bc5..18023ea 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,35 +13,15 @@
 import self as self;
 import "dart:core" as core;
 
-class A<TypeT extends core::Object* = dynamic, TypeS extends self::A::TypeT* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::TypeT*, self::A::TypeS*>*
+class A<TypeT extends core::Object? = dynamic, TypeS extends self::A::TypeT% = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::TypeT%, self::A::TypeS%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<TypeU extends self::A<dynamic, dynamic>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::TypeU*>*
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::TypeU>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<dynamic>* b;
+static field self::B<dynamic> b = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.modular.expect
index a052bc5..18023ea 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,35 +13,15 @@
 import self as self;
 import "dart:core" as core;
 
-class A<TypeT extends core::Object* = dynamic, TypeS extends self::A::TypeT* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::TypeT*, self::A::TypeS*>*
+class A<TypeT extends core::Object? = dynamic, TypeS extends self::A::TypeT% = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::TypeT%, self::A::TypeS%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<TypeU extends self::A<dynamic, dynamic>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::TypeU*>*
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::TypeU>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<dynamic>* b;
+static field self::B<dynamic> b = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.outline.expect
index b6852b4..6755c00 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,34 +13,14 @@
 import self as self;
 import "dart:core" as core;
 
-class A<TypeT extends core::Object* = dynamic, TypeS extends self::A::TypeT* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::TypeT*, self::A::TypeS*>*
+class A<TypeT extends core::Object? = dynamic, TypeS extends self::A::TypeT% = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::TypeT%, self::A::TypeS%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<TypeU extends self::A<dynamic, dynamic>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::TypeU*>*
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::TypeU>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<dynamic>* b;
+static field self::B<dynamic> b;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.transformed.expect
index a052bc5..18023ea 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,35 +13,15 @@
 import self as self;
 import "dart:core" as core;
 
-class A<TypeT extends core::Object* = dynamic, TypeS extends self::A::TypeT* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::TypeT*, self::A::TypeS*>*
+class A<TypeT extends core::Object? = dynamic, TypeS extends self::A::TypeT% = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::TypeT%, self::A::TypeS%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<TypeU extends self::A<dynamic, dynamic>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::TypeU*>*
+class B<TypeU extends self::A<dynamic, dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::TypeU>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::B<dynamic>* b;
+static field self::B<dynamic> b = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart
index 7a10a41..708063b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 // This test checks that the cyclic non-simplicity issues are detected in case
 // when both class declaration and a parametrized typedef participate in the
 // cycle.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.expect
index a8be06f..42c263c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Error: Type variables can't have generic function types in their bounds.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:12: Error: Type variables can't have generic function types in their bounds.
 // class Hest<TypeX extends Fisk> {}
 //            ^^^^^
 //
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:13:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
 // Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
 // typedef Fisk = void Function<TypeY extends Hest>();
 //         ^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:13:30: Context: Bound of this variable references raw type 'Hest'.
 // typedef Fisk = void Function<TypeY extends Hest>();
 //                              ^^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:12: Context: Bound of this variable references raw type 'Fisk'.
 // class Hest<TypeX extends Fisk> {}
 //            ^^^^^
 //
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.modular.expect
index a8be06f..42c263c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.modular.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Error: Type variables can't have generic function types in their bounds.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:12: Error: Type variables can't have generic function types in their bounds.
 // class Hest<TypeX extends Fisk> {}
 //            ^^^^^
 //
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:13:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
 // Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
 // typedef Fisk = void Function<TypeY extends Hest>();
 //         ^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:13:30: Context: Bound of this variable references raw type 'Hest'.
 // typedef Fisk = void Function<TypeY extends Hest>();
 //                              ^^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:12: Context: Bound of this variable references raw type 'Fisk'.
 // class Hest<TypeX extends Fisk> {}
 //            ^^^^^
 //
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.outline.expect
index 6f257ee..966cb04 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.outline.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Error: Type variables can't have generic function types in their bounds.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:12: Error: Type variables can't have generic function types in their bounds.
 // class Hest<TypeX extends Fisk> {}
 //            ^^^^^
 //
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:13:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
 // Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
 // typedef Fisk = void Function<TypeY extends Hest>();
 //         ^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:13:30: Context: Bound of this variable references raw type 'Hest'.
 // typedef Fisk = void Function<TypeY extends Hest>();
 //                              ^^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:12: Context: Bound of this variable references raw type 'Fisk'.
 // class Hest<TypeX extends Fisk> {}
 //            ^^^^^
 //
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.transformed.expect
index a8be06f..42c263c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.transformed.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Error: Type variables can't have generic function types in their bounds.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:12: Error: Type variables can't have generic function types in their bounds.
 // class Hest<TypeX extends Fisk> {}
 //            ^^^^^
 //
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:13:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
 // Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
 // typedef Fisk = void Function<TypeY extends Hest>();
 //         ^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:13:30: Context: Bound of this variable references raw type 'Hest'.
 // typedef Fisk = void Function<TypeY extends Hest>();
 //                              ^^^^^
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:12: Context: Bound of this variable references raw type 'Fisk'.
 // class Hest<TypeX extends Fisk> {}
 //            ^^^^^
 //
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart
new file mode 100644
index 0000000..d3acace
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart
@@ -0,0 +1,13 @@
+// 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.
+
+// This test checks that the cyclic non-simplicity issues are detected in case
+// when both class declaration and a parametrized typedef participate in the
+// cycle.
+
+class Hest<TypeX extends Fisk> {}
+
+typedef Fisk = void Function<TypeY extends Hest>();
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline.expect
new file mode 100644
index 0000000..e977e49
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+class Hest<TypeX extends Fisk> {}
+
+typedef Fisk = void Function<TypeY extends Hest>();
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..7213ffd
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+class Hest<TypeX extends Fisk> {}
+
+main() {}
+typedef Fisk = void Function<TypeY extends Hest>();
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.expect
new file mode 100644
index 0000000..d02480f
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//         ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//                              ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
+// class Hest<TypeX extends Fisk> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk = <TypeY extends core::Object? = dynamic>() → void;
+class Hest<TypeX extends <TypeY extends core::Object? = dynamic>() → void> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.modular.expect
new file mode 100644
index 0000000..d02480f
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//         ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//                              ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
+// class Hest<TypeX extends Fisk> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk = <TypeY extends core::Object? = dynamic>() → void;
+class Hest<TypeX extends <TypeY extends core::Object? = dynamic>() → void> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.outline.expect
new file mode 100644
index 0000000..4514a42
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.outline.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//         ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//                              ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
+// class Hest<TypeX extends Fisk> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk = <TypeY extends core::Object? = dynamic>() → void;
+class Hest<TypeX extends <TypeY extends core::Object? = dynamic>() → void> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.transformed.expect
new file mode 100644
index 0000000..d02480f
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart.weak.transformed.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//         ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//                              ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle2.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
+// class Hest<TypeX extends Fisk> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk = <TypeY extends core::Object? = dynamic>() → void;
+class Hest<TypeX extends <TypeY extends core::Object? = dynamic>() → void> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart
index fc13d78..5aebdc0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that the cyclic non-simplicity detection works in case when
 // both class declarations and typedefs participate in the cycle.
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.textual_outline.expect
index d617fa8..f524d0c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Fisk> {}
 
 typedef void Fisk<TypeY extends Hest>();
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.textual_outline_modelled.expect
index d1f5a32..b7b4f11 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Fisk> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.expect
index 1adc8bcb..27b77b9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,20 +16,10 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Fisk<unrelated TypeY extends core::Object* = dynamic> = () →* void;
-class Hest<TypeX extends () →* void> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+typedef Fisk<unrelated TypeY extends core::Object? = dynamic> = () → void;
+class Hest<TypeX extends () → void> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.modular.expect
index 1adc8bcb..27b77b9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,20 +16,10 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Fisk<unrelated TypeY extends core::Object* = dynamic> = () →* void;
-class Hest<TypeX extends () →* void> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+typedef Fisk<unrelated TypeY extends core::Object? = dynamic> = () → void;
+class Hest<TypeX extends () → void> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.outline.expect
index 1828b6d..03b2ff15 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,20 +16,10 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Fisk<unrelated TypeY extends core::Object* = dynamic> = () →* void;
-class Hest<TypeX extends () →* void> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+typedef Fisk<unrelated TypeY extends core::Object? = dynamic> = () → void;
+class Hest<TypeX extends () → void> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.transformed.expect
index 1adc8bcb..27b77b9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,20 +16,10 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Fisk<unrelated TypeY extends core::Object* = dynamic> = () →* void;
-class Hest<TypeX extends () →* void> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+typedef Fisk<unrelated TypeY extends core::Object? = dynamic> = () → void;
+class Hest<TypeX extends () → void> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart
index e3b3f29..5df69f7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that the use of a raw generic type in the bounds of its own
 // type variables is recognized and reported as a compile-time error.
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.textual_outline.expect
index 3a179d7..bd9ba50 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Hest> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.textual_outline_modelled.expect
index 3a179d7..bd9ba50 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Hest> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.expect
index a6180cf..7ec133a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,19 +10,9 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.modular.expect
index a6180cf..7ec133a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,19 +10,9 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.outline.expect
index 920ce20..148665e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,19 +10,9 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.transformed.expect
index a6180cf..7ec133a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,19 +10,9 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart
index 542b729..2703630 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that the error is reported for all type variables that
 // reference the raw generic type they are defined on.
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.textual_outline.expect
index 5125405..ff0266b2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Hest, TypeY extends Hest> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.textual_outline_modelled.expect
index 5125405..ff0266b2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Hest, TypeY extends Hest> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.expect
index 3cc0758..22ce490 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,19 +15,9 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic, TypeY extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*, self::Hest::TypeY*>*
+class Hest<TypeX extends core::Object? = dynamic, TypeY extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%, self::Hest::TypeY%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.modular.expect
index 3cc0758..22ce490 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,19 +15,9 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic, TypeY extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*, self::Hest::TypeY*>*
+class Hest<TypeX extends core::Object? = dynamic, TypeY extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%, self::Hest::TypeY%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.outline.expect
index 0ad5f58..e2b216d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,19 +15,9 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic, TypeY extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*, self::Hest::TypeY*>*
+class Hest<TypeX extends core::Object? = dynamic, TypeY extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%, self::Hest::TypeY%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.transformed.expect
index 3cc0758..22ce490 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,19 +15,9 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic, TypeY extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*, self::Hest::TypeY*>*
+class Hest<TypeX extends core::Object? = dynamic, TypeY extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%, self::Hest::TypeY%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart
index 42359be..a72f472 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that the error message is not duplicated in case when the
 // raw generic type is used more than once in the bound of its own type
 // variable.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.textual_outline.expect
index d029c13..c2a3766 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Map<Hest, Hest>> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.textual_outline_modelled.expect
index d029c13..c2a3766 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Map<Hest, Hest>> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.expect
index 637253f..2f66487 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,19 +10,9 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.modular.expect
index 637253f..2f66487 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,19 +10,9 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.outline.expect
index e954708..7af893c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,19 +10,9 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.transformed.expect
index 637253f..2f66487 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,19 +10,9 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart
index cd3608a..91a3b2b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that same generic type passed as a type argument to itself
 // doesn't cause issues in the mechanism for detection of non-simple bounds.
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.textual_outline.expect
index c23f912..d637216 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX> {}
 
 class Fisk<TypeY extends Hest<Hest<Object>>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.textual_outline_modelled.expect
index 6328216..e5df9718 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Fisk<TypeY extends Hest<Hest<Object>>> {}
 
 class Hest<TypeX> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.expect
index f205aa6..4a53f08 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.expect
@@ -1,35 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<core::Object*>*>*> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Hest<self::Hest<core::Object>>> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.modular.expect
index f205aa6..4a53f08 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.modular.expect
@@ -1,35 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<core::Object*>*>*> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Hest<self::Hest<core::Object>>> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.outline.expect
index 8159df5..802d82d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.outline.expect
@@ -1,34 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<core::Object*>*>*> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Hest<self::Hest<core::Object>>> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.transformed.expect
index f205aa6..4a53f08 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.transformed.expect
@@ -1,35 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<core::Object*>*>*> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Hest<self::Hest<core::Object>>> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart
index bb94997..e7415fe 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that an error is reported on all type variables that have a
 // raw generic type in their bounds in case this generic type has non-simple
 // bounds.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.textual_outline.expect
index fc6ec7e..dec8c30 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Hest<TypeX>> {}
 
 class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.textual_outline_modelled.expect
index 06d86f8..e8fe427 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
 
 class Hest<TypeX extends Hest<TypeX>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.expect
index 340e597..bfc473d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,34 +21,14 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*, self::Fisk::TypeZ*>*
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY, self::Fisk::TypeZ>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.modular.expect
index 340e597..bfc473d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,34 +21,14 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*, self::Fisk::TypeZ*>*
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY, self::Fisk::TypeZ>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.outline.expect
index bcabd56..b7a6e5b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,33 +21,13 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*, self::Fisk::TypeZ*>*
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY, self::Fisk::TypeZ>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.transformed.expect
index 340e597..bfc473d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,34 +21,14 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*, self::Fisk::TypeZ*>*
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY, self::Fisk::TypeZ>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart
index fd7f0ae..696a47f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that the use of a raw generic type with non-simple bounds in
 // a bound of a type variable is detected when that generic type comes from a
 // compiled .dill file.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.textual_outline.expect
index 91c2f07..ae4efd5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:collection';
 
 class Hest<X extends LinkedListEntry> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.textual_outline_modelled.expect
index 91c2f07..ae4efd5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:collection';
 
 class Hest<X extends LinkedListEntry> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.expect
index 5f8978b..b54c2d9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,19 +13,9 @@
 
 import "dart:collection";
 
-class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::X*>*
+class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.modular.expect
index 5f8978b..b54c2d9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,19 +13,9 @@
 
 import "dart:collection";
 
-class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::X*>*
+class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.outline.expect
index 59930e9..86778b3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,19 +13,9 @@
 
 import "dart:collection";
 
-class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::X*>*
+class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::X>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.transformed.expect
index 5f8978b..b54c2d9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,19 +13,9 @@
 
 import "dart:collection";
 
-class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::X*>*
+class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart
index 22fb32f..6345d59 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart
@@ -1,13 +1,15 @@
 // 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.
-// @dart=2.9
+
+// @dart=2.13
+
 // This test checks that the use of generic function types in the bound of a
 // type variable is detected early and doesn't cause issues to the mechanism for
 // detection of non-simple bounds.
 
 class Hest<TypeX extends Hest<TypeX>> {}
 
-class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
+class Fisk<TypeY extends Function<TypeZ extends Hest<Never>>(TypeZ)> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.textual_outline.expect
index 778bd3e..685ff92 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.textual_outline.expect
@@ -1,6 +1,6 @@
-// @dart = 2.9
+// @dart = 2.13
 class Hest<TypeX extends Hest<TypeX>> {}
 
-class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
+class Fisk<TypeY extends Function<TypeZ extends Hest<Never>>(TypeZ)> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.textual_outline_modelled.expect
index cadda6a..552afea 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.textual_outline_modelled.expect
@@ -1,5 +1,5 @@
-// @dart = 2.9
-class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
+// @dart = 2.13
+class Fisk<TypeY extends Function<TypeZ extends Hest<Never>>(TypeZ)> {}
 
 class Hest<TypeX extends Hest<TypeX>> {}
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.expect
index 74416db..170b8ea 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:11:12: Error: Type variables can't have generic function types in their bounds.
-// class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:13:12: Error: Type variables can't have generic function types in their bounds.
+// class Fisk<TypeY extends Function<TypeZ extends Hest<Never>>(TypeZ)> {}
 //            ^^^^^
 //
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends <TypeZ extends self::Hest<Null>* = dynamic>(TypeZ*) →* dynamic = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends <TypeZ extends self::Hest<Never> = dynamic>(TypeZ) → dynamic = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.modular.expect
index 74416db..170b8ea 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.modular.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:11:12: Error: Type variables can't have generic function types in their bounds.
-// class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:13:12: Error: Type variables can't have generic function types in their bounds.
+// class Fisk<TypeY extends Function<TypeZ extends Hest<Never>>(TypeZ)> {}
 //            ^^^^^
 //
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends <TypeZ extends self::Hest<Null>* = dynamic>(TypeZ*) →* dynamic = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends <TypeZ extends self::Hest<Never> = dynamic>(TypeZ) → dynamic = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.outline.expect
index fd3806b..60296ee 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.outline.expect
@@ -1,41 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:11:12: Error: Type variables can't have generic function types in their bounds.
-// class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:13:12: Error: Type variables can't have generic function types in their bounds.
+// class Fisk<TypeY extends Function<TypeZ extends Hest<Never>>(TypeZ)> {}
 //            ^^^^^
 //
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends <TypeZ extends self::Hest<Null>* = dynamic>(TypeZ*) →* dynamic = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends <TypeZ extends self::Hest<Never> = dynamic>(TypeZ) → dynamic = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.transformed.expect
index 74416db..170b8ea 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.transformed.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:11:12: Error: Type variables can't have generic function types in their bounds.
-// class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:13:12: Error: Type variables can't have generic function types in their bounds.
+// class Fisk<TypeY extends Function<TypeZ extends Hest<Never>>(TypeZ)> {}
 //            ^^^^^
 //
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends <TypeZ extends self::Hest<Null>* = dynamic>(TypeZ*) →* dynamic = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends <TypeZ extends self::Hest<Never> = dynamic>(TypeZ) → dynamic = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart
index 9721dda..496b166 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that an error is reported on all raw generic types with
 // non-simple bounds used in the bound of the same type variable.
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.textual_outline.expect
index 59d0dd8..2138431 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Hest<TypeX>> {}
 
 class Fisk<TypeY extends Fisk<TypeY>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.textual_outline_modelled.expect
index 3762b1e..c60a816 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Fisk<TypeY extends Fisk<TypeY>> {}
 
 class Hest<TypeX extends Hest<TypeX>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.expect
index e411b58..7997d18 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,49 +21,19 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY*>* = self::Fisk<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY> = self::Fisk<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Fisk<self::Fisk<dynamic>*>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
+class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>>, self::Fisk<self::Fisk<dynamic>>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.modular.expect
index e411b58..7997d18 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,49 +21,19 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY*>* = self::Fisk<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY> = self::Fisk<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Fisk<self::Fisk<dynamic>*>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
+class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>>, self::Fisk<self::Fisk<dynamic>>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.outline.expect
index 8f5be00..0118f8d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,47 +21,17 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY*>* = self::Fisk<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY> = self::Fisk<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Fisk<self::Fisk<dynamic>*>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
+class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>>, self::Fisk<self::Fisk<dynamic>>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.transformed.expect
index e411b58..7997d18 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,49 +21,19 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY*>* = self::Fisk<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY> = self::Fisk<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Fisk<self::Fisk<dynamic>*>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
+class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>>, self::Fisk<self::Fisk<dynamic>>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart
index a802adc..e2c8f9c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that a cyclic dependence is not reported twice in case the
 // class declarations from the cycle are in different libraries, but have the
 // same name within their respective libraries.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.textual_outline.expect
index 723934f..cd141ca 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import './non_simple_many_libs_same_name_cycle_lib.dart' as lib;
 
 class Hest<TypeX extends lib.Hest> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.textual_outline_modelled.expect
index 723934f..cd141ca 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import './non_simple_many_libs_same_name_cycle_lib.dart' as lib;
 
 class Hest<TypeX extends lib.Hest> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.expect
index 0124e15..9ea9bba 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,42 +18,22 @@
 
 import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
-library non_simple_many_libs_same_name_cycle_lib;
+library non_simple_many_libs_same_name_cycle_lib /*isNonNullableByDefault*/;
 import self as self2;
 import "non_simple_many_libs_same_name_cycle.dart" as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
 
-class Hest<TypeY extends self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self2::Hest<self2::Hest::TypeY*>*
+class Hest<TypeY extends self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self2::Hest<self2::Hest::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.modular.expect
index 0124e15..9ea9bba 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,42 +18,22 @@
 
 import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
-library non_simple_many_libs_same_name_cycle_lib;
+library non_simple_many_libs_same_name_cycle_lib /*isNonNullableByDefault*/;
 import self as self2;
 import "non_simple_many_libs_same_name_cycle.dart" as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
 
-class Hest<TypeY extends self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self2::Hest<self2::Hest::TypeY*>*
+class Hest<TypeY extends self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self2::Hest<self2::Hest::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.outline.expect
index e783ebd..577f5e3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,41 +18,21 @@
 
 import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
 
-library non_simple_many_libs_same_name_cycle_lib;
+library non_simple_many_libs_same_name_cycle_lib /*isNonNullableByDefault*/;
 import self as self2;
 import "non_simple_many_libs_same_name_cycle.dart" as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
 
-class Hest<TypeY extends self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self2::Hest<self2::Hest::TypeY*>*
+class Hest<TypeY extends self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self2::Hest<self2::Hest::TypeY>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.transformed.expect
index 0124e15..9ea9bba 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,42 +18,22 @@
 
 import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
 
-class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
-library non_simple_many_libs_same_name_cycle_lib;
+library non_simple_many_libs_same_name_cycle_lib /*isNonNullableByDefault*/;
 import self as self2;
 import "non_simple_many_libs_same_name_cycle.dart" as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
 
-class Hest<TypeY extends self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self2::Hest<self2::Hest::TypeY*>*
+class Hest<TypeY extends self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self2::Hest<self2::Hest::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart
index c60b253..a716476 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that a cyclic dependence is not reported twice in case the
 // class declarations from the cycle are in different libraries, but have the
 // same name within their respective libraries.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart
index f71e5ca..dbedd5a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that the error message is not duplicated in the case when
 // the same raw generic type with non-simple bounds is used in the bound of a
 // type variable.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.textual_outline.expect
index 0908971..9d9cb28 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Hest<TypeX>> {}
 
 class Fisk<TypeY extends Map<Hest, Hest>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.textual_outline_modelled.expect
index 0c6ea3c..b11d407 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Fisk<TypeY extends Map<Hest, Hest>> {}
 
 class Hest<TypeX extends Hest<TypeX>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.expect
index 28d37ca..67288ba 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,34 +13,14 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Hest<self::Hest<dynamic>*>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>>, self::Hest<self::Hest<dynamic>>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.modular.expect
index 28d37ca..67288ba 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,34 +13,14 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Hest<self::Hest<dynamic>*>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>>, self::Hest<self::Hest<dynamic>>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.outline.expect
index 0ba251f..44aebed 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,33 +13,13 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Hest<self::Hest<dynamic>*>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>>, self::Hest<self::Hest<dynamic>>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.transformed.expect
index 28d37ca..67288ba 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,34 +13,14 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Hest<self::Hest<dynamic>*>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>>, self::Hest<self::Hest<dynamic>>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart
index 0de3b0e..d6b640b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that in the case of an error on a class related to
 // non-simple bounds, the implied errors on other classes that reference the
 // erroneous one in the bounds of their type variables is not reported.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.textual_outline.expect
index dda5df1..98cfbeb 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Hest<TypeX>> {}
 
 class Fisk<TypeY extends Hest> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.textual_outline_modelled.expect
index 5843d4a..568af17 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Fisk<TypeY extends Hest> {}
 
 class Hest<TypeX extends Hest<TypeX>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.expect
index 34ba795..20dc388 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,49 +13,19 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Naebdyr<TypeZ extends self::Fisk<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
+class Naebdyr<TypeZ extends self::Fisk<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.modular.expect
index 34ba795..20dc388 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,49 +13,19 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Naebdyr<TypeZ extends self::Fisk<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
+class Naebdyr<TypeZ extends self::Fisk<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.outline.expect
index 4c03b0d..15ab9c7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,47 +13,17 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Naebdyr<TypeZ extends self::Fisk<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
+class Naebdyr<TypeZ extends self::Fisk<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.transformed.expect
index 34ba795..20dc388 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,49 +13,19 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Naebdyr<TypeZ extends self::Fisk<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
+class Naebdyr<TypeZ extends self::Fisk<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart
index b789886..8dc56a0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that an attempt to use a raw generic type with non-simple
 // bounds is detected and reported as a compile-time error in case the
 // non-simple bound is due to the use of the type variable from the same
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.textual_outline.expect
index 1aa72de..0755cda 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Hest<TypeX extends Hest<TypeX>> {}
 
 class Fisk<TypeY extends Hest> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.textual_outline_modelled.expect
index 340ced2..b1177bb 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Fisk<TypeY extends Hest> {}
 
 class Hest<TypeX extends Hest<TypeX>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.expect
index 5334658..b1b7391 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,34 +13,14 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.modular.expect
index 5334658..b1b7391 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,34 +13,14 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.outline.expect
index 248c6b9..f9c0e34 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,33 +13,13 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.transformed.expect
index 5334658..b1b7391 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,34 +13,14 @@
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends self::Hest<self::Hest::TypeX> = self::Hest<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart
index 67fb1d6..a4e73c8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides `dynamic` as the type
 // argument for those positions in type argument lists of interface types that
 // have the bound omitted in the corresponding type parameter, regardless of
@@ -13,12 +13,12 @@
 
 class A<T> {}
 
-A a;
-DoubleLinkedQueue c;
+A a = throw '';
+DoubleLinkedQueue c = throw '';
 
 class C {
-  A foo() => null;
-  DoubleLinkedQueue baz() => null;
+  A foo() => throw '';
+  DoubleLinkedQueue baz() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.textual_outline.expect
index abd73b5..f48ee52 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.textual_outline.expect
@@ -1,14 +1,13 @@
-// @dart = 2.9
 import 'dart:collection';
 
 class A<T> {}
 
-A a;
-DoubleLinkedQueue c;
+A a = throw '';
+DoubleLinkedQueue c = throw '';
 
 class C {
-  A foo() => null;
-  DoubleLinkedQueue baz() => null;
+  A foo() => throw '';
+  DoubleLinkedQueue baz() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.textual_outline_modelled.expect
index 8d3fdea..c6a5bb0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.textual_outline_modelled.expect
@@ -1,14 +1,13 @@
-// @dart = 2.9
 import 'dart:collection';
 
-A a;
-DoubleLinkedQueue c;
+A a = throw '';
+DoubleLinkedQueue c = throw '';
 
 class A<T> {}
 
 class C {
-  A foo() => null;
-  DoubleLinkedQueue baz() => null;
+  A foo() => throw '';
+  DoubleLinkedQueue baz() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.expect
index 8000a5e..5c25894 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.expect
@@ -1,44 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 import "dart:collection";
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method foo() → self::A<dynamic>*
-    return null;
-  method baz() → col::DoubleLinkedQueue<dynamic>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo() → self::A<dynamic>
+    return throw "";
+  method baz() → col::DoubleLinkedQueue<dynamic>
+    return throw "";
 }
-static field self::A<dynamic>* a;
-static field col::DoubleLinkedQueue<dynamic>* c;
+static field self::A<dynamic> a = throw "";
+static field col::DoubleLinkedQueue<dynamic> c = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.modular.expect
index 8000a5e..5c25894 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.modular.expect
@@ -1,44 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 import "dart:collection";
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method foo() → self::A<dynamic>*
-    return null;
-  method baz() → col::DoubleLinkedQueue<dynamic>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo() → self::A<dynamic>
+    return throw "";
+  method baz() → col::DoubleLinkedQueue<dynamic>
+    return throw "";
 }
-static field self::A<dynamic>* a;
-static field col::DoubleLinkedQueue<dynamic>* c;
+static field self::A<dynamic> a = throw "";
+static field col::DoubleLinkedQueue<dynamic> c = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.outline.expect
index 912e2e3..b013a278 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.outline.expect
@@ -1,43 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 import "dart:collection";
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method foo() → self::A<dynamic>*
+  method foo() → self::A<dynamic>
     ;
-  method baz() → col::DoubleLinkedQueue<dynamic>*
+  method baz() → col::DoubleLinkedQueue<dynamic>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<dynamic>* a;
-static field col::DoubleLinkedQueue<dynamic>* c;
+static field self::A<dynamic> a;
+static field col::DoubleLinkedQueue<dynamic> c;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.transformed.expect
index 8000a5e..5c25894 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.transformed.expect
@@ -1,44 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 import "dart:collection";
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method foo() → self::A<dynamic>*
-    return null;
-  method baz() → col::DoubleLinkedQueue<dynamic>*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo() → self::A<dynamic>
+    return throw "";
+  method baz() → col::DoubleLinkedQueue<dynamic>
+    return throw "";
 }
-static field self::A<dynamic>* a;
-static field col::DoubleLinkedQueue<dynamic>* c;
+static field self::A<dynamic> a = throw "";
+static field col::DoubleLinkedQueue<dynamic> c = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart
index c29f86e..772113a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides type arguments to raw
 // interface types that are themselves used as bounds of type parameters.
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.textual_outline.expect
index 67c7bc5..7391350 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 class B<T extends A> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.textual_outline_modelled.expect
index 67c7bc5..7391350 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {}
 
 class B<T extends A> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.expect
index 97505bc..372d4df 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.expect
@@ -1,35 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A<core::num*>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<core::num>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.modular.expect
index 97505bc..372d4df 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.modular.expect
@@ -1,35 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A<core::num*>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<core::num>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.outline.expect
index 86a3170..075da22 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.outline.expect
@@ -1,34 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A<core::num*>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<core::num>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.transformed.expect
index 97505bc..372d4df 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.transformed.expect
@@ -1,35 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends self::A<core::num*>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends self::A<core::num>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart
index e4578f4..8ecef66 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class A<X extends Comparable<X>> {}
 
 class B<Y extends A<dynamic>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.textual_outline.expect
index 193369a..f965240 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X extends Comparable<X>> {}
 
 class B<Y extends A<dynamic>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.textual_outline_modelled.expect
index 193369a..f965240 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X extends Comparable<X>> {}
 
 class B<Y extends A<dynamic>> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.expect
index 5ec3988..c45502c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.expect
@@ -1,35 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Comparable<self::A::X*>* = core::Comparable<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Comparable<self::A::X> = core::Comparable<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<Y extends self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::Y*>*
+class B<Y extends self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.modular.expect
index 5ec3988..c45502c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.modular.expect
@@ -1,35 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Comparable<self::A::X*>* = core::Comparable<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Comparable<self::A::X> = core::Comparable<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<Y extends self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::Y*>*
+class B<Y extends self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.outline.expect
index c896444..83cf8a8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.outline.expect
@@ -1,34 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Comparable<self::A::X*>* = core::Comparable<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Comparable<self::A::X> = core::Comparable<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<Y extends self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::Y*>*
+class B<Y extends self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.transformed.expect
index 5ec3988..c45502c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.transformed.expect
@@ -1,35 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Comparable<self::A::X*>* = core::Comparable<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Comparable<self::A::X> = core::Comparable<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<Y extends self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::Y*>*
+class B<Y extends self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::B<self::B::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart
index 7b5f653..7365b49 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart
@@ -1,12 +1,12 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound produces correct super-bounded
 // types from raw interface types that refer to F-bounded classes.
 
 class A<T extends A<T>> {}
 
-A a;
+A a = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.textual_outline.expect
index 3155529..199eace 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 class A<T extends A<T>> {}
 
-A a;
+A a = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.textual_outline_modelled.expect
index f602854..1e99726 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
-A a;
+A a = throw '';
 
 class A<T extends A<T>> {}
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.expect
index a0f95a2..cd8f266 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends self::A<self::A::T> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<self::A<dynamic>*>* a;
+static field self::A<self::A<dynamic>> a = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.modular.expect
index a0f95a2..cd8f266 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends self::A<self::A::T> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<self::A<dynamic>*>* a;
+static field self::A<self::A<dynamic>> a = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.outline.expect
index de9197c..86ed93e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends self::A<self::A::T> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<self::A<dynamic>*>* a;
+static field self::A<self::A<dynamic>> a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.transformed.expect
index a0f95a2..cd8f266 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends self::A<self::A::T*>* = self::A<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends self::A<self::A::T> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::A<self::A<dynamic>*>* a;
+static field self::A<self::A<dynamic>> a = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart
index d8629fd..65f0c61 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // The test checks that instantiate to bound is applied to raw generic
 // supertypes.
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.textual_outline.expect
index eb243ac..7ff14a2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 class B {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.textual_outline_modelled.expect
index eb243ac..7ff14a2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 class B {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.expect
index fbb18cb..fa776b2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -6,40 +6,20 @@
 import "package:expect/expect.dart";
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class X<T extends self::B*> extends core::Object {
-  synthetic constructor •() → self::X<self::X::T*>*
+class X<T extends self::B> extends core::Object {
+  synthetic constructor •() → self::X<self::X::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Y extends self::X<self::B*> {
-  synthetic constructor •() → self::Y*
+class Y extends self::X<self::B> {
+  synthetic constructor •() → self::Y
     : super self::X::•()
     ;
 }
 static method main() → void {
-  exp::Expect::isTrue(new self::Y::•() is self::X<self::B*>*);
+  exp::Expect::isTrue(new self::Y::•() is{ForNonNullableByDefault} self::X<self::B>);
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.modular.expect
index fbb18cb..fa776b2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -6,40 +6,20 @@
 import "package:expect/expect.dart";
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class X<T extends self::B*> extends core::Object {
-  synthetic constructor •() → self::X<self::X::T*>*
+class X<T extends self::B> extends core::Object {
+  synthetic constructor •() → self::X<self::X::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Y extends self::X<self::B*> {
-  synthetic constructor •() → self::Y*
+class Y extends self::X<self::B> {
+  synthetic constructor •() → self::Y
     : super self::X::•()
     ;
 }
 static method main() → void {
-  exp::Expect::isTrue(new self::Y::•() is self::X<self::B*>*);
+  exp::Expect::isTrue(new self::Y::•() is{ForNonNullableByDefault} self::X<self::B>);
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.outline.expect
index 43c0107..1491aca 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.outline.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "package:expect/expect.dart";
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class X<T extends self::B*> extends core::Object {
-  synthetic constructor •() → self::X<self::X::T*>*
+class X<T extends self::B> extends core::Object {
+  synthetic constructor •() → self::X<self::X::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Y extends self::X<self::B*> {
-  synthetic constructor •() → self::Y*
+class Y extends self::X<self::B> {
+  synthetic constructor •() → self::Y
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.transformed.expect
index fbb18cb..fa776b2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -6,40 +6,20 @@
 import "package:expect/expect.dart";
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class X<T extends self::B*> extends core::Object {
-  synthetic constructor •() → self::X<self::X::T*>*
+class X<T extends self::B> extends core::Object {
+  synthetic constructor •() → self::X<self::X::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Y extends self::X<self::B*> {
-  synthetic constructor •() → self::Y*
+class Y extends self::X<self::B> {
+  synthetic constructor •() → self::Y
     : super self::X::•()
     ;
 }
 static method main() → void {
-  exp::Expect::isTrue(new self::Y::•() is self::X<self::B*>*);
+  exp::Expect::isTrue(new self::Y::•() is{ForNonNullableByDefault} self::X<self::B>);
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart
index 30e8110..f5a8af0 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides type arguments to raw
 // typedef types that are used in the module outline.
 
 typedef A<T extends num>(T p);
 
 class B {
-  foo(A a) => null;
-  A bar() => null;
+  foo(A a) => throw '';
+  A bar() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.textual_outline.expect
index a122c88..0387482 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 typedef A<T extends num>(T p);
 
 class B {
-  foo(A a) => null;
-  A bar() => null;
+  foo(A a) => throw '';
+  A bar() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.textual_outline_modelled.expect
index 58e1b8b..6f00e78 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 class B {
-  A bar() => null;
-  foo(A a) => null;
+  A bar() => throw '';
+  foo(A a) => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.expect
index 1e4c90a..eabb487 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method foo((core::num*) →* dynamic a) → dynamic
-    return null;
-  method bar() → (core::num*) →* dynamic
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo((core::num) → dynamic a) → dynamic
+    return throw "";
+  method bar() → (core::num) → dynamic
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.modular.expect
index 1e4c90a..eabb487 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method foo((core::num*) →* dynamic a) → dynamic
-    return null;
-  method bar() → (core::num*) →* dynamic
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo((core::num) → dynamic a) → dynamic
+    return throw "";
+  method bar() → (core::num) → dynamic
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.outline.expect
index bd8b1e2..36752cd 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method foo((core::num*) →* dynamic a) → dynamic
+  method foo((core::num) → dynamic a) → dynamic
     ;
-  method bar() → (core::num*) →* dynamic
+  method bar() → (core::num) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.transformed.expect
index 1e4c90a..eabb487 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method foo((core::num*) →* dynamic a) → dynamic
-    return null;
-  method bar() → (core::num*) →* dynamic
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo((core::num) → dynamic a) → dynamic
+    return throw "";
+  method bar() → (core::num) → dynamic
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart
index 957d840..fb2e07e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides type arguments to raw
 // typedef types that are themselves used as type arguments of literal lists.
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.textual_outline.expect
index 045ad8b..62a0a7e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef A<T extends num>(T p);
 var a = <A>[];
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.textual_outline_modelled.expect
index 780921f..f07241b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 typedef A<T extends num>(T p);
 var a = <A>[];
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.expect
index 954f38c..b54b5a7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
-static field core::List<(core::num*) →* dynamic>* a = <(core::num*) →* dynamic>[];
+typedef A<contravariant T extends core::num> = (T) → dynamic;
+static field core::List<(core::num) → dynamic> a = <(core::num) → dynamic>[];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.modular.expect
index 954f38c..b54b5a7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.modular.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
-static field core::List<(core::num*) →* dynamic>* a = <(core::num*) →* dynamic>[];
+typedef A<contravariant T extends core::num> = (T) → dynamic;
+static field core::List<(core::num) → dynamic> a = <(core::num) → dynamic>[];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.outline.expect
index 88f9288..27f2aa3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
-static field core::List<(core::num*) →* dynamic>* a;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
+static field core::List<(core::num) → dynamic> a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.transformed.expect
index bf9f10e..3f49e03 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.transformed.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
-static field core::List<(core::num*) →* dynamic>* a = core::_GrowableList::•<(core::num*) →* dynamic>(0);
+typedef A<contravariant T extends core::num> = (T) → dynamic;
+static field core::List<(core::num) → dynamic> a = core::_GrowableList::•<(core::num) → dynamic>(0);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart
index bcdc91c..222f8ed 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound leaves typedef types that have
 // their arguments defined by the programmer intact in cases when those typedef
 // types are used as type arguments of literal lists.
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.textual_outline.expect
index 551f25c..9b7bab7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef A<T>(T p);
 
 class B<S> {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.textual_outline_modelled.expect
index 15a4e52..86ca2d6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<S> {
   final List<A<S>> foo = <A<S>>[];
   final List<A<num>> bar = <A<num>>[];
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.expect
index 8f09136..21b79d3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-class B<S extends core::Object* = dynamic> extends core::Object {
-  final field core::List<(self::B::S*) →* dynamic>* foo = <(self::B::S*) →* dynamic>[];
-  final field core::List<(core::num*) →* dynamic>* bar = <(core::num*) →* dynamic>[];
-  synthetic constructor •() → self::B<self::B::S*>*
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+class B<S extends core::Object? = dynamic> extends core::Object {
+  final field core::List<(self::B::S%) → dynamic> foo = <(self::B::S%) → dynamic>[];
+  final field core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
+  synthetic constructor •() → self::B<self::B::S%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.modular.expect
index 8f09136..21b79d3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-class B<S extends core::Object* = dynamic> extends core::Object {
-  final field core::List<(self::B::S*) →* dynamic>* foo = <(self::B::S*) →* dynamic>[];
-  final field core::List<(core::num*) →* dynamic>* bar = <(core::num*) →* dynamic>[];
-  synthetic constructor •() → self::B<self::B::S*>*
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+class B<S extends core::Object? = dynamic> extends core::Object {
+  final field core::List<(self::B::S%) → dynamic> foo = <(self::B::S%) → dynamic>[];
+  final field core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
+  synthetic constructor •() → self::B<self::B::S%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.outline.expect
index 03cb8ec..2418740 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-class B<S extends core::Object* = dynamic> extends core::Object {
-  final field core::List<(self::B::S*) →* dynamic>* foo;
-  final field core::List<(core::num*) →* dynamic>* bar;
-  synthetic constructor •() → self::B<self::B::S*>*
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+class B<S extends core::Object? = dynamic> extends core::Object {
+  final field core::List<(self::B::S%) → dynamic> foo;
+  final field core::List<(core::num) → dynamic> bar;
+  synthetic constructor •() → self::B<self::B::S%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.transformed.expect
index db93d8e..9c7bed4 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-class B<S extends core::Object* = dynamic> extends core::Object {
-  final field core::List<(self::B::S*) →* dynamic>* foo = core::_GrowableList::•<(self::B::S*) →* dynamic>(0);
-  final field core::List<(core::num*) →* dynamic>* bar = core::_GrowableList::•<(core::num*) →* dynamic>(0);
-  synthetic constructor •() → self::B<self::B::S*>*
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+class B<S extends core::Object? = dynamic> extends core::Object {
+  final field core::List<(self::B::S%) → dynamic> foo = core::_GrowableList::•<(self::B::S%) → dynamic>(0);
+  final field core::List<(core::num) → dynamic> bar = core::_GrowableList::•<(core::num) → dynamic>(0);
+  synthetic constructor •() → self::B<self::B::S%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart
index b6016b3..f49c235 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides type arguments to raw
 // typedef types that are themselves used as type arguments of literal maps.
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.textual_outline.expect
index 43ea88c..8924ab9 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef A<T extends num>(T p);
 var a = <A, A>{};
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.textual_outline_modelled.expect
index cebe024..b88eb51 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 typedef A<T extends num>(T p);
 var a = <A, A>{};
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.expect
index 0914a2c..910a982 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
-static field core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a = <(core::num*) →* dynamic, (core::num*) →* dynamic>{};
+typedef A<contravariant T extends core::num> = (T) → dynamic;
+static field core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.modular.expect
index 0914a2c..910a982 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.modular.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
-static field core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a = <(core::num*) →* dynamic, (core::num*) →* dynamic>{};
+typedef A<contravariant T extends core::num> = (T) → dynamic;
+static field core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.outline.expect
index 9f56108..1cc4a7b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
-static field core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a;
+typedef A<contravariant T extends core::num> = (T) → dynamic;
+static field core::Map<(core::num) → dynamic, (core::num) → dynamic> a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.transformed.expect
index 0914a2c..910a982 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.transformed.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
-static field core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a = <(core::num*) →* dynamic, (core::num*) →* dynamic>{};
+typedef A<contravariant T extends core::num> = (T) → dynamic;
+static field core::Map<(core::num) → dynamic, (core::num) → dynamic> a = <(core::num) → dynamic, (core::num) → dynamic>{};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart
index 691e4ad..db92c8d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart
@@ -1,17 +1,17 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides `dynamic` as the type
 // argument for those positions in type argument lists of typedef types that
 // have the bound omitted in the corresponding type parameter.
 
 typedef A<T>(T p);
 
-A a;
+A a = throw '';
 
 class C {
-  A foo() => null;
+  A foo() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.textual_outline.expect
index 3913f88..4b7c7c1 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 typedef A<T>(T p);
-A a;
+A a = throw '';
 
 class C {
-  A foo() => null;
+  A foo() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.textual_outline_modelled.expect
index 154d206..1ae8c7b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
-A a;
+A a = throw '';
 
 class C {
-  A foo() => null;
+  A foo() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.expect
index 900d197..29e6bb6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method foo() → (dynamic) →* dynamic
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo() → (dynamic) → dynamic
+    return throw "";
 }
-static field (dynamic) →* dynamic a;
+static field (dynamic) → dynamic a = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.modular.expect
index 900d197..29e6bb6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.modular.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method foo() → (dynamic) →* dynamic
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo() → (dynamic) → dynamic
+    return throw "";
 }
-static field (dynamic) →* dynamic a;
+static field (dynamic) → dynamic a = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.outline.expect
index a33ccb5..c81585e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method foo() → (dynamic) →* dynamic
+  method foo() → (dynamic) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field (dynamic) →* dynamic a;
+static field (dynamic) → dynamic a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.transformed.expect
index 900d197..29e6bb6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.transformed.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method foo() → (dynamic) →* dynamic
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo() → (dynamic) → dynamic
+    return throw "";
 }
-static field (dynamic) →* dynamic a;
+static field (dynamic) → dynamic a = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart
index 141ef41..9b32686 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound provides type arguments to raw
 // typedef types that are themselves used as bounds of type parameters.
 
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.textual_outline.expect
index 9653282..f90dddc 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef A<T extends num>(T p);
 
 class B<T extends A> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.textual_outline_modelled.expect
index 304fdf3..fb74707 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B<T extends A> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.expect
index f32d1b22..dd0bdac 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
-class B<T extends (core::num*) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef A<contravariant T extends core::num> = (T) → dynamic;
+class B<T extends (core::num) → dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.modular.expect
index f32d1b22..dd0bdac 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
-class B<T extends (core::num*) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef A<contravariant T extends core::num> = (T) → dynamic;
+class B<T extends (core::num) → dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.outline.expect
index 8f890d3..fa14b1b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
-class B<T extends (core::num*) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef A<contravariant T extends core::num> = (T) → dynamic;
+class B<T extends (core::num) → dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.transformed.expect
index f32d1b22..dd0bdac 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
-class B<T extends (core::num*) →* dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef A<contravariant T extends core::num> = (T) → dynamic;
+class B<T extends (core::num) → dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart
index b195ba2..2147afe 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 // This test checks that instantiate to bound produces correct super-bounded
 // types from raw typedef types that refer to F-bounded typedefs.
 
@@ -9,6 +9,6 @@
 
 typedef B<S extends A<S>>(S p);
 
-B b;
+B b = throw '';
 
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.textual_outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.textual_outline.expect
index 7ca164d..d15bb21 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 typedef A<T>(T p);
 typedef B<S extends A<S>>(S p);
-B b;
+B b = throw '';
 main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.textual_outline_modelled.expect
index 4c6a47a..7eee4b43 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
-B b;
+B b = throw '';
 main() {}
 typedef A<T>(T p);
 typedef B<S extends A<S>>(S p);
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.expect
index 4280623..b139a88 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-typedef B<contravariant S extends (S*) →* dynamic = (dynamic) →* dynamic> = (S*) →* dynamic;
-static field ((dynamic) →* dynamic) →* dynamic b;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+typedef B<contravariant S extends (S) → dynamic = (dynamic) → dynamic> = (S) → dynamic;
+static field ((dynamic) → dynamic) → dynamic b = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.modular.expect
index 4280623..b139a88 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-typedef B<contravariant S extends (S*) →* dynamic = (dynamic) →* dynamic> = (S*) →* dynamic;
-static field ((dynamic) →* dynamic) →* dynamic b;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+typedef B<contravariant S extends (S) → dynamic = (dynamic) → dynamic> = (S) → dynamic;
+static field ((dynamic) → dynamic) → dynamic b = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.outline.expect
index 32182bf..0340a16 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-typedef B<contravariant S extends (S*) →* dynamic = (dynamic) →* dynamic> = (S*) →* dynamic;
-static field ((dynamic) →* dynamic) →* dynamic b;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+typedef B<contravariant S extends (S) → dynamic = (dynamic) → dynamic> = (S) → dynamic;
+static field ((dynamic) → dynamic) → dynamic b;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.transformed.expect
index 4280623..b139a88 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-typedef B<contravariant S extends (S*) →* dynamic = (dynamic) →* dynamic> = (S*) →* dynamic;
-static field ((dynamic) →* dynamic) →* dynamic b;
+typedef A<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+typedef B<contravariant S extends (S) → dynamic = (dynamic) → dynamic> = (S) → dynamic;
+static field ((dynamic) → dynamic) → dynamic b = throw "";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/modular.status b/pkg/front_end/testcases/modular.status
index 7fa67cd..a1b7a94 100644
--- a/pkg/front_end/testcases/modular.status
+++ b/pkg/front_end/testcases/modular.status
@@ -56,6 +56,7 @@
 inference/generic_methods_handle_override_of_non_generic_with_generic: TypeCheckError
 inference/infer_method_missing_params: TypeCheckError
 inference/infer_types_on_generic_instantiations_infer: TypeCheckError
+inference/instantiate_tearoff_of_call2: TypeCheckError
 inference/mixin_inference_outwards_3: TypeCheckError
 inference/mixin_inference_outwards_4: TypeCheckError
 inference/mixin_inference_unification_1: TypeCheckError
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index b9079b7..c38ad6c 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -108,8 +108,6 @@
 general/type_parameters_on_void: FormatterCrash
 general/type_variable_in_static_context: FormatterCrash
 general/var_as_type_name: FormatterCrash
-inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1: FormatterCrash
-inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: FormatterCrash
 late_lowering/later: FormatterCrash
 macros/augment_class: FormatterCrash
 macros/augment_concrete: FormatterCrash
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 82204c5..f65a46a 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -178,8 +178,6 @@
 inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer: TypeCheckError
 inference/downwards_inference_for_each: RuntimeError # Issue #36382
 inference/downwards_inference_on_list_literals_infer_downwards: RuntimeError
-inference/future_then_upwards: RuntimeError
-inference/future_then_upwards_2: RuntimeError
 inference/generic_methods_correctly_recognize_generic_upper_bound: TypeCheckError
 inference/generic_methods_do_not_infer_invalid_override_of_generic_method: TypeCheckError
 inference/generic_methods_handle_override_of_non_generic_with_generic: TypeCheckError
@@ -187,7 +185,7 @@
 inference/infer_type_regardless_of_declaration_order_or_cycles: RuntimeError
 inference/infer_types_on_generic_instantiations_4: RuntimeError
 inference/infer_types_on_generic_instantiations_infer: TypeCheckError
-inference/instantiate_to_bounds_generic_has_bound_defined_after transform: RuntimeError
+inference/instantiate_tearoff_of_call2: TypeCheckError
 inference/mixin_inference_outwards_3: TypeCheckError
 inference/mixin_inference_outwards_4: TypeCheckError
 inference/mixin_inference_unification_1: TypeCheckError
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index 435e80e..793a556 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -323,6 +323,7 @@
         "testcases/inference/for_in_loop_promotion\\.dart$",
         "testcases/inference/future_union_upwards_generic_methods\\.dart$",
         "testcases/inference/generic_methods_infer_generic_instantiation\\.dart$",
+        "testcases/inference/generic_methods_infer_generic_instantiation2\\.dart$",
         "testcases/inference/overloaded_int_operators\\.dart$",
         "testcases/instantiate_to_bound/non_simple_many\\.dart$",
         "testcases/instantiate_to_bound/non_simple_suppress_consequence\\.dart$",
diff --git a/pkg/vm/lib/transformations/ffi/common.dart b/pkg/vm/lib/transformations/ffi/common.dart
index c99635a..a34a828 100644
--- a/pkg/vm/lib/transformations/ffi/common.dart
+++ b/pkg/vm/lib/transformations/ffi/common.dart
@@ -7,6 +7,12 @@
 
 library vm.transformations.ffi;
 
+import 'package:front_end/src/api_unstable/vm.dart'
+    show
+        messageFfiLeafCallMustNotReturnHandle,
+        messageFfiLeafCallMustNotTakeHandle,
+        templateFfiTypeInvalid,
+        templateFfiTypeMismatch;
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
 import 'package:kernel/core_types.dart';
@@ -981,6 +987,180 @@
       ]),
     )..fileOffset = fileOffset;
   }
+
+  /// Prevents the struct from being tree-shaken in TFA by invoking its
+  /// constructor in a `_nativeEffect` expression.
+  Expression invokeCompoundConstructor(
+      Expression nestedExpression, Class compoundClass) {
+    final constructor = compoundClass.constructors
+        .firstWhere((c) => c.name == Name("#fromTypedDataBase"));
+    return BlockExpression(
+        Block([
+          ExpressionStatement(StaticInvocation(
+              nativeEffectMethod,
+              Arguments([
+                ConstructorInvocation(
+                    constructor,
+                    Arguments([
+                      StaticInvocation(
+                          uint8ListFactory,
+                          Arguments([
+                            ConstantExpression(IntConstant(1)),
+                          ]))
+                        ..fileOffset = nestedExpression.fileOffset,
+                    ]))
+                  ..fileOffset = nestedExpression.fileOffset
+              ])))
+        ]),
+        nestedExpression)
+      ..fileOffset = nestedExpression.fileOffset;
+  }
+
+  /// Creates an invocation to asFunctionInternal.
+  ///
+  /// Adds a native effect invoking a compound constructors if this is used
+  /// as return type.
+  Expression buildAsFunctionInternal({
+    required Expression functionPointer,
+    required DartType nativeSignature,
+    required DartType dartSignature,
+    required bool isLeaf,
+    required int fileOffset,
+  }) {
+    final asFunctionInternalInvocation = StaticInvocation(
+        asFunctionInternal,
+        Arguments([
+          functionPointer,
+          BoolLiteral(isLeaf),
+        ], types: [
+          dartSignature,
+          nativeSignature,
+        ]))
+      ..fileOffset = fileOffset;
+
+    if (dartSignature is FunctionType) {
+      final returnType = dartSignature.returnType;
+      if (returnType is InterfaceType) {
+        final clazz = returnType.classNode;
+        if (clazz.superclass == structClass || clazz.superclass == unionClass) {
+          return invokeCompoundConstructor(asFunctionInternalInvocation, clazz);
+        }
+      }
+    }
+
+    return asFunctionInternalInvocation;
+  }
+
+  /// Returns
+  /// - `true` if leaf
+  /// - `false` if not leaf
+  /// - `null` if the expression is not valid (e.g. non-const bool, null)
+  bool? getIsLeafBoolean(StaticInvocation node) {
+    for (final named in node.arguments.named) {
+      if (named.name == 'isLeaf') {
+        final expr = named.value;
+        if (expr is BoolLiteral) {
+          return expr.value;
+        } else if (expr is ConstantExpression) {
+          final constant = expr.constant;
+          if (constant is BoolConstant) {
+            return constant.value;
+          }
+        }
+        // isLeaf is passed some invalid value.
+        return null;
+      }
+    }
+    // isLeaf defaults to false.
+    return false;
+  }
+
+  void ensureLeafCallDoesNotUseHandles(
+      InterfaceType nativeType, bool isLeaf, TreeNode reportErrorOn) {
+    // Handles are only disallowed for leaf calls.
+    if (isLeaf == false) {
+      return;
+    }
+
+    bool error = false;
+
+    // Check if return type is Handle.
+    final functionType = nativeType.typeArguments[0];
+    if (functionType is FunctionType) {
+      final returnType = functionType.returnType;
+      if (returnType is InterfaceType) {
+        if (returnType.classNode == handleClass) {
+          diagnosticReporter.report(messageFfiLeafCallMustNotReturnHandle,
+              reportErrorOn.fileOffset, 1, reportErrorOn.location?.file);
+          error = true;
+        }
+      }
+      // Check if any of the argument types are Handle.
+      for (DartType param in functionType.positionalParameters) {
+        if ((param as InterfaceType).classNode == handleClass) {
+          diagnosticReporter.report(messageFfiLeafCallMustNotTakeHandle,
+              reportErrorOn.fileOffset, 1, reportErrorOn.location?.file);
+          error = true;
+        }
+      }
+    }
+
+    if (error) {
+      throw FfiStaticTypeError();
+    }
+  }
+
+  void ensureNativeTypeToDartType(
+      DartType nativeType, DartType dartType, TreeNode reportErrorOn,
+      {bool allowHandle: false}) {
+    final DartType correspondingDartType = convertNativeTypeToDartType(
+        nativeType,
+        allowCompounds: true,
+        allowHandle: allowHandle)!;
+    if (dartType == correspondingDartType) return;
+    if (env.isSubtypeOf(correspondingDartType, dartType,
+        SubtypeCheckMode.ignoringNullabilities)) {
+      return;
+    }
+    diagnosticReporter.report(
+        templateFfiTypeMismatch.withArguments(dartType, correspondingDartType,
+            nativeType, currentLibrary.isNonNullableByDefault),
+        reportErrorOn.fileOffset,
+        1,
+        reportErrorOn.location?.file);
+    throw FfiStaticTypeError();
+  }
+
+  void ensureNativeTypeValid(DartType nativeType, TreeNode reportErrorOn,
+      {bool allowHandle: false,
+      bool allowCompounds: false,
+      bool allowInlineArray = false}) {
+    if (!_nativeTypeValid(nativeType,
+        allowCompounds: allowCompounds,
+        allowHandle: allowHandle,
+        allowInlineArray: allowInlineArray)) {
+      diagnosticReporter.report(
+          templateFfiTypeInvalid.withArguments(
+              nativeType, currentLibrary.isNonNullableByDefault),
+          reportErrorOn.fileOffset,
+          1,
+          reportErrorOn.location?.file);
+      throw FfiStaticTypeError();
+    }
+  }
+
+  /// The Dart type system does not enforce that NativeFunction return and
+  /// parameter types are only NativeTypes, so we need to check this.
+  bool _nativeTypeValid(DartType nativeType,
+      {bool allowCompounds: false,
+      bool allowHandle = false,
+      bool allowInlineArray = false}) {
+    return convertNativeTypeToDartType(nativeType,
+            allowCompounds: allowCompounds,
+            allowHandle: allowHandle,
+            allowInlineArray: allowInlineArray) !=
+        null;
+  }
 }
 
 /// Returns all libraries including the ones from component except for platform
@@ -1044,3 +1224,7 @@
   bool get isPartial =>
       [for (final abi in Abi.values) this[abi]].contains(null);
 }
+
+/// Used internally for abnormal control flow to prevent cascading error
+/// messages.
+class FfiStaticTypeError implements Exception {}
diff --git a/pkg/vm/lib/transformations/ffi/native.dart b/pkg/vm/lib/transformations/ffi/native.dart
index bc63d3a..feaa323 100644
--- a/pkg/vm/lib/transformations/ffi/native.dart
+++ b/pkg/vm/lib/transformations/ffi/native.dart
@@ -19,7 +19,7 @@
 import 'package:kernel/target/targets.dart' show DiagnosticReporter;
 import 'package:kernel/type_environment.dart';
 
-import 'common.dart' show FfiTransformer;
+import 'common.dart' show FfiStaticTypeError, FfiTransformer;
 
 /// Transform @FfiNative annotated functions into FFI native function pointer
 /// functions.
@@ -186,19 +186,13 @@
         ]))
       ..fileOffset = fileOffset;
 
-    // NativeFunctionPointer.asFunction
-    //     <Double Function(Double), double Function(double)>(..., isLeaf:true)
-    final asFunctionInvocation = StaticInvocation(
-        asFunctionMethod,
-        Arguments(<Expression>[
-          fromAddressInvocation
-        ], types: <DartType>[
-          ffiFunctionType,
-          dartFunctionType
-        ], named: <NamedExpression>[
-          NamedExpression('isLeaf', BoolLiteral(isLeaf))
-        ]))
-      ..fileOffset = fileOffset;
+    final asFunctionInvocation = buildAsFunctionInternal(
+      functionPointer: fromAddressInvocation,
+      dartSignature: dartFunctionType,
+      nativeSignature: ffiFunctionType,
+      isLeaf: isLeaf,
+      fileOffset: fileOffset,
+    );
 
     // static final _doXyz$FfiNative$Ptr = ...
     final fieldName =
@@ -413,6 +407,19 @@
     final wrappedDartFunctionType =
         _wrapFunctionType(dartFunctionType, ffiFunctionType);
 
+    final nativeType = InterfaceType(
+        nativeFunctionClass, Nullability.legacy, [ffiFunctionType]);
+    try {
+      ensureNativeTypeValid(nativeType, node);
+      ensureNativeTypeToDartType(nativeType, wrappedDartFunctionType, node);
+      ensureLeafCallDoesNotUseHandles(nativeType, isLeaf, node);
+    } on FfiStaticTypeError {
+      // It's OK to swallow the exception because the diagnostics issued will
+      // cause compilation to fail. By continuing, we can report more
+      // diagnostics before compilation ends.
+      return node;
+    }
+
     final parent = node.parent;
 
     var fileUri = currentLibrary.fileUri;
diff --git a/pkg/vm/lib/transformations/ffi/use_sites.dart b/pkg/vm/lib/transformations/ffi/use_sites.dart
index 725db11..f95320e 100644
--- a/pkg/vm/lib/transformations/ffi/use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi/use_sites.dart
@@ -6,16 +6,12 @@
     show
         messageFfiExceptionalReturnNull,
         messageFfiExpectedConstant,
-        messageFfiLeafCallMustNotReturnHandle,
-        messageFfiLeafCallMustNotTakeHandle,
         templateFfiDartTypeMismatch,
         templateFfiExpectedConstantArg,
         templateFfiExpectedExceptionalReturn,
         templateFfiExpectedNoExceptionalReturn,
         templateFfiExtendsOrImplementsSealedClass,
-        templateFfiNotStatic,
-        templateFfiTypeInvalid,
-        templateFfiTypeMismatch;
+        templateFfiNotStatic;
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
@@ -30,7 +26,13 @@
 import 'abi.dart' show wordSize;
 import 'native_type_cfe.dart';
 import 'common.dart'
-    show NativeType, FfiTransformer, nativeTypeSizes, WORD_SIZE, UNKNOWN;
+    show
+        FfiStaticTypeError,
+        FfiTransformer,
+        NativeType,
+        nativeTypeSizes,
+        UNKNOWN,
+        WORD_SIZE;
 import 'finalizable.dart';
 
 /// Checks and replaces calls to dart:ffi compound fields and methods.
@@ -106,7 +108,7 @@
     try {
       _ensureNotExtendsOrImplementsSealedClass(node);
       return super.visitClass(node);
-    } on _FfiStaticTypeError {
+    } on FfiStaticTypeError {
       // It's OK to swallow the exception because the diagnostics issued will
       // cause compilation to fail. By continuing, we can report more
       // diagnostics before compilation ends.
@@ -154,7 +156,7 @@
         final pointer = node.arguments.positional[0];
         final pointerType =
             pointer.getStaticType(staticTypeContext!) as InterfaceType;
-        _ensureNativeTypeValid(pointerType, pointer,
+        ensureNativeTypeValid(pointerType, pointer,
             allowCompounds: true, allowInlineArray: true);
 
         final typeArg = pointerType.typeArguments.single;
@@ -187,7 +189,7 @@
           target == unionPointerGetElemAt) {
         final DartType nativeType = node.arguments.types[0];
 
-        _ensureNativeTypeValid(nativeType, node, allowCompounds: true);
+        ensureNativeTypeValid(nativeType, node, allowCompounds: true);
 
         return _replaceGetRef(node);
       } else if (target == structPointerSetRef ||
@@ -196,33 +198,33 @@
           target == unionPointerSetElemAt) {
         final DartType nativeType = node.arguments.types[0];
 
-        _ensureNativeTypeValid(nativeType, node, allowCompounds: true);
+        ensureNativeTypeValid(nativeType, node, allowCompounds: true);
 
         return _replaceSetRef(node);
       } else if (target == structArrayElemAt || target == unionArrayElemAt) {
         final DartType nativeType = node.arguments.types[0];
 
-        _ensureNativeTypeValid(nativeType, node, allowCompounds: true);
+        ensureNativeTypeValid(nativeType, node, allowCompounds: true);
 
         return _replaceRefArray(node);
       } else if (target == arrayArrayElemAt) {
         final DartType nativeType = node.arguments.types[0];
 
-        _ensureNativeTypeValid(nativeType, node,
+        ensureNativeTypeValid(nativeType, node,
             allowInlineArray: true, allowCompounds: true);
 
         return _replaceArrayArrayElemAt(node);
       } else if (target == arrayArrayAssignAt) {
         final DartType nativeType = node.arguments.types[0];
 
-        _ensureNativeTypeValid(nativeType, node,
+        ensureNativeTypeValid(nativeType, node,
             allowInlineArray: true, allowCompounds: true);
 
         return _replaceArrayArrayElemAt(node, setter: true);
       } else if (target == sizeOfMethod) {
         final DartType nativeType = node.arguments.types[0];
 
-        _ensureNativeTypeValid(nativeType, node, allowCompounds: true);
+        ensureNativeTypeValid(nativeType, node, allowCompounds: true);
 
         if (nativeType is InterfaceType) {
           Expression? inlineSizeOf = _inlineSizeOf(nativeType);
@@ -235,58 +237,34 @@
             nativeFunctionClass, Nullability.legacy, [node.arguments.types[0]]);
         final DartType dartType = node.arguments.types[1];
 
-        _ensureNativeTypeValid(nativeType, node);
-        _ensureNativeTypeToDartType(nativeType, dartType, node);
+        ensureNativeTypeValid(nativeType, node);
+        ensureNativeTypeToDartType(nativeType, dartType, node);
         _ensureIsLeafIsConst(node);
-        _ensureLeafCallDoesNotUseHandles(nativeType, node);
+        final isLeaf = getIsLeafBoolean(node) ?? false;
+        ensureLeafCallDoesNotUseHandles(nativeType, isLeaf, node);
 
-        final replacement = _replaceLookupFunction(node);
-
-        if (dartType is FunctionType) {
-          final returnType = dartType.returnType;
-          if (returnType is InterfaceType) {
-            final clazz = returnType.classNode;
-            if (clazz.superclass == structClass ||
-                clazz.superclass == unionClass) {
-              return _invokeCompoundConstructor(replacement, clazz);
-            }
-          }
-        }
-        return replacement;
+        return _replaceLookupFunction(node);
       } else if (target == asFunctionMethod) {
         final dartType = node.arguments.types[1];
         final InterfaceType nativeType = InterfaceType(
             nativeFunctionClass, Nullability.legacy, [node.arguments.types[0]]);
 
-        _ensureNativeTypeValid(nativeType, node);
-        _ensureNativeTypeToDartType(nativeType, dartType, node);
+        ensureNativeTypeValid(nativeType, node);
+        ensureNativeTypeToDartType(nativeType, dartType, node);
         _ensureIsLeafIsConst(node);
-        _ensureLeafCallDoesNotUseHandles(nativeType, node);
+
+        final isLeaf = getIsLeafBoolean(node) ?? false;
+        ensureLeafCallDoesNotUseHandles(nativeType, isLeaf, node);
 
         final DartType nativeSignature = nativeType.typeArguments[0];
 
-        bool? isLeaf = _getIsLeafBoolean(node);
-        if (isLeaf == null) {
-          isLeaf = false;
-        }
-
-        // Inline function body to make all type arguments instantiated.
-        final replacement = StaticInvocation(
-            asFunctionInternal,
-            Arguments([node.arguments.positional[0], BoolLiteral(isLeaf)],
-                types: [dartType, nativeSignature]));
-
-        if (dartType is FunctionType) {
-          final returnType = dartType.returnType;
-          if (returnType is InterfaceType) {
-            final clazz = returnType.classNode;
-            if (clazz.superclass == structClass ||
-                clazz.superclass == unionClass) {
-              return _invokeCompoundConstructor(replacement, clazz);
-            }
-          }
-        }
-        return replacement;
+        return buildAsFunctionInternal(
+          functionPointer: node.arguments.positional[0],
+          nativeSignature: nativeSignature,
+          dartSignature: dartType,
+          isLeaf: isLeaf,
+          fileOffset: node.fileOffset,
+        );
       } else if (target == fromFunctionMethod) {
         final DartType nativeType = InterfaceType(
             nativeFunctionClass, Nullability.legacy, [node.arguments.types[0]]);
@@ -295,8 +273,8 @@
 
         _ensureIsStaticFunction(func);
 
-        _ensureNativeTypeValid(nativeType, node);
-        _ensureNativeTypeToDartType(nativeType, dartType, node);
+        ensureNativeTypeValid(nativeType, node);
+        ensureNativeTypeToDartType(nativeType, dartType, node);
 
         final funcType = dartType as FunctionType;
 
@@ -383,7 +361,7 @@
       } else if (target == allocateMethod) {
         final DartType nativeType = node.arguments.types[0];
 
-        _ensureNativeTypeValid(nativeType, node, allowCompounds: true);
+        ensureNativeTypeValid(nativeType, node, allowCompounds: true);
 
         // Inline the body to get rid of a generic invocation of sizeOf.
         // TODO(http://dartbug.com/39964): Add `alignmentOf<T>()` call.
@@ -406,7 +384,7 @@
                       .withoutTypeParameters) as FunctionType);
         }
       }
-    } on _FfiStaticTypeError {
+    } on FfiStaticTypeError {
       // It's OK to swallow the exception because the diagnostics issued will
       // cause compilation to fail. By continuing, we can report more
       // diagnostics before compilation ends.
@@ -415,39 +393,11 @@
     return node;
   }
 
-  /// Prevents the struct from being tree-shaken in TFA by invoking its
-  /// constructor in a `_nativeEffect` expression.
-  Expression _invokeCompoundConstructor(
-      Expression nestedExpression, Class compoundClass) {
-    final constructor = compoundClass.constructors
-        .firstWhere((c) => c.name == Name("#fromTypedDataBase"));
-    return BlockExpression(
-        Block([
-          ExpressionStatement(StaticInvocation(
-              nativeEffectMethod,
-              Arguments([
-                ConstructorInvocation(
-                    constructor,
-                    Arguments([
-                      StaticInvocation(
-                          uint8ListFactory,
-                          Arguments([
-                            ConstantExpression(IntConstant(1)),
-                          ]))
-                        ..fileOffset = nestedExpression.fileOffset,
-                    ]))
-                  ..fileOffset = nestedExpression.fileOffset
-              ])))
-        ]),
-        nestedExpression)
-      ..fileOffset = nestedExpression.fileOffset;
-  }
-
   Expression _invokeCompoundConstructors(
           Expression nestedExpression, List<Class> compoundClasses) =>
       compoundClasses
           .distinct()
-          .fold(nestedExpression, _invokeCompoundConstructor);
+          .fold(nestedExpression, invokeCompoundConstructor);
 
   Expression? _inlineSizeOf(InterfaceType nativeType) {
     final Class nativeClass = nativeType.classNode;
@@ -503,15 +453,15 @@
                 .substituteType(lookupFunctionType.withoutTypeParameters)
             as FunctionType);
 
-    bool? isLeaf = _getIsLeafBoolean(node);
-    if (isLeaf == null) {
-      isLeaf = false;
-    }
+    final isLeaf = getIsLeafBoolean(node) ?? false;
 
-    return StaticInvocation(
-        asFunctionInternal,
-        Arguments([lookupResult, BoolLiteral(isLeaf)],
-            types: [dartSignature, nativeSignature]));
+    return buildAsFunctionInternal(
+      functionPointer: lookupResult,
+      nativeSignature: nativeSignature,
+      dartSignature: dartSignature,
+      isLeaf: isLeaf,
+      fileOffset: node.fileOffset,
+    );
   }
 
   // We need to rewrite calls to 'fromFunction' into two calls, representing the
@@ -777,7 +727,7 @@
             node.receiver.getStaticType(staticTypeContext!);
         final DartType nativeType = _pointerTypeGetTypeArg(pointerType)!;
 
-        _ensureNativeTypeValid(nativeType, node, allowCompounds: true);
+        ensureNativeTypeValid(nativeType, node, allowCompounds: true);
 
         Expression? inlineSizeOf = _inlineSizeOf(nativeType as InterfaceType);
         if (inlineSizeOf != null) {
@@ -795,7 +745,7 @@
                       as FunctionType);
         }
       }
-    } on _FfiStaticTypeError {
+    } on FfiStaticTypeError {
       // It's OK to swallow the exception because the diagnostics issued will
       // cause compilation to fail. By continuing, we can report more
       // diagnostics before compilation ends.
@@ -808,58 +758,6 @@
     return pointerType is InterfaceType ? pointerType.typeArguments[0] : null;
   }
 
-  void _ensureNativeTypeToDartType(
-      DartType nativeType, DartType dartType, Expression node,
-      {bool allowHandle: false}) {
-    final DartType correspondingDartType = convertNativeTypeToDartType(
-        nativeType,
-        allowCompounds: true,
-        allowHandle: allowHandle)!;
-    if (dartType == correspondingDartType) return;
-    if (env.isSubtypeOf(correspondingDartType, dartType,
-        SubtypeCheckMode.ignoringNullabilities)) {
-      return;
-    }
-    diagnosticReporter.report(
-        templateFfiTypeMismatch.withArguments(dartType, correspondingDartType,
-            nativeType, currentLibrary.isNonNullableByDefault),
-        node.fileOffset,
-        1,
-        node.location?.file);
-    throw _FfiStaticTypeError();
-  }
-
-  void _ensureNativeTypeValid(DartType nativeType, Expression node,
-      {bool allowHandle: false,
-      bool allowCompounds: false,
-      bool allowInlineArray = false}) {
-    if (!_nativeTypeValid(nativeType,
-        allowCompounds: allowCompounds,
-        allowHandle: allowHandle,
-        allowInlineArray: allowInlineArray)) {
-      diagnosticReporter.report(
-          templateFfiTypeInvalid.withArguments(
-              nativeType, currentLibrary.isNonNullableByDefault),
-          node.fileOffset,
-          1,
-          node.location?.file);
-      throw _FfiStaticTypeError();
-    }
-  }
-
-  /// The Dart type system does not enforce that NativeFunction return and
-  /// parameter types are only NativeTypes, so we need to check this.
-  bool _nativeTypeValid(DartType nativeType,
-      {bool allowCompounds: false,
-      bool allowHandle = false,
-      bool allowInlineArray = false}) {
-    return convertNativeTypeToDartType(nativeType,
-            allowCompounds: allowCompounds,
-            allowHandle: allowHandle,
-            allowInlineArray: allowInlineArray) !=
-        null;
-  }
-
   void _ensureIsStaticFunction(Expression node) {
     if ((node is StaticGet && node.target is Procedure) ||
         (node is ConstantExpression &&
@@ -871,7 +769,7 @@
         node.fileOffset,
         1,
         node.location?.file);
-    throw _FfiStaticTypeError();
+    throw FfiStaticTypeError();
   }
 
   /// Returns the class that should not be implemented or extended.
@@ -928,36 +826,12 @@
           klass.fileOffset,
           1,
           klass.location?.file);
-      throw _FfiStaticTypeError();
+      throw FfiStaticTypeError();
     }
   }
 
-  // Returns
-  // - `true` if leaf
-  // - `false` if not leaf
-  // - `null` if the expression is not valid (e.g. non-const bool, null)
-  bool? _getIsLeafBoolean(StaticInvocation node) {
-    for (final named in node.arguments.named) {
-      if (named.name == 'isLeaf') {
-        final expr = named.value;
-        if (expr is BoolLiteral) {
-          return expr.value;
-        } else if (expr is ConstantExpression) {
-          final constant = expr.constant;
-          if (constant is BoolConstant) {
-            return constant.value;
-          }
-        }
-        // isLeaf is passed some invalid value.
-        return null;
-      }
-    }
-    // isLeaf defaults to false.
-    return false;
-  }
-
   void _ensureIsLeafIsConst(StaticInvocation node) {
-    final isLeaf = _getIsLeafBoolean(node);
+    final isLeaf = getIsLeafBoolean(node);
     if (isLeaf == null) {
       diagnosticReporter.report(
           templateFfiExpectedConstantArg.withArguments('isLeaf'),
@@ -966,43 +840,11 @@
           node.location?.file);
       // Throw so we don't get another error about not replacing
       // `lookupFunction`, which will shadow the above error.
-      throw _FfiStaticTypeError();
-    }
-  }
-
-  void _ensureLeafCallDoesNotUseHandles(
-      InterfaceType nativeType, StaticInvocation node) {
-    // Handles are only disallowed for leaf calls.
-    final isLeaf = _getIsLeafBoolean(node);
-    if (isLeaf == null || isLeaf == false) {
-      return;
-    }
-
-    // Check if return type is Handle.
-    final functionType = nativeType.typeArguments[0];
-    if (functionType is FunctionType) {
-      final returnType = functionType.returnType;
-      if (returnType is InterfaceType) {
-        if (returnType.classNode == handleClass) {
-          diagnosticReporter.report(messageFfiLeafCallMustNotReturnHandle,
-              node.fileOffset, 1, node.location?.file);
-        }
-      }
-      // Check if any of the argument types are Handle.
-      for (DartType param in functionType.positionalParameters) {
-        if ((param as InterfaceType).classNode == handleClass) {
-          diagnosticReporter.report(messageFfiLeafCallMustNotTakeHandle,
-              node.fileOffset, 1, node.location?.file);
-        }
-      }
+      throw FfiStaticTypeError();
     }
   }
 }
 
-/// Used internally for abnormal control flow to prevent cascading error
-/// messages.
-class _FfiStaticTypeError implements Exception {}
-
 extension<T extends Object> on List<T> {
   /// Order-preserved distinct elements.
   List<T> distinct() {
diff --git a/tests/ffi/ffi_native_test.dart b/tests/ffi/ffi_native_test.dart
index 44b35fb..808c70c 100644
--- a/tests/ffi/ffi_native_test.dart
+++ b/tests/ffi/ffi_native_test.dart
@@ -8,29 +8,10 @@
 import 'dart:ffi';
 import 'dart:nativewrappers';
 
-// Error: FFI leaf call must not have Handle return type.
-@FfiNative<Handle Function()>("foo", isLeaf: true) //# 01: compile-time error
-external Object foo(); //# 01: compile-time error
-
-// Error: FFI leaf call must not have Handle argument types.
-@FfiNative<Void Function(Handle)>("bar", //# 02: compile-time error
-    isLeaf: true) //# 02: compile-time error
-external void bar(Object); //# 02: compile-time error
-
 class Classy {
   @FfiNative<IntPtr Function(IntPtr)>('ReturnIntPtr')
   external static int returnIntPtrStatic(int x);
 
-  // Error: Missing receiver in FfiNative annotation.
-  @FfiNative<Void Function(IntPtr)>('doesntmatter') //# 03: compile-time error
-  external void badMissingReceiver(int v); //# 03: compile-time error
-
-  // Error: Class doesn't extend NativeFieldWrapperClass1 - can't be converted
-  // to Pointer.
-  @FfiNative<Void Function(Pointer<Void>, IntPtr)>(//# 04: compile-time error
-      'doesntmatter') //# 04: compile-time error
-  external void badHasReceiverPointer(int v); //# 04: compile-time error
-
   @FfiNative<Void Function(Handle, IntPtr)>('doesntmatter')
   external void goodHasReceiverHandle(int v);
 }
@@ -39,10 +20,6 @@
   @FfiNative<IntPtr Function(IntPtr)>('ReturnIntPtr')
   external static int returnIntPtrStatic(int x);
 
-  // Error: Missing receiver in FfiNative annotation.
-  @FfiNative<Void Function(IntPtr)>('doesntmatter') //# 05: compile-time error
-  external void badMissingReceiver(int v); //# 05: compile-time error
-
   @FfiNative<Void Function(Pointer<Void>, IntPtr)>('doesntmatter')
   external void goodHasReceiverPointer(int v);
 
@@ -50,19 +27,6 @@
   external void goodHasReceiverHandle(int v);
 }
 
-// Error: Too many FfiNative parameters.
-@FfiNative<Handle Function(IntPtr, IntPtr)>(//# 06: compile-time error
-    'doesntmatter') //# 06: compile-time error
-external Object badTooManyFfiParameter(int v); //# 06: compile-time error
-
-// Error: Too few FfiNative parameters.
-@FfiNative<Handle Function(IntPtr)>('doesntmatter') //# 07: compile-time error
-external Object badTooFewFfiParameter(int v, int v2); //# 07: compile-time error
-
-// Error: FfiNatives must be marked external (and by extension have no body).
-@FfiNative<Void Function()>('doesntmatter') //# 08: compile-time error
-void mustBeMarkedExternal() {} //# 08: compile-time error
-
 // Regression test: Ensure same-name FfiNative functions don't collide in the
 // top-level namespace, but instead live under their parent (Library, Class).
 class A {
@@ -75,32 +39,6 @@
   external static void foo();
 }
 
-class DoesNotExtend implements NativeFieldWrapperClass1 {
-  // Error: Receiver type can't be converted to Pointer since it doesn't extend
-  // NativeFieldWrapperClass1.
-  @FfiNative<IntPtr Function(Pointer<Void>, Handle)>(//# 09: compile-time error
-      'doesntmatter') //# 09: compile-time error
-  external int bad1(DoesNotExtend obj); //# 09: compile-time error
-
-  // Error: Parameter type can't be converted to Pointer since it doesn't extend
-  // NativeFieldWrapperClass1.
-  @FfiNative<IntPtr Function(Handle, Pointer<Void>)>(//# 10: compile-time error
-      'doesntmatter') //# 10: compile-time error
-  external int bad2(DoesNotExtend obj); //# 10: compile-time error
-
-  // Error: Parameter type can't be converted to Pointer since it doesn't extend
-  // NativeFieldWrapperClass1.
-  @FfiNative<IntPtr Function(Pointer<Void>)>(//# 11: compile-time error
-      'doesntmatter') //# 11: compile-time error
-  external static int bad3(DoesNotExtend obj); //# 11: compile-time error
+void main() {
+  /* Intentionally empty: Checks that the transform succeeds. */
 }
-
-// Error: 'FfiNative' can't be declared with optional parameters.
-@FfiNative<Void Function([Double])>('doesntmatter') //# 12: compile-time error
-external static int badOptParam(); //# 12: compile-time error
-
-// Error: 'FfiNative' can't be declared with named parameters.
-@FfiNative<Void Function({Double})>('doesntmatter') //# 13: compile-time error
-external static int badNamedParam(); //# 13: compile-time error
-
-void main() {/* Intentionally empty: Compile-time error tests. */}
diff --git a/tests/ffi/vmspecific_static_checks_ffinative_test.dart b/tests/ffi/vmspecific_static_checks_ffinative_test.dart
new file mode 100644
index 0000000..24bd3d4
--- /dev/null
+++ b/tests/ffi/vmspecific_static_checks_ffinative_test.dart
@@ -0,0 +1,97 @@
+// Copyright (c) 2022, 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.
+
+// NOTE: There is no `test/ffi_2/...` version of this test since annotations
+// with type arguments isn't supported in that version of Dart.
+
+import 'dart:ffi';
+import 'dart:nativewrappers';
+
+void main() {
+  /* Intentionally empty: Compile-time error tests. */
+}
+
+// Error: FFI leaf call must not have Handle return type.
+@FfiNative<Handle Function()>("foo", isLeaf: true) //# 01: compile-time error
+external Object foo(); //# 01: compile-time error
+
+// Error: FFI leaf call must not have Handle argument types.
+@FfiNative<Void Function(Handle)>("bar", //# 02: compile-time error
+    isLeaf: true) //# 02: compile-time error
+external void bar(Object); //# 02: compile-time error
+
+class Classy {
+  // Error: Missing receiver in FfiNative annotation.
+  @FfiNative<Void Function(IntPtr)>('doesntmatter') //# 03: compile-time error
+  external void badMissingReceiver(int v); //# 03: compile-time error
+
+  // Error: Class doesn't extend NativeFieldWrapperClass1 - can't be converted
+  // to Pointer.
+  @FfiNative<Void Function(Pointer<Void>, IntPtr)>(//# 04: compile-time error
+      'doesntmatter') //# 04: compile-time error
+  external void badHasReceiverPointer(int v); //# 04: compile-time error
+}
+
+class NativeClassy extends NativeFieldWrapperClass1 {
+  // Error: Missing receiver in FfiNative annotation.
+  @FfiNative<Void Function(IntPtr)>('doesntmatter') //# 05: compile-time error
+  external void badMissingReceiver(int v); //# 05: compile-time error
+}
+
+// Error: Too many FfiNative parameters.
+@FfiNative<Handle Function(IntPtr, IntPtr)>(//# 06: compile-time error
+    'doesntmatter') //# 06: compile-time error
+external Object badTooManyFfiParameter(int v); //# 06: compile-time error
+
+// Error: Too few FfiNative parameters.
+@FfiNative<Handle Function(IntPtr)>('doesntmatter') //# 07: compile-time error
+external Object badTooFewFfiParameter(int v, int v2); //# 07: compile-time error
+
+// Error: FfiNatives must be marked external (and by extension have no body).
+@FfiNative<Void Function()>('doesntmatter') //# 08: compile-time error
+void mustBeMarkedExternal() {} //# 08: compile-time error
+
+class DoesNotExtend implements NativeFieldWrapperClass1 {
+  // Error: Receiver type can't be converted to Pointer since it doesn't extend
+  // NativeFieldWrapperClass1.
+  @FfiNative<IntPtr Function(Pointer<Void>, Handle)>(//# 09: compile-time error
+      'doesntmatter') //# 09: compile-time error
+  external int bad1(DoesNotExtend obj); //# 09: compile-time error
+
+  // Error: Parameter type can't be converted to Pointer since it doesn't extend
+  // NativeFieldWrapperClass1.
+  @FfiNative<IntPtr Function(Handle, Pointer<Void>)>(//# 10: compile-time error
+      'doesntmatter') //# 10: compile-time error
+  external int bad2(DoesNotExtend obj); //# 10: compile-time error
+
+  // Error: Parameter type can't be converted to Pointer since it doesn't extend
+  // NativeFieldWrapperClass1.
+  @FfiNative<IntPtr Function(Pointer<Void>)>(//# 11: compile-time error
+      'doesntmatter') //# 11: compile-time error
+  external static int bad3(DoesNotExtend obj); //# 11: compile-time error
+}
+
+// Error: 'FfiNative' can't be declared with optional parameters.
+@FfiNative<Void Function([Double])>('doesntmatter') //# 12: compile-time error
+external static int badOptParam(); //# 12: compile-time error
+
+// Error: 'FfiNative' can't be declared with named parameters.
+@FfiNative<Void Function({Double})>('doesntmatter') //# 13: compile-time error
+external static int badNamedParam(); //# 13: compile-time error
+
+// TODO(https://dartbug.com/49412): Implement in analyzer.
+@FfiNative<IntPtr Function(Double)>('doesntmatter') //# 14: compile-time error
+external int wrongFfiParameter(int v); //# 14: compile-time error
+
+// TODO(https://dartbug.com/49412): Implement in analyzer.
+@FfiNative<IntPtr Function(IntPtr)>('doesntmatter') //# 15: compile-time error
+external double wrongFfiReturnType(int v); //# 15: compile-time error
+
+// TODO(https://dartbug.com/49412): Implement in analyzer.
+@FfiNative<int Function(Double)>('doesntmatter') //# 16: compile-time error
+external int nonFfiParameter(int v); //# 16: compile-time error
+
+// TODO(https://dartbug.com/49412): Implement in analyzer.
+@FfiNative<double Function(IntPtr)>('doesntmatter') //# 17: compile-time error
+external double nonFfiReturnType(int v); //# 17: compile-time error
diff --git a/tools/VERSION b/tools/VERSION
index 42e501c..c439ee5b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 266
+PRERELEASE 267
 PRERELEASE_PATCH 0
\ No newline at end of file